Скачать MetaTrader 5

Помогите изменить советник

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
nim
22
nim  
Помогите пожалуйста реверсировать открывающиеся сделки. Где советник должен открывать sell, нужно чтобы открывал buy и наоборот. За ранее благодарен.
Файлы:
Paladin80
703
Paladin80  
nimolog:
Помогите пожалуйста реверсировать открывающиеся сделки. Где советник должен открывать sell, нужно чтобы открывал buy и наоборот. За ранее благодарен.
Поменял местами OP_BUY и OP_SELL , внутри кода комментарий. Должно получится.
Файлы:
nim
22
nim  
спасибо. сейчас попробую.
Александр
21
Александр  

помогите пожалуйста с советником - не правильное открытие ордера (к тейк профиту может не добрать спред, а к стопу добавить) получается при настройках: тейка в 100 пп и стопа в 100пп, ставит стоп 103 и тейк 97

Boris
3951
Boris  
LeksusMt4:

помогите пожалуйста с советником - не правильное открытие ордера (к тейк профиту может не добрать спред, а к стопу добавить) получается при настройках: тейка в 100 пп и стопа в 100пп, ставит стоп 103 и тейк 97


Вы прибавляйте/вычитайте к/от OrderOpenPrice(), и будет точно!
Dm
106
Dm  
nimolog:
Где советник должен открывать sell, нужно чтобы открывал buy и наоборот. 

тсссс....это грааль! если все будут открывать свои сделки наоборот, то у кого же мы будем отнимать деньги?))
Boris
3951
Boris  
LeksusMt4:

И как эту простынь читать? Для вставления кода пользуйтесь SRC!
Александр
21
Александр  
extern int    TP                 = 100;
extern int    SL                 = 100;
extern double Lots               = 0.1;
double        DecreaseFactor     = 2;
extern double IK                 = 2;
double        GeneralShift       = 0; // 0 - незакрытый бар, 1 - закрытый.
 int          slip               = 0;
extern string Trailing_Funcion   = "Main_step_tral";
extern bool   tral               =false;
extern int    TrailingStop       = 15; // Растояние в пунктах, откуда начнем тралить
extern int    TrailingStep       = 5; // Шаг трала
extern double MAGIC              = 12345;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
  if(tral){
      T_SL();
 }
 //----
   int buys=0,sells=0;
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//---- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+-------------------------------------------------------------------------------------------------------------------+
//| Функция трейлинг стоп лосс |
void T_SL()
{
int i=0;
for(i=0; i<OrdersTotal(); i++)
{
if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber()!=MAGIC) continue;

if(OrderType()==OP_BUY)
{
if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits))
{
if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop+TrailingStep-1)*Point,Digits))
{
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
}
} //end if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits))
} //end if(OrderType()==OP_BUY)
if(OrderType()==OP_SELL)
{
if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits))
{
if(OrderStopLoss()==0 || NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(TrailingStop+TrailingStep-1)*Point,Digits))
{
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
}
} //end if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits))
} //end if(OrderType()==OP_SELL)
} //end for(i=0; i<OrdersTotal(); i++)
} //end void T_SL()
//| Конец функции трейлинг стоп лосс |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//---- select lot size
   lot=Lots;
//---- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continue;
         //----
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>0) lot=NormalizeDouble(lot*IK,1);
      if(losses>1) lot=NormalizeDouble(lot*IK,1);
      if(losses>2) lot=NormalizeDouble(lot*IK,1);
      if(losses>3) lot=NormalizeDouble(lot*IK,1);
      if(losses>4) lot=NormalizeDouble(lot*IK,1);
      if(losses>5) lot=NormalizeDouble(lot*IK,1);
      if(losses>6) lot=NormalizeDouble(lot*IK,1);
      if(losses>7) lot=NormalizeDouble(lot*IK,1);
      if(losses>8) lot=NormalizeDouble(lot*IK,1);
      if(losses>9) lot=NormalizeDouble(lot*IK,1);
      if(losses>10) lot=NormalizeDouble(lot*IK,1);
      if(losses>11) lot=NormalizeDouble(lot*IK,1);
      if(losses>12) lot=NormalizeDouble(lot*IK,1);
      if(losses>13) lot=NormalizeDouble(lot*IK,1);
      if(losses>14) lot=NormalizeDouble(lot*IK,1);
      if(losses>15) lot=NormalizeDouble(lot*IK,1);
      if(losses>16) lot=NormalizeDouble(lot*IK,1);
      if(losses>17) lot=NormalizeDouble(lot*IK,1);
      if(losses>18) lot=NormalizeDouble(lot*IK,1);
      if(losses>19) lot=NormalizeDouble(lot*IK,1);
      if(losses>20) lot=NormalizeDouble(lot*IK,1);
      if(losses>21) lot=NormalizeDouble(lot*IK,1);
      if(losses>22) lot=NormalizeDouble(lot*IK,1);
      if(losses>23) lot=NormalizeDouble(lot*IK,1);
     }
//---- return lot size
   if(lot<Lots) lot=Lots;
ObjectCreate("Copyright", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Copyright", OBJPROP_CORNER, 3);
   ObjectSet("Copyright", OBJPROP_XDISTANCE, 5);
   ObjectSet("Copyright", OBJPROP_YDISTANCE, 5);
   ObjectSetText("Copyright","Copyright © 2013 http://g\n",12,"Arial",White);
   Comment("" 
      + "\n" 
      + " робот" 
      + "\n" 
      + "_________________________________________" 
      + "\n" 
      + "\n" 
      + "Плечо:                          1:" + DoubleToStr(AccountLeverage(), 0)  
      + "\n" 
      + "Номер счета:                " + DoubleToStr(AccountNumber(), 0) 
      + "\n" 
      + "Баланс:                         " + DoubleToStr(AccountBalance(), 0)  
      + "\n" 
      + "Лот в рынке:                 " + DoubleToStr(lot,1)  
      + "\n" 
      + "Stop Loss-                     " + SL + " пунктов" 
      + "\n" 
      + "Take Profit-                   " + TP + " пунктов" 
      + "\n" 
      + "Привязка ордера:          " +  DoubleToStr(MAGIC, 0)
      + "\n" 
   + "_________________________________________");
   return(lot); 
}
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
{
   double AC;
   double AO;
   int    res;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Signal's 
   AC=iAC(NULL,0,GeneralShift);
   AO=iAO(NULL,0,GeneralShift);
//---- sell conditions
   if(iAO(NULL,1,GeneralShift)>iAO(NULL,0,GeneralShift+1)&&iAO(NULL,0,GeneralShift)>0 && iAC(NULL,0,GeneralShift)>iAC(NULL,0,GeneralShift+1)&&iAC(NULL,0,GeneralShift)>0)  
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,slip,Ask+SL*Point,Ask-TP*Point,"Boot",MAGIC,0,Red);
      return;
     }
//---- buy conditions
   if(iAO(NULL,0,GeneralShift)<iAO(NULL,0,GeneralShift+1)&&iAO(NULL,0,GeneralShift)<0 &&iAC(NULL,0,GeneralShift)<iAC(NULL,0,GeneralShift+1)&&iAC(NULL,0,GeneralShift)<0)  
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,slip,Ask-SL*Point,Ask+TP*Point,"Boot",MAGIC,0,Blue);
      return;
     }
//----
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double AC;
   double AO;
//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   AC=iAC(NULL,0,GeneralShift);
   AO=iAO(NULL,0,GeneralShift);
//----
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)        break;
      if(OrderMagicNumber()!=MAGIC || OrderSymbol()!=Symbol()) continue;
      //---- check order type 
      if(OrderType()==OP_BUY)
        {
         if(TP>=1000.0) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(TP>=1000.0) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
         break;
        }
     }
//----
  }
//+------------------------------------------------------------------+
//| Start function                                                   |
//+------------------------------------------------------------------+

void start()
  {
//---- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false) return;
//---- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//----
  }
//+------------------------------------------------------------------+
Александр
21
Александр  
borilunad:
И как эту простынь читать? Для вставления кода пользуйтесь SRC!


Всё понял о чем Вы говорите - вооот добавил код

Boris
3951
Boris  
LeksusMt4:


Всё понял о чем Вы говорите - вооот добавил код

 


1. Удалите свои посты с "портянками" в обеях ветках!

2. Слиппаж должен быть не меньше 20 для пятизнака для проскальзывания.

3. Вначале открывайте со СтопЛосс 0 и ТейкПрофит 0, а потом модифицируйте, устанавливая их от OrderOpenPrice(), т.к. многие ДЦ не могут всё установить за раз от Аска или Бида при повышенной волатильности!!

Пока всё, попробуйте и посмотрите в журнале, какие ещё ошибки будут! 

sergioq
12
sergioq  
помогите заставить советник работать не только на демо.
Файлы:
tpyokfcx.ex4 31 kb
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий