Пирамидинг по тренду

abudabi

Новичок
Сообщения
88
Реакции
31
Долго бьюсь с поисковиками, и моими корявыми попытками написать советника,
Есть ли в закормах форумчан такая система?
1)Открываем лонг (Любой трендовый индикатор)
2)Лот минимальный 0.1, стоп большой
3)Если проходит 50 пунктов, добавляем 0.1 лот
4)Стоп первого ордера и второго трейлятся
5)Проходит еще 50 пунктов, еще добавляем 0.1 и так далее
6)При развороте тренда вниз выход по трейл-стопу всей пирамиды

f134d7.png
 
Есть ли в закормах форумчан такая система?

Нет, на форуме как таковых советников и нет.

Но это система типа мартингейла, таких сотни описаны, но за свой опыт еще ни разу не видел более менее рабочую.
 
Черновой вариант накидал покаместь, нужно чтобы у пирамиды стоп общий был, сейчас каждый ордер отдельно тралиться
Код:
int OnInit()
{
  
   return(INIT_SUCCEEDED);
}

double MA_1, MA_2;

string GetNameOP = 0;
extern bool   AllPositions  =True;         // Управлять всеми позициями
extern bool   ProfitTrailing=True;          // Тралить только профит
extern int    TrailingStop  =10;            // Фиксированный размер трала
extern int    TrailingStep  =1;             // Шаг трала
extern bool   UseSound      =False;          // Использовать звуковой сигнал
extern string NameFileSound ="expert.wav";  // Наименование звукового файла

void OnTick()
   {
          for(int i=0; i<OrdersTotal(); i++)
        {
           if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {
              if (AllPositions || OrderSymbol()==Symbol())
              {
               TrailingPositions();
              }
           }
        }
       Comment(CountBuyPositions()+" Number of Buy Positions:\n",
       CountSellPositions()+" Number of Sell Positions:\n");
       MA_1=iMA(NULL,0,7,0,MODE_SMMA,PRICE_MEDIAN,0);
       MA_2=iMA(NULL,0,17,0,MODE_SMMA,PRICE_MEDIAN,0);
       // first buy
       if((MA_1>MA_2) && (CountBuyPositions()<1))
         {
            int _FirstBuy = OrderSend
            (
               Symbol(), // currency
               OP_BUY,   // operation
               0.03,     // lot size
               Ask,      // price
               0,        // slippage
               Ask-300*_Point,// stop
               Ask+20*_Point, // take
               NULL,          //comment
               123,             // id
               0,             //exp.date
               clrGreen         // color
            );
          }
       else
          {
       if((MA_1<MA_2) && (CountSellPositions()<1))
         // sell
         {
            int _FirstSell = OrderSend
            (
               Symbol(), // currency
               OP_SELL,   // operation
               0.03,     // lot size
               Bid,      // price
               0,        // slippage
               Bid+300*_Point,// stop
               Bid-20*_Point, // take
               NULL,          //comment
               123,             // id
               0,             //exp.date
               clrRed         // color
            );       
         }
         }
         if((MA_1>MA_2) && (CountBuyPositions()<50) && isOrderInProfit()==1)
         // buy
         {
            int _Buy = OrderSend
            
            (
               Symbol(), // currency
               OP_BUY,   // operation
               0.03,     // lot size
               Ask,      // price
               0,        // slippage
               Ask-300*_Point,// stop
               Ask+20*_Point, // take
               NULL,          //comment
               123,             // id
               0,             //exp.date
               clrGreen         // color
            );
          }
       else
          {
       if((MA_1<MA_2) && (CountSellPositions()<50) && isOrderInProfit()==1)
         // sell
         {
            int _Sell = OrderSend
            (
               Symbol(), // currency
               OP_SELL,   // operation
               0.03,     // lot size
               Bid,      // price
               0,        // slippage
               Bid+300*_Point,// stop
               Bid-20*_Point, // take
               NULL,          //comment
               123,             // id
               0,             //exp.date
               clrRed         // color
            );       
         }
         }     
}

