Здравствуйте. Недавно начал ознакамливаться с документацией S# (для Quik), в основном осталось положительное впечатление. Но в примере SampleSMA из документации я дописал к стратегии код, который перед каждой проверкой на пересечение (строчка if (_isShortLessThenLong != isShortLessThenLong)) должен записывать в файл значения Bid и Ask. Свечи используются 5-минутные, но запись ведётся с запозданием примерно в полторы минуты. Соединение нормальное, время на компьютере и время на бирже совпадают, в Quik данные приходят вовремя, запаздывание одинаковое от свечки к свечке. С чем это связано и как это исправить?
Комментарии (10)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Если хотите получить ответ на вопрос, пишите максимум информации. Показывайте код, где и как вы делает сохранение, чтобы не приходилось догадываться. Телепаты в отпуске.🙂
UPD: Создавайте темы в соответствующих разделах. К разделу Обучение программированию роботов ваш вопрос отношения не имеет.
А управление в свою очередь производится из этого кода, я оттуда удалил ни на что не влияющую прорисовку свечей. Код весь взят из SampleSMA, который находится у Вас на сайте stocksharp.com
А управление в свою очередь производится из этого кода, я оттуда удалил ни на что не влияющую прорисовку свечей. Код весь взят из SampleSMA, который находится у Вас на сайте stocksharp.com
Что именно происходит с запаздыванием в 1.5 минуты?
У вас код
будет выполняться не чаще чем каждые 5 минут - когда вызывается OnProcess. Может выполняться и реже - когда сработал один из return до этого года.
Т.е. он может выполняться и раз в 15 минут, и раз в 5 минут - всё зависит от условий до вышего вывода.
Что вы ожидаете от этого кода?
System.IO.File.AppendAllText(@"D:\temp.txt", Security.BestAsk + "\t\t" + Security.BestBid + "\r\n");
C чего взяли что задержка? Как часто вызывается OnProcess?
Вы используете таймфрейм стратегию, вызов OnProcess просто срабатывает раз в 5 минут. Никто не обещает что он срабатывает именно в 11-00, 11-05 и т.д. Он берёт время когда вы создаёте и запускаете стратегию и дальше делает +5 минут. Хотите чтоб чаще срабатывал OnProcess - задайте Interval.
P.S. Я не основатель :)
И ещё: торги начинаются в 10-00, а если я запущу вышенаписанный код в 9-00 (и пойду по делам), то он просто будет ждать начала торгов, а затем нормально отработает весь день (если ничего не портить и не ломать)? Иными словами, есть ли необходимость самостоятельно дописывать код, чтобы он "включался самостоятельно" к началу торгов или это уже учтено?
S# просто запускает OnProcess раз в timeframe. Всё что выполняется далее зависит от того что написано в OnProcess. Если у вас там написано слать заявки на каждый вызов - он будет слать заявки и в клиринг, и ночью.
Спасибо, понял. Только вот по ходу написания робота возникло несколько вопросов, напишу здесь, чтобы не плодить заголовков:
1 - при подключении к Quik сразу же возникают 2 портфеля, которые я не создавал. Каким из них пользоваться и если они служат для разных целей, то для каких именно и почему у них такие странные имена? 2 - Как создать заявку, которая просто "сметает" те предолжения, которые сейчас есть, невзирая на их цену (конечно же, они должны начинаться от лучшего к худшему)? Например, когда пишем
Затем цена рынка поменялась в ту или иную сторону, меня она в любом случае устраивает, но заявка не выполняется, т.к. цена изменилась, и предложений по цене Security.GetMarketPrice(direction) сейчас нет. Что делать, чтобы в любом случае выполнилась заявка (съела часть стакана, даже если что-то выполнилось по худшей цене)? 3 - Правильно ли я понял, что для закрытия позиции надо совершить противоположную сделку с тем же инструментом (если купил, то потом продать такой же объём)? 4 - Как выставить stop-loss или зафиксировать прибыль: так
или созданием противоположной заявки, как только цена достигнет того уровня, на который мы ориентируемся? Под снятием заявки у Вас подразумеваются уже исполненные заявки или те, которые ещё не успели исполниться, но которые по какой-то причине надо снять? Можно ли заранее прописать stop-loss, чтобы сделка автоматически закрывалась, как только цена достигнет определённного уровня?