Вопрос по постановке ордеров

 
Где-то в учебнике, не помню, где, сказано, что после ордера надо подождать 10 секунд, прежде, чем делать еще ордер. Вопрос: как отследить последний ордер в случае нескольких открытых окон? Есть ли в МТ4 аналог конструкции МТ3:
If CurTime > LastTradeTime + 10 Then
{
bCanTrade = True;
};
или надо методом перебора проверять все открытые ордера? Пример кода?

С уважением,
Кварк
 
К счастью, в МТ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-секундная задержка"