Кто сможет помочь с роботом, почему не работает? - страница 3

 
Для GIM
Если нужно просто открыть ордера, то вместо SL / TP укажите 0. А на будущее, нужно ставить проверку: если SL или TP равны 0, то и в запросе нужно указываать 0. А если указано значение, тогда производить рассчет конкретной цены закрытия ордера.
 
Dmitriy Gizlyk:
Для GIM
Если нужно просто открыть ордера, то вместо SL / TP укажите 0. А на будущее, нужно ставить проверку: если SL или TP равны 0, то и в запросе нужно указываать 0. А если указано значение, тогда производить рассчет конкретной цены закрытия ордера.
Мне бы чтоб советник ордера открывал и закрывал по общей прибыли по всем сделкам....
 
AdikAmir:

extern double Lots=0.1;
extern int FastMAPeriod=5;
extern int FastMAMethod=0; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int FastMAPrice=0; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int SlowMAPeriod=75;
extern int SlowMAMethod=3; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int SlowMAPrice=3; // 0-Close, 1-Open, 2-High, 3-Low, 4-Median, 5-Typical, 6-Weighted
extern int TP=500; //тейкпрофит
 extern int SL=250; //стоплосс
double ticet;

int start(){

      double fast_ma1=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
      double slow_ma1=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
      double fast_ma2=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
      double slow_ma2=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);

if (OrdersTotal()==0)
{
  if (fast_ma1>slow_ma1 && (fast_ma2<slow_ma2))
  {   ticet = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);
     
    if (ticet==0) Print("ERROR");
  }
if (slow_ma1>fast_ma1 && (slow_ma2<fast_ma2))
  {
   
   
  ticet = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);    
    if (ticet==0) Print("ERROR");
  }

}

   return(0);
}



 


Читайте журнал. Возможно там есть сообщения о ошибках не выявленных при компиляции.

У вас тут ошибка OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);    

надо так OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);     

При продаже стоп лосс должен быть выше текущей цены, а тейк ниже, у вас же наоборот вы ставите стоп ниже цены, а тейк выше. 

 
GIM:
Мне бы чтоб советник ордера открывал и закрывал по общей прибыли по всем сделкам....

В таком случае, при открытии позиции ставив SL=0, TP=0.

А для закрытия позиции, нужно на каждом тике сравнивать полученный профит с заданной величиной. И когда профит достигнет указанной величины, закрывать все ордера в цикле через OrderClose(....).

По определению текущей прибыли, возможны варианты от поставленной задачи. Если смотрите на профит по счету, то можно проста взять AccountProfit(), но правильнее наверно более трудоемкий способ через цикл (тогда можно посчитать профит только нужных ордеров)

   double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
Dmitriy Gizlyk:

В таком случае, при открытии позиции ставив SL=0, TP=0.

А для закрытия позиции, нужно на каждом тике сравнивать полученный профит с заданной величиной. И когда профит достигнет указанной величины, закрывать все ордера в цикле через OrderClose(....).

По определению текущей прибыли, возможны варианты от поставленной задачи. Если смотрите на профит по счету, то можно проста взять AccountProfit(), но правильнее наверно более трудоемкий способ через цикл (тогда можно посчитать профит только нужных ордеров)

extern double  lots       = 0.01;
extern int  stop_loss      = 0;  
extern int take_profit    = 0;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, Bid - stop_loss * Point, Ask + take_profit * Point,  "", 1, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, Ask+ stop_loss * Point, Bid - take_profit * Point,  "", 1, 0, clrRed);      
}
   return(0); 
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
GIM:
Если стоплосс и тейк профит указываем в валюте депозита
extern double  lots       = 0.01;
extern int  stop_loss      = 10;  /* Указываем в валюте депозита */
extern int take_profit    = 20;   /* Указываем в валюте депозита */
extern int Magic          = 1;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, 0, 0,  "", Magic, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, 0, 0,  "", Magic, 0, clrRed);      
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 int requot=0;
 if(profit>=take_profit || (-profit)>=stop_loss)
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),50,clrRed))
               requot=0;
            else
              {
               requot++;
              }
         if(requot>10)
              {
               i++;
               requot=0;
              }
            i--;
        }
     }
   return(0); 
}
 
Dmitriy Gizlyk:
Если стоплосс и тейк профит указываем в валюте депозита

for(int i=0;i<OrdersTotal();i++)

Ошибка: "i"

 
Кто знает
extern int Magic          = 1;


что означает??
 
GIM:
Кто знает

Идентификатор ордеров эксперта, что бы он работал только со своими ордерами.

 
Vladimir Zubov:

Идентификатор ордеров эксперта, что бы он работал только со своими ордерами.

Как понять, только со своими ордерами....
Причина обращения: