Проверка лота

 
Привет! Скажите можно ли делать проверку лота (MODE_MARGINREQUIRED; MODE_MINLOT; и т.д.) в блоке инициализации и при ошибке возвращать -1? Просто не хочется чтобы на каждом тике проганяло...
 

Maksim Neimerik:
Привет! Скажите можно ли делать проверку лота (MODE_MARGINREQUIRED; MODE_MINLOT; и т.д.) в блоке инициализации и при ошибке возвращать -1?

Можно. В смысле, что никто не запрещает.

Просто не хочется чтобы на каждом тике проганяло...

На каждом тике и не нужно. Достаточно это делать перед отправкой торгового приказа. К тому же, на мой взгляд, при указании неправильного объема лучше не останавливать программу, а просто корректировать значение, приводя его к допустимому значению:

double VolumeCast(double volume, double volumeMin, double volumeMax, double volumeStep)
{
   if (volumeStep == 0.0)
      return volumeMin;

   return (MathMin(MathMax(MathFloor(volume / volumeStep) * volumeStep, volumeMin), volumeMax));
}

Ну или, в зависимости от постановки задачи, здесь можно MathFloor заменить на MathRound или MathCeil.

 
Maksim Neimerik:
Привет! Скажите можно ли делать проверку лота (MODE_MARGINREQUIRED; MODE_MINLOT; и т.д.) в блоке инициализации и при ошибке возвращать -1? Просто не хочется чтобы на каждом тике проганяло...

Можно, но зачем?

Предположим, у вас хватает на открытие позиции, потом она закрылась по стопу и денег больше нет, но у вас по прежнему будет хватать денег, потому что проверка была при запуске. Нужно проверять непосредственно перед открытием, а не на каждом тике.

 
Vitaly Muzichenko:

Можно, но зачем?

Предположим, у вас хватает на открытие позиции, потом она закрылась по стопу и денег больше нет, но у вас по прежнему будет хватать денег, потому что проверка была при запуске. Нужно проверять непосредственно перед открытием, а не на каждом тике.

Понял, спасибо!
Причина обращения: