Rustam Bikbulatov: Ciao a tutti. Per favore ditemi come cambiare questo codice for(int i=OrdersTotal()-1;i>=0;i--){
Al momento sta chiudendo quelli aperti più di recente. Vuoi che chiuda prima i primi!
for( int i = 0; i < OrdersTotal(); i++ ) { if( /*Функция закрытия. Если вернула истину*/ ) i--; }
Provate in questo modo. Invece dei commenti, dovreste usare la funzione per chiudere l'ordine. Non ho controllato la sua funzionalità. E qui, penso che dovremo chiamare la funzione che calcola la quantità di ordini ogni volta, poiché il numero di ordini diminuirà.
Rustam Bikbulatov: Ciao a tutti. Potete dirmi come cambiare questo codice for(int i=OrdersTotal()-1;i>=0;i--){
Al momento sta chiudendo quelli aperti più di recente. Voglio che chiuda prima i primi!
//+------------------------------------------------------------------+ //| Закрыть все позиции начиная с первых | //+------------------------------------------------------------------+
double CloseOrders()
{ for(int i=0; i<OrdersTotal(); ) { if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if (OrderMagicNumber() != mn) break;
int type = OrderType();
bool result = false;
switch(type) { //Close opened long positions caseOP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor ); break;
//Close opened short positions caseOP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor ); break; }
Rustam Bikbulatov: Si chiude in modo imbarazzante)
L'opzione che ho suggerito è generalmente incongrua per la chiusura.
Se state parlando di chiudere dal vecchio al nuovo, allora state chiudendo la griglia. Avendo un po' di esperienza con le griglie, tutto quello che posso dire con certezza è che non si dovrebbe scegliere in base all'età della posizione, ma al suo lotto, e si dovrebbe chiudere da un lotto più grande a uno più piccolo. Se la griglia è a lotto unico, allora non c'è differenza nell'ordine di chiusura. Usare funzioni già pronte per chiudere, e non inventare qualcosa che è già stato inventato)
L'opzione che ho suggerito è generalmente incongrua per la chiusura.
Se state parlando di chiudere dal vecchio al nuovo, allora state chiudendo la griglia. Avendo un po' di esperienza con le griglie, tutto quello che posso dire con certezza è che non si dovrebbe scegliere in base all'età della posizione, ma al suo lotto, e si dovrebbe chiudere da un lotto più grande a uno più piccolo. Se la griglia è a lotto unico, allora non c'è differenza nell'ordine di chiusura. Usare funzioni già pronte per la chiusura, e non inventare qualcosa che è già stato inventato)
Signori sviluppatori! Buona giornata a tutti. Mi interessa una domanda su come creare un modello di Expert Advisor (script) al momento della creazione. Questo può essere modificato da qualche parte e come si fa?
Ciao a tutti. Potete dirmi come cambiare questo codice for(int i=OrdersTotal()-1;i>=0;i--){
Ciao a tutti. Per favore ditemi come cambiare questo codice for(int i=OrdersTotal()-1;i>=0;i--){
{
if( /*Функция закрытия. Если вернула истину*/ )
i--;
}
Provate in questo modo. Invece dei commenti, dovreste usare la funzione per chiudere l'ordine. Non ho controllato la sua funzionalità. E qui, penso che dovremo chiamare la funzione che calcola la quantità di ordini ogni volta, poiché il numero di ordini diminuirà.
Possiamo anche provare una tale variante:
/*Функция закрытия ордера*/
si chiude in modo imbarazzante)
non è corretto, ma per ora (fino a qualche build) funziona: alla chiusura riuscita di i--
Ciao a tutti. Potete dirmi come cambiare questo codice for(int i=OrdersTotal()-1;i>=0;i--){
//| Закрыть все позиции начиная с первых |
//+------------------------------------------------------------------+
double CloseOrders()
{
for(int i=0; i<OrdersTotal(); )
{
if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
break;
if (OrderMagicNumber() != mn)
break;
int type = OrderType();
bool result = false;
switch(type)
{
//Close opened long positions
case OP_BUY : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), Slippage, CloseColor );
break;
//Close opened short positions
case OP_SELL : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), Slippage, CloseColor );
break;
}
if(result == false)
{
Print("Order " , OrderTicket() , " failed to close. Error:" , GetLastError() );
i++;
}
}
return (True);
}
// End
Si chiude in modo imbarazzante)