[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 636

 

Buona gente, aiuto, non riesco a capire, TrailingStop non funziona come dovrebbe, se l'affare è aperto sul trall SELL funziona bene, ma se si apre BUY, poi per qualche motivo immediatamente modificato stopper. Dov'è l'errore che non riesco a capire.... ECCO IL CODICE:

extern int TP = 50;
extern int SL = 50;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Calculate Breakeven level ======
int i;
doppio lotsBUY=0;
doppio lotsSEL=0;
doppio sumBUY=0;
doppio sumSEL=0;

per (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continua;
se (OrderSymbol()!=Symbol()) continua;
se (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

se (OrderType()==OP_SELL)
{
lotsSEL=slotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
doppio priceBUY=0;
se (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
doppio priceSEL=0;
se (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;

//======== Posizione aperta =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

se (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
se (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Trailing Stop =======

for(i = 0; i <= OrdiniTotali(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

se (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
se (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE)
}
}
}
ritorno(0);

}

C'è un momento, se cambio priceBUY a OrderOpenPrice() nel blocco TrailingStop, funziona, ma ho bisogno di seguire dal livello di breakeven, non dal prezzo di apertura..... Su SELL funziona, ma su buy per qualche motivo no.... Non capisco dove sia l'errore.....SOS!!!!!!!!

 
Roman.:


Questo non è un errore - è un messaggio che il saldo minimo è stato raggiunto - cioè il conto è prosciugato - la corsa viene terminata e ne viene avviata una nuova con un'altra serie di parametri di input - vedi caselle di controllo e valori limite impostati nella scheda Optimise Tester:

Grazie!
 

Buon pomeriggio!!! Il mio EA sta ritrattando gli ordini con questo posto.

 if(Summaprofita()>=Profit_v_balans )
        {
         for(int i=OrdersTotal()-1;i>=0;i--)
           {
              bool error=true;
            OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            
            if( magic==OrderMagicNumber( ) && OrderSymbol()==Symbol())
              {
              
                 OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE); error=false;
                           Sleep(1000);
             OrderDelete(OrderTicket());error=false;
         } } }
        

Il mio EA sembra essere andato bene prima, almeno fino a quando ho avuto 2-5 ordini. Ma ora ho tutti gli ordini che voglio - 20, 50 per parte. In breve, non pulisce. Beh, due o tre o quattro volte sì, e poi improvvisamente no!

Mi chiedo come appare nel tester - in generale rimuove diversi ordini vicino al prezzo, ma non tutti! Che tipo di deviazioni possiamo immaginare, inventare, fantasticare, che sicuramente chiuderebbe?

Davvero, prima andava bene. Una volta chiudeva, no? Di cos'altro ha bisogno? ?????

 

Buona gente, aiuto, non riesco a capire, TrailingStop non funziona come dovrebbe, se l'affare è aperto sul trall SELL funziona bene, ma se si apre BUY, poi per qualche motivo immediatamente modificato stopper. Dov'è l'errore che non riesco a capire.... ECCO IL CODICE:

extern int TP = 100;
extern int SL = 100;
extern int Trailing = 15;

int init()
{return(0);}
int deinit()
{return(0);}

int start()
{
//========= Расчёт уровня безубытка ======
int i;
double lotsBUY=0;
double lotsSEL=0;
double sumBUY=0;
double sumSEL=0;

for (i=0; i<OrdersTotal(); i++)
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()==OP_BUY)
{
lotsBUY=lotsBUY+OrderLots();
sumBUY=sumBUY+OrderLots()*OrderOpenPrice();
}

if (OrderType()==OP_SELL)
{
lotsSEL=lotsSEL-OrderLots();
sumSEL=sumSEL-OrderLots()*OrderOpenPrice();
}
}
double priceBUY=0;
if (lotsBUY!=0) priceBUY=sumBUY/lotsBUY;
double priceSEL=0;
if (lotsSEL!=0) priceSEL=sumSEL/lotsSEL;



//======== Открытие позиции =====


double MA=iMA(NULL,0,14,0,MODE_SMMA,PRICE_CLOSE,0);

if (OrdersTotal() < 1 && Bid>MA)
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,0,0,0,Green);
if (OrdersTotal() < 1 && Ask<MA)
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Bid+SL*Point,Bid-TP*Point,0,0,0,Red);


//======= Trailing Stop =======

for(i = 0; i <= OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_SELL && Trailing!=0)
{
if(priceSEL-Ask>=Trailing*Point && OrderStopLoss()>(Ask+Trailing*Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Trailing*Point,OrderTakeProfit(),0,CLR_NONE);
}
}
if (OrderType()==OP_BUY && Trailing!=0)
{
if(Bid-priceBUY>=Trailing*Point && (Bid-Point*Trailing)>OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*Trailing,OrderTakeProfit(),0,CLR_NONE);
}
}
}
return(0);
}

