Chi può aiutare con il robot, perché non funziona? - pagina 3

 
Per GIM
Se vuoi solo aprire ordini, allora specifica 0 invece di SL / TP. Se SL o TP è 0, dovrai inserire 0 nella tua richiesta, e se inserisci un valore, dovrai calcolare il prezzo al quale l'ordine verrà chiuso.
 
Dmitriy Gizlyk:
Per GIM
Se vuoi solo aprire ordini, allora specifica 0 invece di SL / TP. E per il futuro, devi controllare: se SL o TP è 0, allora devi specificare 0 nella richiesta. E se specifichi un valore, allora calcola il prezzo di chiusura dell'ordine.
Vorrei che l'advisor aprisse e chiudesse gli ordini in base al profitto totale per tutti i trades....
 
AdikAmir:

extern double Lots=0.1;
extern intnal double 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 intn 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; //takeprofit
extern int SL=250; //stop loss
doppio ticet;

int start(){

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

se (OrdiniTotali()==0)
{
se (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);
se (ticet==0) Print("ERROR");
}
se (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);
se (ticet==0) Print("ERROR");
}

}

ritorno(0);
}




Leggete il registro. Forse ci sono messaggi su errori che non sono stati rilevati durante la compilazione.

C'è un errore qui OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);

devi fare il seguente OrderSend(Symbol(),OP_SELL,Lots,Bid,Bid,3,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);

Quando vendi, lo stop loss dovrebbe essere sopra il prezzo corrente e il take è sotto. Nel tuo caso, al contrario, hai messo lo stop sotto il prezzo e il take è sopra.

 
GIM:
Vorrei che l'Expert Advisor aprisse e chiudesse gli ordini in base al profitto totale per tutti i trades....

In questo caso, quando apri una posizione, metti SL=0, TP=0.

Per chiudere una posizione, dobbiamo confrontare il profitto ottenuto con il valore impostato in ogni tick. E quando il profitto raggiunge il valore specificato, dobbiamo chiudere tutti gli ordini nel ciclo attraverso OrderClose(....).

Per quanto riguarda la determinazione del profitto corrente, ci possono essere variazioni a seconda del compito stabilito. Se si guarda il profitto del conto, si può semplicemente prendere AccountProfit(), ma il modo più laborioso è probabilmente attraverso un ciclo (allora possiamo calcolare il profitto solo per gli ordini necessari).

   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:

In questo caso, quando apri una posizione, metti SL=0, TP=0.

Per chiudere una posizione, dobbiamo confrontare il profitto ottenuto con il valore impostato in ogni tick. E quando il profitto raggiunge il valore specificato, dobbiamo chiudere tutti gli ordini nel ciclo attraverso OrderClose(....).

Per quanto riguarda la determinazione del profitto corrente, ci possono essere variazioni a seconda del compito stabilito. Se si guarda al profitto per conto, si può semplicemente prendere AccountProfit(), ma probabilmente il modo più laborioso è attraverso un ciclo (allora si può calcolare il profitto solo per gli ordini necessari).

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:
Se stoploss e take profit sono nella valuta del deposito
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:
Se stoploss e take profit sono specificati nella valuta di deposito

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

Errore: "i"

 
Chi lo sa?
extern int Magic          = 1;


что означает??
 
GIM:
Chi lo sa

L'identificatore degli ordini dell'Expert Advisor, in modo che lavori solo con i propri ordini.

 
Vladimir Zubov:

L'identificatore degli ordini dell'Expert Advisor, in modo che lavori solo con i propri ordini.

Cosa vuoi dire, solo con i suoi ordini ....