Здравствуйте. Недавно начал ознакамливаться с документацией S# (для Quik), в основном осталось положительное впечатление. Но в примере SampleSMA из документации я дописал к стратегии код, который перед каждой проверкой на пересечение (строчка if (_isShortLessThenLong != isShortLessThenLong)) должен записывать в файл значения Bid и Ask. Свечи используются 5-минутные, но запись ведётся с запозданием примерно в полторы минуты. Соединение нормальное, время на компьютере и время на бирже совпадают, в Quik данные приходят вовремя, запаздывание одинаковое от свечки к свечке. С чем это связано и как это исправить?
Kommentare (10)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Если хотите получить ответ на вопрос, пишите максимум информации. Показывайте код, где и как вы делает сохранение, чтобы не приходилось догадываться. Телепаты в отпуске.🙂
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, чтобы сделка автоматически закрывалась, как только цена достигнет определённного уровня?