Советники: Martin for small deposits

 

Martin for small deposits:

Советник на базе мартингейла с особенностью: советник задуман специально для маленьких депозитов. Это достигается тем, что советник имеет настраиваемый параметр "Number of bars to be skipped" - пропуск определенного количества баров после последнего входа.

Как это работает: допустим есть первая открытая позиция BUY и на следующем новом бар снова есть сигнал к открытию (цена ушла вниз на шаг "Step between positions"). И на следующих двух барах снова были сигналы к открытию позиций BUY. Обычный мартингейл открыл бы уже четыре подряд позиции и получили бы такой объем (с учетом стартового лота 0.01 и коэффициента увеличения 2.0):

  • #1 BUY 0.01
  • #2 BUY 0.02
  • #3 BUY 0.04
  • #4 BUY 0.08

Такая нагрузка для маленького депозита может оказаться губительной. А вот эксперт с настройкой "Number of bars to be skipped" (пусть она равна 3) в этой же ситуации открыл бы первую позицию BUY 0.01, потом пропустил три бара и открыл бы вторую позицию BUY 0.02.

Тест на EURUSD,H1:

Martin for small deposits

Автор: Vladimir Karputov

 

Здравствуйте, Владимир!

потестировал немного этот советник. запустил на демке на сутки и в тестере погонял. И в первом и во втором виде тестирования были вопросы к правильности отрабатывания кода. Например когда советни стоял на демке, в какой-то период он после закрытия всехпозиций открывал новые позицию не минимальным лотом, а следующей ступенью. Это конечно существенно подняло баланс, но как мне кажется логика сбойнула. А когда тестировал с визуализацией нередка ситуация, что открыв 2-3 позиции и получив общий профит по ним больше, чем задано в переменной InpMinProfit советник не закрывает их, а ждет когда они все закроются по take profit

К сожалению у меня все плохо с ООП и программированием на С++, поэтому даже видя исходный код я не могу понять из-за чего так происходит.

 

Я не знаю, возможно ли, чтобы этот советник выходил при X долларах выше "высокой водной отметки" капитала... вместо общего "закрыть все", установленного на минимальную прибыль. Я всегда могу рассчитать это вручную с помощью текущего советника (отличный советник)... но внедрение "мышления по высокой водной отметке" было бы революционным! Также было бы здорово автоматизировать шаги с ATR вместо того, чтобы вручную и статично устанавливать их. Это позволило бы советнику стать "самонастраивающимся" в медленные периоды.

мб

 
Хорошая стратегия. Какой сигнал он использует для открытия покупок и открытия продаж?
 
sergiomt :
Хорошая стратегия. Какой сигнал он использует для открытия покупок и открытия продаж?

Блок решений:

   if(count_buys==0 || count_sells==0) // проверьте открытие позиции "продать"
     {
      if(count_buys==0 && count_sells>0)
        {
         if(m_symbol.Bid()-price_highest_sell>ExtStep)
            need_to_open_a_sell=true;
        }
      else if(count_sells==0 && count_buys>0)
        {
         if(price_lowest_buy-m_symbol.Ask()>ExtStep)
            need_to_open_a_buy=true;
        }
     }

"нужно_открыть_продажу" и"нужно_открыть_продажу" - торговые сигналы

 
Не закрывает открытые позиции по значению в параметре -  Min profit for close all.
 
qazzaq12345:
Не закрывает открытые позиции по значению в параметре -  Min profit for close all.

Покажите пожалуйста настройки эксперта и лог-файл. Какие именно позиции не были закрыты?

 
где находится StopLoss?
 
forexprofitid :
где находится СтопЛосс?

У Мартингейла нет стоп-лосса. Для Мартингейла существует только естественный Stop Loss - это слив депозита.

 

Здравствуйте, спасибо за советник

возможно ли разделить параметр входа только на продажу или только на покупку? ATT

 

Здравствуйте Владимир, спасибо за ваш код. Это интересно.

Я новичок в кодировании MT5.

Как я могу понять функцию void CloseAllPositions ()?

Кажется, что функция закрывает не все позиции, а только те, которые достигли пунктов тейк-профита.

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

Спасибо.

Void CloseAllPositions()
  {
   for(int i=PositionsTotal()-1;i>=0;i--) // возвращает количество текущих позиций
      if(m_position.SelectByIndex(i))     // выбирает позицию по индексу для дальнейшего доступа к ее свойствам
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
            m_trade.PositionClose(m_position.Ticket()); // закрыть позицию по указанному символу
   }