Советники: Советник, основанный на ГЭП

 

Советник, основанный на ГЭП :

Советник выставляет ордера в сторону, противоположную ГЭПу

Author: Vladimir Khlystov

 
а не слишком лот крутой для такого депозита ?
 
fozi:
а не слишком лот крутой для такого депозита ?

ну если из 13 сделок всего одна в минус, то можно лот ставить и больше.
 
Прикрутил ММ, отключил демо-режим
//+------------------------------------------------------------------+
//|Если ГЭП выше указанного значения, то открываем ордер     Gep.mq4 |
//|                               Copyright c 2011, Хлыстов Владимир |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright c 2011, http://cmillion.narod.ru"
#property link      "cmillion@narod.ru"
//--------------------------------------------------------------------
extern int    GepDelta     = 2,        //Если ГЭП выше этого значения, то открываем ордер противоположныйй ГЭПу
              SL           = 200,      //Стоплосс в пунктах
              TP           = 85;       //Тейкпрофит в пунктах
//extern double Lot          = 0.10;     //используется только при risk = 0
extern double Lots           =  0; // лот, если 0, то динамический
extern double RiskPercentage =  50; // % от депо на лот, если динамический
extern int    MaxOrders    = 60;       //Максимальное кол-во ордеров одного направления
//--------------------------------------------------------------------
int STOPLEVEL,magic=123321,tip,TimeBar;
string txt;
//--------------------------------------------------------------------
int init()
{
   STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
   if (SL < STOPLEVEL) SL = STOPLEVEL;
   if (TP < STOPLEVEL) TP = STOPLEVEL;
/*   txt = StringConcatenate("Copyright c 2011 cmillion@narod.ru\nУстановленные параметры "+"\n"+
      "GepDelta         " , GepDelta,         "\n",
      "MaxOrders   " , MaxOrders,      "\n",
      "SL               ", SL,             "\n",
      "TP               " , TP,             "\n",
      "Lot               ", DoubleToStr(Lot,2));*/
}
//--------------------------------------------------------------------
int start()
{
double Lot = Lots;
 if (Lots==0)
  {
   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step =   MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   Lot = MathRound(percentage/margin/step)*step;
   
   if(Lot < minLot)
   {
      Lot = minLot;
   }
   
   if(Lot > maxLot)
   {
      Lot = maxLot;
   }
  } 
   int bay,sel;
   for (int i=0; i<OrdersTotal(); i++)
   {  if (OrderSelect(i, SELECT_BY_POS))
      {  
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
         tip=OrderType();
         if (tip==0) bay++;
         if (tip==1) sel++;
      }   
   }
   Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",bay,"\nSel ",sel);
   double TrPr,StLo;
   double close = NormalizeDouble(Close[1],Digits);
   double open  = NormalizeDouble(Open[0],Digits);
   if (bay<MaxOrders && TimeBar!=Time[0] && (close - open)/Point>=GepDelta)
   {
      if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);                 
      if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);                 
      if (!OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),3,StLo,TrPr,"BreakdownLevelCandleMA",magic,0,Blue))
         Print("Error BUY ",GetLastError(),"   ",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
      else TimeBar=Time[0];
   }
   if (sel<MaxOrders && TimeBar!=Time[0] && (open - close)/Point>=GepDelta)
   {
      if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);                 
      if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);   
      if (!OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),3,StLo,TrPr,"BreakdownLevelCandleMA",magic,0,Red ))
         Print("Error SELL ",GetLastError(),"   ",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
      else TimeBar=Time[0];
   }
   return(0);
}
//--------------------------------------------------------------------


 

Новое дополнение: у Брокеров с исполнением ордеров по Market Execution изначально предложенный советник не будет работать, так как нельзя выставлять стоплосс и тейкпрофит одновременно с выставлением ордера. В предложеном коде исправлено.

//+------------------------------------------------------------------+
//|Если ГЭП выше указанного значения, то открываем ордер     Gep.mq4 |
//|                               Copyright © 2011, Хлыстов Владимир |
//|                                                cmillion@narod.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, http://cmillion.narod.ru"
#property link      "cmillion@narod.ru"
//--------------------------------------------------------------------
extern int    GepDelta     = 2,        //Если ГЭП выше этого значения, то открываем ордер противоположныйй ГЭПу
              SL           = 200,      //Стоплосс в пунктах
              TP           = 85;       //Тейкпрофит в пунктах
//extern double Lot          = 0.10;     //используется только при risk = 0
extern double Lots           =  0; // лот, если 0, то динамический
extern double RiskPercentage =  50; // % от депо на лот, если динамический
extern int    MaxOrders    = 6;       //Максимальное кол-во ордеров одного направления
//--------------------------------------------------------------------
int STOPLEVEL,magic=123321,tip,TimeBar;
string txt;
//--------------------------------------------------------------------
int init()
{
   STOPLEVEL = MarketInfo(Symbol(),MODE_STOPLEVEL);
   if (SL < STOPLEVEL) SL = STOPLEVEL;
   if (TP < STOPLEVEL) TP = STOPLEVEL;
/*   txt = StringConcatenate("Copyright © 2011 cmillion@narod.ru\nУстановленные параметры "+"\n"+
      "GepDelta         " , GepDelta,         "\n",
      "MaxOrders   " , MaxOrders,      "\n",
      "SL               ", SL,             "\n",
      "TP               " , TP,             "\n",
      "Lot               ", DoubleToStr(Lot,2));*/
}
//--------------------------------------------------------------------
int start()
{
double Lot = Lots;
int Ticket = 0;
 if (Lots==0)
  {
   double margin = MarketInfo(Symbol(), MODE_MARGINREQUIRED);
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   double maxLot = MarketInfo(Symbol(), MODE_MAXLOT);
   double step =   MarketInfo(Symbol(), MODE_LOTSTEP);
   double account = AccountFreeMargin();
   
   double percentage = account*RiskPercentage/100;
   
   Lot = MathRound(percentage/margin/step)*step;
   
   if(Lot < minLot)
   {
      Lot = minLot;
   }
   
   if(Lot > maxLot)
   {
      Lot = maxLot;
   }
  } 
   int bay,sel;
   for (int i=0; i<OrdersTotal(); i++)
   {  if (OrderSelect(i, SELECT_BY_POS))
      {  
         if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
         tip=OrderType();
         if (tip==0) bay++;
         if (tip==1) sel++;
      }   
   }
   Comment(txt,"\nБаланс ",DoubleToStr(AccountBalance(),2),"\nЭквити ",DoubleToStr(AccountEquity(),2),"\nBuy ",bay,"\nSel ",sel);
   double TrPr,StLo;
   double close = NormalizeDouble(Close[1],Digits);
   double open  = NormalizeDouble(Open[0],Digits);
   if (bay<MaxOrders && TimeBar!=Time[0] && (close - open)/Point>=GepDelta)
   {
      if (TP!=0) TrPr = NormalizeDouble(Ask + TP * Point,Digits);                 
      if (SL!=0) StLo = NormalizeDouble(Bid - SL * Point,Digits);  
      Ticket=OrderSend(Symbol(),OP_BUY,Lot,NormalizeDouble(Ask,Digits),3,0,0,"BreakdownLevelCandleMA",magic,0,Blue);               
      if (Ticket==0)
         Print("Error BUY ",GetLastError(),"   ",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
      else 
       {
        OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
        TimeBar=Time[0];
       }
   }
   if (sel<MaxOrders && TimeBar!=Time[0] && (open - close)/Point>=GepDelta)
   {
      if (TP!=0) TrPr = NormalizeDouble(Bid - TP * Point,Digits);                 
      if (SL!=0) StLo = NormalizeDouble(Ask + SL * Point,Digits);   
      Ticket=OrderSend(Symbol(),OP_SELL,Lot,NormalizeDouble(Bid,Digits),3,0,0,"BreakdownLevelCandleMA",magic,0,Red);
      if (Ticket==0)
         Print("Error SELL ",GetLastError(),"   ",Symbol(),"   Lot ",Lot,"   SL ",StLo,"   TP ",TrPr);
      else 
       {
        OrderModify(Ticket,OrderOpenPrice(),StLo,TrPr,0,Blue);
        TimeBar=Time[0];
       }
   }
   return(0);
}
//--------------------------------------------------------------------
 
zerkmax:
Прикрутил ММ, отключил демо-режим

круто Вы... прям в авторской ветке... взяли вот да и "вылечили" его код... между делом...
хех...

 
Shai:
zerkmax:
Прикрутил ММ, отключил демо-режим

круто Вы... прям в авторской ветке... взяли вот да и "вылечили" его код... между делом...
хех...


Это называется не лечение а взлом, хотя я ограничил реал, только для перворазников, чтобы копья не поломали.

Я бы таких горе лекарей кастрировал на месте модераторов. Но почему то им до них нет дела. И допускают такое хамство прямо на своем столе.

После такого подумаешь выкладывать сюда что то серьезное или проще продать через сайт?

Поэтому полная версия есть только на моем сайте.

 
cmillion:
Shai:
zerkmax:
Прикрутил ММ, отключил демо-режим

круто Вы... прям в авторской ветке... взяли вот да и "вылечили" его код... между делом...
хех...


Это называется не лечение а взлом, хотя я ограничил реал, только для перворазников, чтобы копья не поломали.

Я бы таких горе лекарей кастрировал на месте модераторов. Но почему то им до них нет дела. И допускают такое хамство прямо на своем столе.

После такого подумаешь выкладывать сюда что то серьезное или проще продать через сайт?

Поэтому полная версия есть только на моем сайте.

это не взлом, так как код открыт, а исправление. Это хранилище бесплатного кода, соответственно все что тут выкладывается, может правиться и использоваться без ограничений.

Кроме того Ваш код дополнен ММ и исправлена работа с исполнением ордеров по Market Execution, а это извините доработка советника.

 

Таких графиков не получается! Реальный график таков: