А про эту кнопочку не забыли?:
Должна гореть зеленым и рожа советника в правом верхнем углу должна улыбаться
Sepulca, прочитайте внимательнее :)
Я написал, что советник включен (рожа улыбается). И на скриншоте это видно, я специально показал.
А, да, не заметил сразу, извините. Попробовал Ваш советник у себя не демо, не торгует(но пытается) потому что сразу начинает открывать большой лот, и моих демовских денег просто не хватает. Но при этом в журнале пишет
2013.04.26 16:46:24 '4005553': order sell 1.50 EURUSD opening at 1.30312 sl: 1.30812 tp: 1.29562 failed [Not enough money]
Попробуйте переделать что бы начинал с меньших лотов. У меня остаток 70 USD. А советник сразу пытается открыть 1.5 лота.....
А какой у вас изначальный лот был в настройках советника? Я обычно ставлю 0.01.
Где это Вы ставите? А в советнике не видите?
switch(LotFactor) { case 1 : LotF=1.5; break; case 2 : LotF=3; break; case 3 : LotF=5; break; case 4 : LotF=9; break; case 5 : LotF=17; break; case 6 : LotF=33; break; case 7 : LotF=65; break; case 8 : LotF=129; break; case 9 : LotF=257; break; case 10 : LotF=513; break; case 11 : LotF=1025; break; case 12 : LotF=2049; break; default : LotF=513; break; }Самоубийство! Кто больше?
Игрушка миллиардеров!
А какой у вас изначальный лот был в настройках советника? Я обычно ставлю 0.01.
Так этот 0.01 у Вас умножается на довольно большой коэфф. Я тоже поставил начальный в параметрах 0.01, однако все равно начала с 1.5. Что-то с логикой в советнике не так.
Насколько я понимаю из текста советника, если во всей предыдущей истории счета найдется хотя бы один убыточный ордер ( а такой 99.99% найдется) то Вы открываете новый ордер лотом в два раза больше чем размер лота последнего убыточного.
При этом не пытаетесь отфильтровать убыточный по инструменту, магику, типу и т.д.
oldtotal = OrdersHistoryTotal(); if(oldtotal > 0) { OrderSelect(oldtotal - 1, SELECT_BY_POS, MODE_HISTORY); if(OrderProfit() > 0) { if(OrderType() == OP_BUY) { buy=false; } if(OrderType() == OP_SELL) { buy=true; } } if(OrderProfit() < 0) { Lots = OrderLots() * 2; if(OrderType() == OP_BUY) { buy=true; } if(OrderType() == OP_SELL) { buy=false; } } else { Lots = Lot; } }
Суть советника в том, что он в самом начале открывает сделку buy, лотом 0.01. Если она выбьет стоп лосс, открывается еще одна сделка в ту же сторону, но удвоенным лотом. Мартингейл короче. Но, это Мартингейл с насыщением так сказать. Если LotFactor поставить 10, то он ограничит рост лота на отметке 5.12(если изначальный был 0.01) и дальше лот изменяться не будет до тех пор, пока не появится выигрышная сделка. Возможно в коде есть ошибка, однако в тестере стратегий этот советник работает четко как надо.
Написал в коде подробные комментарии.
borilunad, перед тем как давать импульсивные комментарии, посмотрите внимательно на код. Эти гигантские цифры - это переменная LotF, которая не является лотом, а является лишь множителем. Если мы 513 умножим на лот = 0.01, получается 5.13 - это порог насыщения, когда лот больше не будет расти во избежание разорения.
Sepulca, очевидно, когда вы тестировали, у вас лот стоял 1.
И вы неправильно интерпретируете:
OrderSelect(oldtotal - 1, SELECT_BY_POS, MODE_HISTORY);
Видите oldtotal - 1, он смотрит убыточный ли предыдущий ордер, а не вообще во всей истории.
borilunad, перед тем как давать импульсивные комментарии, посмотрите внимательно на код. Эти гигантские цифры - это переменная LotF, которая не является лотом, а является лишь множителем. Если мы 513 умножим на лот = 0.01, получается 5.13 - это порог насыщения, когда лот больше не будет расти во избежание разорения.
Sepulca, очевидно, когда вы тестировали, у вас лот стоял 1.
И вы неправильно интерпретируете:
Видите oldtotal - 1, он смотрит убыточный ли предыдущий ордер, а не вообще во всей истории.
))))) Так нет же, представьте, запускаете свой советник после десятилетнего перерыва деятельности на форекс. Вроде как он должен начать с 0.01 лота. Но десять лет назад последний закрытый ордер был убыточный, и советник берет лоты этого древнего ордера, умножает их на два и пытается открыть новую позицию. Что у меня и случилось после слива демодепозита, так как последние ордера (без участия Вашего советника были закрыты) в минус. Безопасней запоминать OrderTicket последнего открытого ордера во внешней переменной плюс (на случай перезапуска советника) в GlobalVariables. А закрылся он или нет определять с помощью OrderCloseTime( ) > 0.
Или, второй вариант, чтобы глобально все не переделывать, введите проверку на магик последнего закрытого ордера в истории oldtotal-1.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте,
Я написал советник, код которого приведен ниже.
Суть советника в том, что он в самом начале открывает сделку buy, лотом 0.01. Если она выбьет стоп лосс, открывается еще одна сделка в ту же сторону, но удвоенным лотом. Мартингейл короче. Но, это Мартингейл с насыщением так сказать. Если LotFactor поставить 10, то он ограничит рост лота на отметке 5.12(если изначальный был 0.01) и дальше лот изменяться не будет до тех пор, пока не появится выигрышная сделка. Возможно в коде есть ошибка, однако в тестере стратегий этот советник работает четко как надо.
Он нормально тестируется в тестере, но когда я ставлю его на график, он почему-то не торгует. На скриншоте видны настройки и то, что советник включен(смайлик). В журнале единственная строчка: 2013.04.26 15:56:04 Expert PureMartingale EURUSD,H1: loaded successfully. Однако когда я ставлю ручное подтверждение в настройках, он сразу предлагает открыть сделку. Я пробовал данный советник на разных компьютерах с MT4, и на обоих одно и тоже. Подскажите, в чем может быть проблема? Заранее большое спасибо!
Код советника: