Скорее всего Вам сразу же запретят торговать. И будут абсолютно правы.
Безусловно Вы получите максимальные репрессии за бесконечные циклы и такие частые запросы.
Скорее всего Вам сразу же запретят торговать. И будут абсолютно правы.
Таким образом, единственно верная частота обновления котировок - та, которую дает брокер? То есть на реальном счете можно работать только по приходу нового тика от брокера - по функции start()?.
Интересно, различаются ли котировки от демо и реала от одного и того же брокера? Если нет или слабо отличаются (1-2) пипса, то через разделяемую память можно организовать так:
1 - с демо пишутся котировки с заданной частотой в эту память, так как на демо нет этой ошибки.
2 - с реального счета эти же котировки читаются
В это случае мы получаем то, что требуется - обновление котировок с заданной частотой.
Зачем это понадобилось - на новостях за тик иногда получаем движение в 5-6 пунктов, что ведет к сильному проскальзыванию. Если котировки получаем сами, немного раньше тика - этого можно избежать.
"Конфликтует тело с организмом" (М.Жв.)
Поэтому я сам обновлял котировки раз в секунду. На демо счете все идеально работало, был профит.
Но на реальном ничего не выйдет, так как нельзя требовать котировки часто. Вот и возникает вопрос, как можно сделать так, чтобы не ждать постоянно функции start(). Вариант с бесконечным циклом и RefleshRates() отметается на реальном счете.
Одно из предложений - запрашивать с демо счета и передавать в реальный. Цены вроде совпадают.
Другой вариант, к которому я сегодня пришел - отправка котировок, ожидание (секунда), запрос действия от dll. Думаю, это неплохое решение проблемы. Котировки получаем по start(), действия от dll - через секунду после этого, как раз все успеет обработаться. Правда ,получаем риск пропущенного тика.
Но может есть идеи получше?
RefleshRates() не посылает запросов на торговый сервер.
while (true) { Sleep(1000); RefreshRates(); if (GetAction(IdCurrent,Bid,Ask, action)) { switch (action[0]) { case 1 : { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,0,0,0,magik); if (ticket<0) { while (ticket<0) { Print("ERROR buy", GetLastError()); Sleep(1000); RefreshRates(); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,slippage,0,0,0,magik); } } if (OrderSelect(ticket,SELECT_BY_TICKET)==true) { if (!SetRealPrice(IdCurrent,OrderOpenPrice())) Print("Error to data"); } else Print("OrderSelect() вернул ошибку - ",GetLastError()); break; } case 2 : { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,0,0,0,magik); if (ticket<0) { while (ticket<0) { Print("ERROR sell", GetLastError()); Sleep(1000); RefreshRates(); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,slippage,0,0,0,magik); } } if (OrderSelect(ticket,SELECT_BY_TICKET)==true) { if (!SetRealPrice(IdCurrent,OrderOpenPrice())) Print("Error to data"); } else Print("OrderSelect() вернул ошибку - ",GetLastError()); break; } case 3 : { if (!CloseOrder(Bid,Ask)) { while (!closeposition) { Sleep(2000); closeposition=(CloseOrder(Bid,Ask)); } } break; } } closeposition=false; action[0]=0; } }
То есть на реальном счете этот кусок кода будет работать?
Тогда возникает вопрос - что есть програмный запрос на торговый сервер брокера?
Есть.
Осмыслить простой порядок вещей: как только котировка из внешнего
мира приходит в ДЦ, он пысылает её тиком в клиентский терминал.
Если дёргать ДЦ между тиками, то всё, что ДЦ может ответить, -
это последняя известная котировка (ранее пришедшая также в
терминал с тиком).
Котировка - это просто цена.
Тик - это явление - автоматическое сообщение сервером последней
известной котировки в терминал.
Котировка принадлежит тику так же, как протектор принадлежит
колесу, крона дереву, а сообщение форуму.
Вы не сможете прочитать моё сообщение на форуме до те х пор,
пока я его не напишу, даже если каждую секунду будете обновлять
форум.
Единственное, что можно прочесть - это последнее опубликованное
сообщение.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Если на реальном счете делается запрос в бесконечном цикле раз в секунду - будет ли это ошибкой? Запретит ли брокер торговать из-за этого?
Если на одном терминале 12-20 экспертов и все запрашивают цену раз в секунду - будет ли это слишком много запросов?Запретит ли брокер торговать из-за этого?