C'è una volta, se cambio priceBUY a OrderOpenPrice() nel blocco TrailingStop, tutto funziona, ma ho bisogno di un trailing stop dal livello di pareggio, non dal prezzo di apertura..... Su SELL funziona, ma su buy per qualche motivo no.... Non capisco dove sia l'errore.....SOS!!!!!!!!
 
MIR-ASOV:

Buona gente, aiuto, non riesco a capire, TrailingStop non funziona come dovrebbe, se l'affare è aperto sul trall SELL funziona bene, ma se si apre BUY, poi per qualche motivo immediatamente modificato stopper. Dov'è l'errore che non riesco a capire.... ECCO IL CODICE:

C'è una volta, se cambio priceBUY a OrderOpenPrice() nel blocco TrailingStop, tutto funziona, ma ho bisogno di un trailing stop dal livello di pareggio, non dal prezzo di apertura..... Su SELL funziona, ma su buy per qualche motivo no.... Non capisco dove sia l'errore.....SOS!!!!!!!!

Provate a visualizzare con Print() il valore priceBUY prima della modifica per vedere se soddisfa le aspettative...
 
Provate a visualizzare con Print() il valore priceBUY prima della modifica per vedere se soddisfa le aspettative...
Sì, ho controllato, corrisponde completamente e completamente...... Essenzialmente il livello di pareggio per BUY è uguale al prezzo di apertura dell'ordine, ma per qualche motivo non funziona, ho messo OrderOpenPrice() tutto funziona, ho messo priceBUY, no......
 
Molto probabilmente avete zero nella variabilepriceBUY al momento dell'apertura, quindi Bid-priceBUY(0)==Bid, e quindi
 
Dimka-novitsek:

Buon pomeriggio!!! Il mio EA sta ritrattando gli ordini con questo posto.

Il mio EA sembra essere andato bene prima, almeno fino a quando ho avuto 2-5 ordini. Ma ora ho tutti gli ordini che voglio - 20, 50 per parte. In breve, non pulisce. Beh, due o tre o quattro volte sì, e poi improvvisamente no!

Mi chiedo come appare nel tester - rimuove diversi ordini vicini al prezzo, ma non tutti! Che tipo di deviazioni possiamo inventare, di fantasia, per poterle chiudere senza problemi?

Davvero, prima andava tutto bene? Una volta chiudeva, no? Di cos'altro ha bisogno?????

Uh, non funzionerà.

  OrderClose( OrderTicket( ), OrderLots( ), OrderClosePrice( ) , 0, CLR_NONE);

Mentre l'ordine non è chiuso, il suo OrderClosePrice è uguale a 0, e in questo posto bisogna sostituire il prezzo reale al quale si chiude l'ordine, cioè Ask nel caso di ordine SELL e Bid per BUY.

 
alsu:

Beh, non funziona così.

Finché l'ordine non viene chiuso, il suo OrderClosePrice è uguale a 0, e in questo posto bisogna mettere il prezzo reale al quale si chiude l'ordine, cioè Ask nel caso di un ordine SELL e Bid per BUY.


No,OrderClosePrice() per un ordine che non è chiuso non è uguale a zero - controllare.OrderCloseTime() - sì
 
Grazie!!! Ci proverò, ce l'ho.