К счастью, в МТ4 снято ограничение на 10 секунд между торговыми операциями. Поищите, пожалуйста, по форуму - подробные объяснения неоднократно уже давались за последние месяцы.
Вопрос: как отследить последний ордер в случае нескольких открытых окон?
Заводим глобальную переменную типа "LastTradeTime", в которую помещаем время отправки последнего ордера. Перед выдачей нового ордера проверяем что прошло нужное время.
Что нибудь типа
.............. while (LocalTime() - GlobalVariableGet("LastTradeTime") < TimeOut) { Sleep((TimeOut - (LocalTime() - GlobalVariableGet("LastTradeTime")))*1000 + MathRand()/100); } GlobalVariableSet("LastTradeTime", LocalTime()); OrderSend(....................); .................
В цикле ожидаем заданное время до оконцания TimeOut + случайное от 0 до 0.3 сек.
Если несколько экспертов захотят одновременно отправить ордер, дополнительная случайная задержка может уменьшить вероятность одновременной отсылки ордеров.
На самом деле этот код тоже на 100% не гарантирует минимальный таймаут.
Этот код не проверял.
Как раз собираюсь себе нечто подобное сделать.
Вариант:
double Glob(string Name, double DefVal = 0.0) { double R = DefVal; if (GlobalVariableCheck(Name)) R = GlobalVariableGet(Name); else GlobalVariableSet(Name, R); return (R); } int WaitOrderTimeOut() { int tm = Glob("LastTradeTime", LocalTime() + 10) + Glob("OrderTimeOut", 10) - LocalTime(); while(tm > 0) { Sleep(tm*1000 + MathRand()/32); tm = Glob("LastTradeTime") + Glob("OrderTimeOut") - LocalTime(); } GlobalVariableSet("LastTradeTime",LocalTime()); }
Пока не проверял, но должно работать.
WaitOrderTimeOut() - вызывается перед каждой операцией с ордерами.
Провел я поиск в архиве форума, но однозначного ответа не нашел. Итак, что произойдет, если МТ4 выдаст два ордера за 10 секунд?
Уважаемый Кварк!
А как Вы искали? Я напечатал в строке поиска "задержка" и нашел 26 тредов, где упоминается это слово. Вот, например, тема так и называется "10-секундная адержка"
"10-секундная задержка"
А как Вы искали? Я напечатал в строке поиска "задержка" и нашел 26 тредов, где упоминается это слово. Вот, например, тема так и называется "10-секундная адержка"
"10-секундная задержка"
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
If CurTime > LastTradeTime + 10 Then
{
bCanTrade = True;
};
или надо методом перебора проверять все открытые ордера? Пример кода?
С уважением,
Кварк