Chiedete! - pagina 38

 

Ian,

Controlla Straddle&Trail expert. puoi trovarlo qui https://www.mql5.com/en/forum/general

 

Ciao a tutti,

Voglio chiudere tutti i miei ordini allo stesso tempo ma non ci riesco.

Ho provato questo codice ma non funziona:

''''''''''''''''''''''''''''''''''''''''

totale = OrdiniTotali();

for(i=0;i < totale;i++)

{

if(OrderSelect(i, SELECT_BY_POS)==true)

{

OrderClose(OrderTicket(),OrderLots(),Ask,80,CLR_NONE);

OrderClose(OrderTicket(),OrderLots(),Bid,80,CLR_NONE);

}

}

''''''''''''''''''''''''''''''''''''''''

Qualcuno può aiutarmi?

Vi sarei molto grato se poteste aiutarmi

 

Mehdi,

Metti questo codice (procedura) fuori dalla sezione start() e quando se la condizione è soddisfatta per chiudere tutti i trade, chiama semplicemente la procedura così:

int start()

{ // il vostro codice qui .....

Se (la tua condizione qui) ShutDownAllTrades();

}

void ShutDownAllTrades

{ int Retry;

Mentre (OrdiniTotali()>0)

{ for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_BUY)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);

Sleep(1000);

}

else if (OrderType()==OP_SELL)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);

Sleep(1000);

}

else

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

OrderDelete(OrderTicket());

Sleep(1000);

}

}

}

}

HTH

Yannis

 

Caro Yannis,

Grazie per il tuo aiuto.

Ti auguro il meglio.

 
Yannis:
Mehdi,

Mettete questo codice (procedura) fuori dalla sezione start() e quando se la condizione è soddisfatta per chiudere tutti i trade, chiamate semplicemente la procedura così:

int start()

{ // il vostro codice qui .....

Se (la vostra condizione qui) ShutDownAllTrades();

}

void ShutDownAllTrades

{ int Retry;

Mentre (OrdiniTotali()>0)

{ for (int cnt=OrdersTotal()-1;cnt>=0;cnt--)

{ OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if (OrderType()==OP_BUY)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Yellow);

Sleep(1000);

}

else if (OrderType()==OP_SELL)

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

RefreshRates();

OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Yellow);

Sleep(1000);

}

else

{ Retry=0; while (Retry<5 && !IsTradeAllowed()) { Retry++; Sleep(1000); }

OrderDelete(OrderTicket());

Sleep(1000);

}

}

}

}

HTH

Yannis

Caro Yannis,

Ho aggiunto la tua procedura tra " int deinit() { } " (fuori dall'inizio) come hai detto ma c'è un problema tramite la compilazione dopo void ShutDownAllTrades { : '{' virgola o punto e virgola previsto.

Non vedo l'ora di sentire da te.

Grazie mille

 

Ops, scusate.

Quello che manca è il () dopo void ShutDownAllTrades()

Fate attenzione anche alla variabile chiamata 'Slippage' nella funzione orderclose.

Potresti aver bisogno di sostituirla con quella che usi quando piazzi gli ordini.

Yannis

 
Yannis:
Ops, scusate.

Quello che manca è il () dopo void ShutDownAllTrades()

Fate attenzione anche alla variabile chiamata 'Slippage' nella funzione orderclose.

Potresti aver bisogno di sostituirla con quella che usi quando fai gli ordini.

Yannis

Funziona molto bene !

Grazie ancora

 

Sto usando l'indicatore MTF CCI dal thread degli indicatori Multi Time Frame, è una linea gialla a gradini, vedi immagine allegata.

Quando la linea è sopra il livello 100 (ipercomprato) - il prezzo scende e quando è sotto -100 (ipervenduto) - il prezzo sale.

L'unico problema è che non si aggiorna sempre, devo farlo manualmente cliccando col tasto destro sul grafico e selezionando 'Aggiorna'.

Una domanda ai programmatori: C'è qualche funzione in MQ4 per fare quel tipo di aggiornamento automaticamente su ogni tick?

Apprezzerei un consiglio.

euro pean

File:
mtf_cci.jpg  37 kb
 

Provate questo:

void ObjectsRedraw()

Ridisegna tutti gli oggetti del grafico

Esempio

ObjectsRedraw();

Potrebbe essere necessario usare prima ObjectCreate.

 
richx7:
Provate questo:

void ObjectsRedraw()

Ridisegna tutti gli oggetti sul grafico

Esempio

ObjectsRedraw();

Potrebbe essere necessario usare prima ObjectCreate.

Grazie per aver risposto.

Per quanto ne so, ObjectsRedraw() aggiorna gli oggetti che sono stati appena "creati" e "impostati".

Ho bisogno di aggiornare un indicatore che non è nella lista degli oggetti, quindi ObjectsRedraw() non funziona.

O forse sapete come fare riferimento a un indicatore esistente?

Motivazione: