Как прикрутить мартингейл

Статус
Закрыто для дальнейших ответов.

viwm

Новичок форума
К советнику добавил мартина, но он не всегда срабатывает. Прибыльность с использованием мартина думаю станет больше. Прошу помощи или подсказки. Функция мартина встроена в советник.

PHP:
//+------------------------------------------------------------------+
//|                                                      Nowt v2.mq4 |
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "MonsterMQL"
#property link      "[email protected]"

extern double    Lot= 0.5;
extern int    stoploss=50;
extern int takeprofit=30;
extern int  Magic = 99999999; // - уникальный номер, кот. советник метит сови ордера и впоследствии работает только с ними. При постановке на разные графики или т/ф, межики должны быть разными 
extern int Slipp = 10;        // - величина максимально возможного проскальзывания. В роботе реализован модуль безусловного открытия/закрытия сделок. Т.е. робот будет пытаться открыть / закрыть сделку пока не сделует это. Поэтому во избежание долгого преодоления реквот рекомендую выставлять этот параметр равный 5 для пятизнака или 1 для 4-х знака

// настройки индикаторов:
// ZigZag_Pointer_alert:
extern int ExtDepth=12;
extern int ExtDeviation=5;
extern int ExtBackstep=3;

// полосы боллинджера:
extern int period_1 = 20;     
extern int price_1 = 0;


 int M, i, k;
    double M1, SL, TP, D, d, DD, dd, u, U, uu, op, up, dp, H, L;
    bool ss, bb;
 
int init()
  {     
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
datetime OldTime;
int start()
  {                     

//=================================================================================
k=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
       } 

if(bb==true && k==0 && op!=U) // покупка
    
      {
      op=U;
SL = Ask-stoploss*Point;
if (stoploss == 0) SL = 0;
TP = Ask+takeprofit*Point;
if (takeprofit == 0 ) TP = 0;

    RefreshRates();
    M = OrderSend (Symbol(), OP_BUY, getLots(), Ask, Slipp, SL, TP, NULL, Magic, 0, Blue);
         while (M < 0) 
         {
         Sleep(2000);
         RefreshRates();
         M = OrderSend (Symbol(), OP_BUY, getLots(), Ask, Slipp, SL, TP, NULL, Magic, 0, Blue);
        }
   /*
   if (SL != 0 || TP != 0)
      { 
    RefreshRates();
    OrderSelect (M, SELECT_BY_TICKET);
    bool c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
      while (c == false)
                  {
                  Sleep(2000);
                  RefreshRates();
                  OrderSelect (M, SELECT_BY_TICKET); 
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
                  } } 
       */                 
     }

//---------------------------------------------------------------------------------------------------------+                       
k=0;
    for (i=OrdersTotal()-1;i>=0;i--)  
       {
        RefreshRates();
        OrderSelect (i, SELECT_BY_POS, MODE_TRADES);
        if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) k++;
       }     

if(ss==true && k==0 && op!=D) // продажа

     {
     op=D;
SL = Bid+stoploss*Point;
if (stoploss == 0) SL = 0;
TP = Bid-takeprofit*Point;
if (takeprofit == 0 ) TP = 0;      
      RefreshRates();
         M = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, SL, TP, NULL, Magic, 0, Red);
            while (M < 0)
            {
            Sleep(2000);
            RefreshRates();
            M = OrderSend (Symbol(), OP_SELL, Lot, Bid, Slipp, SL, TP, NULL, Magic, 0, Red);
            }   
  
  /*      
        if (SL != 0 || TP != 0)
      {
        RefreshRates();
         OrderSelect (M, SELECT_BY_TICKET);
         c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
         while (c == false)
                  {
                  Sleep(2000);
                  RefreshRates();
                  OrderSelect (M, SELECT_BY_TICKET); 
                  c = OrderModify(OrderTicket(), OrderOpenPrice(), SL, TP, 0, Green);
                  } }
                  
      */              
      }
    
//====================================================================

k=0; D=0; U=0; 
for(i=0; k<2; i++)
   {
u = iCustom(NULL, 0, "ZigZag_Pointer_alert", ExtDepth, ExtDeviation, ExtBackstep, 0, i);
d = iCustom(NULL, 0, "ZigZag_Pointer_alert", ExtDepth, ExtDeviation, ExtBackstep, 1, i);
if(u>0) 
   {
    U=u;
    D=0;
    k++;
   } 
if(d>0) 
   {
    D=d;
    U=0;
    k++;
   }
up = iCustom(NULL, 0, "PBF_Scalper_Show_Me", 1, i);   
dp = iCustom(NULL, 0, "PBF_Scalper_Show_Me", 0, i);
M1 = iMA(NULL, 0, period_1, 0, 0, price_1, i);
H = High[i];
L = Low[i];    
   }  

ss=false;
if(D>0 && dp>0 && H > M1) ss = true;    

bb=false;
if(U>0 && up>0 && L < M1) bb=true;
  
//ннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннннн 
    }
   return(0);


 //Мартингейл
  //+--------------------------- getLots ----------------------------------+


 
   double getLots() 
   {
      double minlot = MarketInfo(Symbol(), MODE_MINLOT);
      int round = MathAbs(MathLog(minlot) / MathLog(10.0)) + 0.5;
      double result = Lot;
      int total = OrdersHistoryTotal();
      double spread = MarketInfo(Symbol(), MODE_SPREAD);
      // double k = (tp + sl) / (tp - spread);
   
      for (int i = 0; i < total; i++) 
         {
            OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
            //if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) {
               if (OrderProfit() > 0) 
                  {
                     result = Lot;
                   } 
               else 
                  {
                     result = result * 2;
                  }
            //}
         }
   
      result = NormalizeDouble(result, round);
      double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
      if (result > maxlot) 
      {
         result = maxlot;
      }
   RefreshRates();
   return(result);
}
 

Вложения

  • sov.rar
    40,2 КБ · Просмотры: 76
  • Nowt_v2.mq4
    6,4 КБ · Просмотры: 68
Последнее редактирование модератором:
Статус
Закрыто для дальнейших ответов.
Верх