int CountBuyPositions()
{ 
   int NumberOfBuyPositions=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string CurrencyPair=OrderSymbol();
      if(_Symbol==CurrencyPair)
      if(OrderType()==OP_BUY)
         {
            NumberOfBuyPositions=NumberOfBuyPositions+1;
         }
   }
   return NumberOfBuyPositions;
}

int CountSellPositions()
{ 
   int NumberOfSellPositions=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      string CurrencyPair=OrderSymbol();
      if(_Symbol==CurrencyPair)
      if(OrderType()==OP_SELL)
         {
            NumberOfSellPositions=NumberOfSellPositions+1;
         }
   }
   return NumberOfSellPositions;
}


int isOrderInProfit()
{
      int OrderInProfit=0;
      {
         OrderSelect(OrdersTotal()-1,SELECT_BY_POS);
         if (OrderProfit()>1)
         {OrderInProfit=1;}
      }     
   return OrderInProfit;
}

//+------------------------------------------------------------------+
//| Сопровождение позиции простым тралом                             |
//+------------------------------------------------------------------+
  void TrailingPositions()
  {
   double pBid, pAsk, pp;
//----
   pp=MarketInfo(OrderSymbol(), MODE_POINT);
     if (OrderType()==OP_BUY)
     {
      pBid=MarketInfo(OrderSymbol(), MODE_BID);
        if (!ProfitTrailing || (pBid-OrderOpenPrice())>TrailingStop*pp)
        {
           if (OrderStopLoss()<pBid-(TrailingStop+TrailingStep-1)*pp)
           {
            ModifyStopLoss(pBid-TrailingStop*pp);
            return;
           }
        }
     }
     if (OrderType()==OP_SELL)
     {
      pAsk=MarketInfo(OrderSymbol(), MODE_ASK);
        if (!ProfitTrailing || OrderOpenPrice()-pAsk>TrailingStop*pp)
        {
           if (OrderStopLoss()>pAsk+(TrailingStop+TrailingStep-1)*pp || OrderStopLoss()==0)
           {
            ModifyStopLoss(pAsk+TrailingStop*pp);
            return;
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Перенос уровня StopLoss                                          |
//| Параметры:                                                       |
//|   ldStopLoss - уровень StopLoss                                  |
//+------------------------------------------------------------------+
  void ModifyStopLoss(double ldStopLoss)
  {
   bool fm;
   fm=OrderModify(OrderTicket(),OrderOpenPrice(),ldStopLoss,OrderTakeProfit(),0,CLR_NONE);
   if (fm && UseSound) PlaySound(NameFileSound);
  }
//+------------------------------------------------------------------+
 
Черновой вариант накидал покаместь, нужно чтобы у пирамиды стоп общий был, сейчас каждый ордер отдельно тралиться

Пока флет этот вариант может и сработать. но временно. при тренде система начнет лажать.
Я пробовал уже много лет назад нечто подобное писать. в чем именно я уже не помню, но помню, что в итоге так или иначе все эти лесенки приводят к сливу.
 
- Более 22 лет на рынке
- Начать можно хоть с нуля!
- Пополнение и вывод на карты РФ
Долго бьюсь с поисковиками, и моими корявыми попытками написать советника,
Есть ли в закормах форумчан такая система?
1)Открываем лонг (Любой трендовый индикатор)
2)Лот минимальный 0.1, стоп большой
3)Если проходит 50 пунктов, добавляем 0.1 лот
4)Стоп первого ордера и второго трейлятся
5)Проходит еще 50 пунктов, еще добавляем 0.1 и так далее
6)При развороте тренда вниз выход по трейл-стопу всей пирамиды

f134d7.png
Это все красиво только на истории, где видно где бы зашёл в сделку на самом низу отката, где бы добавился, где бы все закрыл самой макушке). В реальном режиме торговли же не все так радужно.
 
- Более 22 лет на рынке
- Начать можно хоть с нуля!
- Пополнение и вывод на карты РФ
Сверху