Проблемы с 200 Билдом. - страница 2

 
Renat писал (а):
Тогда вышлите мне на renat AT metaquotes . ru полный код эксперта - я самостоятельно протестируюсь, опубликую результаты, а затем удалю код.

Эксперта отправил.
 
stringo писал (а):
Сообщение "invalid lots amount" выдаётся в том случае, когда количество лотов <=0

Даже из приведённого фрагмента видно, что Вы неправильно используете функции. Что это за код?
    if (AccountFreeMargin()<a)
      {Comment ("Недостаточно средств на счете для открытия ордера!!!"); return (0);}
   
    CalculateVolume();
    
    return (0);

Средств не хватает, поэтому Вы не рассчитываете объём. Тем не менее пытаетесь открыть ордер. Всегда!

??????????????????????????????????????????????????????????
 
DEan писал (а):

??????????????????????????????????????????????????????????
А что Вы так удивляетесь?
Вот Ваша картинка


Ясно виден коммент "Недостаточно средств на счете для открытия ордера"
Что это значит? А то, что функция CalculateVolume не была вызвана. То есть, переменная vol осталась непосчитанной. И если эта переменная не была явно инициализирована, то её значение равно 0.

Вы как ни в чём ни бывало вызываете функцию OrderSend с нулевым значением vol. И получаете ошибку.
 
Зачем мне нужен Ваш эксперт? Я Вам должен исправлять эксперта, который Вы пишете на заказ?

Я Вам уже показал на ошибку. Вне зависимости от того, как отработает функция CheckForFreeMarging Вы вызываете функцию OrderSend! При этом может быть использовано непредсказуемое количество лотов.

Представляете, на предыдущей итерации Вы насчитали 10 лотов. На следующей итерации Вы не пересчитаете это количество из-за того, что сработает условие
if (AccountFreeMargin()<a)
Представляете, если после этого Вы откроете позицию с 10 лотами. Что скажет Ваш заказчик?
 
Да, Слава верно говорит - я проглядел момент, когда vol=0 из-за выхода по условию if (AccountFreeMargin()<a)
 
stringo писал (а):
Зачем мне нужен Ваш эксперт? Я Вам должен исправлять эксперта, который Вы пишете на заказ?

Я Вам уже показал на ошибку. Вне зависимости от того, как отработает функция CheckForFreeMarging Вы вызываете функцию OrderSend! При этом может быть использовано непредсказуемое количество лотов.

Представляете, на предыдущей итерации Вы насчитали 10 лотов. На следующей итерации Вы не пересчитаете это количество из-за того, что сработает условие
if (AccountFreeMargin()<a)
Представляете, если после этого Вы откроете позицию с 10 лотами. Что скажет Ваш заказчик?


Извините, не сразу понял очем речь. Профессионалу достаточно всего одного взгляда, чтобы увидеть неверный код.
Все исправил, журнал чист. Большое спасибо, еще раз извиняюсь за потраченное на меня время.
Век живи, век учись.
Причина обращения: