Где бродит свеча
Atom
27.08.2012
alex123456


Пример SMA для Quik. Тайм-фрейм 5 секунд. Графики все отключены (с ними память жрёт ококо 600 Мб - 1 Гб и программа висит). Без графиков память 150 Мб. После старта стратегии прошло 2 минуты. Вопрос: Где бродят данные свечи, поступившие с

_candleManager.Processing += (series, candle) =>

до значения индикатора

LongSma.Process((DecimalIndicatorValue)candle.ClosePrice);
ShortSma.Process((DecimalIndicatorValue)candle.ClosePrice);

Теги:


Спасибо:


1 2 3  >
MaximMM

Фотография
Дата: 28.08.2012
Ответить


Смотрите документацию: Свечки>График.

Спасибо:

alex123456

Фотография
Дата: 29.08.2012
Ответить


Объясню вопрос другими словами. candlemanger за 60 сек переработал 12 5-секундных свечей, а strategy за 60 сек только одну(или две, три, но меньше 12). Где клинет?

Спасибо:

esper

Фотография
Дата: 29.08.2012
Ответить


Телепаты в отпуске. По сообщениям не понятно в чем проблема. Нет никакого описания как это воспроизвести. Нет никакого кода, который бы показал суть ошибки. Есть только видео, на котором опять же ничего не понятно.

Спасибо:

alex123456

Фотография
Дата: 29.08.2012
Ответить


Вот исходник с доделками Quik\SampleSMA версии 4.1.2. Ждать пока все сделки совершатся.

SampleSMA2.zip 7 MB (589)
Спасибо:

esper

Фотография
Дата: 29.08.2012
Ответить


Никуда ничего не пропадает, просто время свечки из стратегии берется только при изменении параметров стратегии, которые, видимо, меняются довольно редко.

Спасибо:

alex123456

Фотография
Дата: 29.08.2012
Ответить


Стратегия строится на основе простых скользящих средних, которые заполняются данными из свечек (candle.ClosePrice). Т.е. с приходом свечки срабатывает событие csharp _candleManager.Processing... и строится свечка, после должны автоматически вычисляться скользящие средние ```csharp Sma.Process((DecimalIndicatorValue)candle.ClosePrice);

после проверяются следующие условия:
```csharp
var isShortLessThenLong = ShortSma.LastValue < LongSma.LastValue;
			// если произошло пересечение
			if (_isShortLessThenLong != isShortLessThenLong)
....

и т.д. с каждой свечкой. Это проверяется с помощью останова и шагом с заходом. Причём стратегия не может знать какие данные пришли ( может короткая пересекла длинную или наоборот), т.е. она должна обрабатывать каждую свечку и вовремя. Да, ещё стратегия совсем простая, в ней нет никаких наисложнейщих вычислений и обрабатывает всего одну бумагу. Т.е. задержка должна быть милисекунда.

Спасибо:

esper

Фотография
Дата: 29.08.2012
Ответить


Так и поставьте точку останова на

Sma.Process((DecimalIndicatorValue)candle.ClosePrice);

посмотрите, как часто она вызывается. А обрабатывать событие _strategy.PropertyChanged для получения последней свечки из стратегии не совсем корректно, кто его вызывать будет когда туда новая свеча приходит?

Спасибо:

MaximMM

Фотография
Дата: 29.08.2012
Ответить


Попробуйте вместо:

candleManager.Processing += (series, candle) =>
{

                            this.GuiAsync(() => { TimeCandle.Content = candle.OpenTime.ToLongTimeString(); });

};

Написать:

_candleManager.Processing += DrawCandle;

...

private void DrawCandle(CandleSeries series, Candle candle)
{
    if (candle.State == CandleStates.Finished) this.GuiAsync(() => TimeCandle.Content = candle.OpenTime.ToLongTimeString(); );
}
Спасибо:

alex123456

Фотография
Дата: 30.08.2012
Ответить


MaximMM Вашу мысль попробовал - тоже самое. _strategy.PropertyChanged - это событие изменения параметров стратегии. Sma.Process((DecimalIndicatorValue)candle.ClosePrice); - это параметр стратегии? Я думаю, что Да. Значит при изменении его должно срабатывать это событие. Но оно не срабатывает с каждым изменением индикаторного значения. Если поставить остановы на

this.GuiAsync(() => { TimeCandle.Content = candle.OpenTime.ToLongTimeString(); });

и

LongSma.Process((DecimalIndicatorValue)candle.ClosePrice);

и

TimeCandleStrategy.Content = _strategy._candle;

то первые два работают в цикле всегда, а третье по своему тайному алгоритму. Ещё возник вопрос по объёму стратегии (по умолчанию: Volume = 1), но если посмотреть на сделки, то их 5, 7, или 10 на одной свечке(т.е. при одном расположении скользящих средних). Откуда такое количество сделок?

Спасибо:

esper

Фотография
Дата: 30.08.2012
Ответить


alex123456: Sma.Process((DecimalIndicatorValue)candle.ClosePrice); - это параметр стратегии? Я думаю, что Да. Нет, это не параметр стратегии. alex123456: Значит при изменении его должно срабатывать это событие. Но оно не срабатывает с каждым изменением индикаторного значения. Вы добавили какое-то поле в производном классе, откуда стратегия должна знать что это такое, параметр это или нет? Сделайте свое событие, которое будете сами и вызывать когда надо, либо смотрите в сторону Strategy.Notify.

Спасибо:
1 2 3  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy