Пример SMA для Quik. Тайм-фрейм 5 секунд. Графики все отключены (с ними память жрёт ококо 600 Мб - 1 Гб и программа висит). Без графиков память 150 Мб. После старта стратегии прошло 2 минуты. Вопрос: Где бродят данные свечи, поступившие с
_candleManager.Processing += (series, candle) =>
до значения индикатора
LongSma.Process((DecimalIndicatorValue)candle.ClosePrice);
ShortSma.Process((DecimalIndicatorValue)candle.ClosePrice);
Kommentare (22)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Смотрите документацию: Свечки>График.
Объясню вопрос другими словами. candlemanger за 60 сек переработал 12 5-секундных свечей, а strategy за 60 сек только одну(или две, три, но меньше 12). Где клинет?
Телепаты в отпуске. По сообщениям не понятно в чем проблема. Нет никакого описания как это воспроизвести. Нет никакого кода, который бы показал суть ошибки. Есть только видео, на котором опять же ничего не понятно.
Вот исходник с доделками Quik\SampleSMA версии 4.1.2. Ждать пока все сделки совершатся.
Никуда ничего не пропадает, просто время свечки из стратегии берется только при изменении параметров стратегии, которые, видимо, меняются довольно редко.
Стратегия строится на основе простых скользящих средних, которые заполняются данными из свечек (candle.ClosePrice). Т.е. с приходом свечки срабатывает событие
csharp _candleManager.Processing...и строится свечка, после должны автоматически вычисляться скользящие средние ```csharp Sma.Process((DecimalIndicatorValue)candle.ClosePrice);и т.д. с каждой свечкой. Это проверяется с помощью останова и шагом с заходом. Причём стратегия не может знать какие данные пришли ( может короткая пересекла длинную или наоборот), т.е. она должна обрабатывать каждую свечку и вовремя. Да, ещё стратегия совсем простая, в ней нет никаких наисложнейщих вычислений и обрабатывает всего одну бумагу. Т.е. задержка должна быть милисекунда.
Так и поставьте точку останова на
посмотрите, как часто она вызывается. А обрабатывать событие _strategy.PropertyChanged для получения последней свечки из стратегии не совсем корректно, кто его вызывать будет когда туда новая свеча приходит?
Попробуйте вместо:
Написать:
MaximMM Вашу мысль попробовал - тоже самое. _strategy.PropertyChanged - это событие изменения параметров стратегии. Sma.Process((DecimalIndicatorValue)candle.ClosePrice); - это параметр стратегии? Я думаю, что Да. Значит при изменении его должно срабатывать это событие. Но оно не срабатывает с каждым изменением индикаторного значения. Если поставить остановы на
и
и
то первые два работают в цикле всегда, а третье по своему тайному алгоритму. Ещё возник вопрос по объёму стратегии (по умолчанию: Volume = 1), но если посмотреть на сделки, то их 5, 7, или 10 на одной свечке(т.е. при одном расположении скользящих средних). Откуда такое количество сделок?
в class SmaStrategy добавляем метод:
в метод private void ProcessCandle(Candle candle) добавляем обращение к вышенаписанному методу
Тогда при изменении значения свечки сразу же изменяется параметр стратегии. Т.е. работает цикл:
esper - спасибо! Ответьте ещё на вопрос о объёме.
его не надо добавлять, он есть в базовой стратегии.
Опять всё про стратегию, сделки и объёмы.
Использовалось вот это котирование:
да при этом
практически никакой разницы
Еще раз, без логов от стратегии котирования ничего сказать нельзя.
А где их взять?
Для логирования сообщений необходимо добавить ``` strategy
Вот куча лог файлов. Но там нет данных по значениям индикаторов. По этим данным всё равно не понятно почему стратегия котирования делает столько сделок в самом начале (потом все нормально по 1 объёму, но не понятно в какое время (почему в этот момент, а не в другой)). В конце первого котирования - позиция может быть нулевой (т.е. сколько купили столько и продали - Смысл?). Да, причём за каждую сделку берётся комиссия (например: 10 покупок и 10 продаж - комиссия за 210 +210=40 сделок и со стороны биржи и брокера). Если попробовать вот это, по логике должна совершиться 1 сделка,
но совершается 10-25сделок на одну свечу, причём как в сторону покупки так и продажи и результат позиция около 0. Просьба к тем кто разобрался, объясните что делает котирование при старте стратегии (на пальцах, по подробнее, с примером). То же самое о RegisterOrder? В моём понимании должна быть вот такая серия стратегий:
Больше похоже на проблемы в вызывающем коде. RegisterOrder точно один раз вызывается?
Да все таки похоже есть проблема в MarketQuotingStrategy.. пока тоже разобраться не могу с кучей заявок
Приводите логи, где видно что котирование набирает лишнего.
По логам, приведенным выше, складывается впечатление, что котирование запускается множество раз, как подтверждение этой мысли - проблема с RegisterOrder, который тоже вызывается множество раз, он то точно не может исполнить одну заявку несколько раз.
Всё в том же примере SampleSMA и в других тоже, начиная с 5-6 запуска программы зависает DDE сервер на 40-70сек. Первые запуски DDE проходят за 2-3 секунды. Так у всех или только у меня? В чём проблема?