Lots = 0.1 и все запашет.
так он сейчас на демо стоит 5, чем он отличается от 0,1
Если хотите знать техническую причину: на "нулевом" счёте (на котором ещё не торговали) этот код будет работать. Тестер тому прямое подтверждение. А если на счёте торговали, то советник вычисляет лот равный 0 - а такого не может быть, потому, что "не может быть никогда". Глобальная переменная ticket = 0, а значит, нет возможности узнать лот предыдущего ордера.
Половинчатое решение может быть таким (замените блок "Вычисление рабочего лота"):
total = OrdersHistoryTotal(); if (IncreaseLot && total > 0) { if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_HISTORY)) //Выбираем предыдущий ордер из истории. { if (OrderProfit() <= 0) { Lot = NormalizeDouble(OrderLots()*LotFactor,2); if ( Lot > MaxLot) Lot = MaxLot; } if (OrderProfit() > 0) {Lot = Lots;} } else {Lot = Lots;} } if (total == 0) {Lot = Lots;} if (!IncreaseLot) {Lot = Lots;}
P.S. Удачи. (камикадзе она не помешает). :)))
Если хотите знать техническую причину: на "нулевом" счёте (на котором ещё не торговали) этот код будет работать. Тестер тому прямое подтверждение. А если на счёте торговали, то советник вычисляет лот равный 0 - а такого не может быть, потому, что "не может быть никогда". Глобальная переменная ticket = 0, а значит, нет возможности узнать лот предыдущего ордера.
Половинчатое решение может быть таким (замените блок "Вычисление рабочего лота"):
P.S. Удачи. (камикадзе она не помешает). :)))
А Вам ничего не говорит, что расчет лота будет выполняться если только уже есть закрытый какой то ордер: total > 0 - т.е. если !total > 0 - то счет нулевой то сразу идем на if (total == 0) {Lot = Lots;}
А Вам ничего не говорит, что total > 0 - т.е. если счет нулевой то сразу идем на if (total == 0) {Lot = Lots;}
И где Вы видите противоречие тому, что я сказал???
На счёте, на котором ранее проводились торговые операции (как вариант: перезагрузка этого советника после торговли), total > 0. А при первой загрузке (или перезагрузке) советника глобальная переменная ticket = 0.
А ещё: никогда не помешает делать нормализацию лота (хотя бы простейшую):
//+------------------------------------------------------------------+ double Normalize_Lot(double lot)// Проверка на допустимое значение лота //+------------------------------------------------------------------+ { double lot_min = MarketInfo(Symbol(), MODE_MINLOT); double lot_max = MarketInfo(Symbol(), MODE_MAXLOT); double lot_step = MarketInfo(Symbol(), MODE_LOTSTEP); if ( lot <= lot_min ) lot = lot_min; // минимальный else if ( lot >= lot_max ) lot = lot_max; // максимальный else lot = MathFloor( lot / lot_step ) * lot_step ; // округление до ближайшего меньшего return(lot); }
А ещё: никогда не помешает делать нормализацию лота (хотя бы простейшую):
Спасибо. Нормализация будет внутри автолота. Проблема была пока в этих открытиях. Пока не знаю стал открывать или нет. Не было еще условий
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет! Есть советник. В тестее работает, в рельном времени нет. Пробовал на демо 5 лотом форекс фо ю при демо-депо 10000. Т.е. денег хватает для открытия. Но пишет ошибку неправильного лота. Ломаю голову второй день. Вроде нигде ошибки нету. помогите пжс. Вот код и индикатор необходимый советнику
Сова:
Во вложении индикатор