К счастью, в МТ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;
};
или надо методом перебора проверять все открытые ордера? Пример кода?
С уважением,
Кварк