chiusura di tutti gli ordini aperti

Sezione dedicata a metatrader (ed altre piattaforme) ed al suo linguaggio di programmazione per il trading automatico

Moderatore: Dainesi

Rispondi
romjp
Messaggi: 30
Iscritto il: 10/05/2017, 10:45

chiusura di tutti gli ordini aperti

Messaggio da romjp » 14/05/2017, 9:45

Buongiorno e buona domenica a tutti.
cercavo un comando per la chiusura di tutti gli ordini aperti, al verificarsi di una condizione.
ho gia cercato questo argomento sul forum (CloseAll), ma preferirei usare un comando specifico, se esiste ovviamente.
per il momento sto usando il comando orderclose() per ogni posizione aperta:

Codice: Seleziona tutto

if(qatt_bid>=q_superiore)
        { 
         ticket2=OrderClose(ticket,puntata_buy,Ask,0);
         ticket2=OrderClose(ticket,puntata_sell,Bid,0);
         chiusura_negativa_buy=0;
         chiusura_negativa_sell=1;
         Print("BUY: l'ordine è stato chiuso in positivo: ",profitto);
        }
Ne esiste uno, o lascio così?
grazie

Sponsor

Sponsor
 

romjp
Messaggi: 30
Iscritto il: 10/05/2017, 10:45

Re: chiusura di tutti gli ordini aperti

Messaggio da romjp » 15/05/2017, 12:10

Così non funziona. Me ne chiude una e poi mi compare un errore.

zetalakappa
Messaggi: 24
Iscritto il: 06/07/2015, 15:45

Re: chiusura di tutti gli ordini aperti

Messaggio da zetalakappa » 16/05/2017, 7:49

A meno che tu non abbia salvato tutti i ticket degli ordini aperti in un array o in più variabili, si deve fare un ciclo per scorrere tutti gli ordini e chiuderli man mano.

Codice: Seleziona tutto

per i che va da OrdersTotal() a 0 //Quindi decremento
chiudo l'ordine che punto con i

Dal codice citato sembra tu abbia nella variabile ticket effettivamente il ticket di on ordine; ma non può essere valido contemporaneamente per un ordine buy e uno sell. Il ticket è univoco.

Cita un po' più di codice, nel caso.

romjp
Messaggi: 30
Iscritto il: 10/05/2017, 10:45

Re: chiusura di tutti gli ordini aperti

Messaggio da romjp » 16/05/2017, 13:44

Grazie per la risposta.
dato che ho la necessita di aprire/chiudere solo due posizioni alla volta, ho creato due variabili differenti che contengono i ticket di ogni ordine. cosi riesco a specificare con precisione l'ordine da chiudere.
Grazie per la dritta ;)

Alextrade
Messaggi: 30
Iscritto il: 10/02/2016, 15:58

Re: chiusura di tutti gli ordini aperti

Messaggio da Alextrade » 23/05/2017, 23:25

se cerchi sulla libreria di Metaquote trovi diversi script e/o pezzi di EA che fanno esattamente quello che chiedi

romjp
Messaggi: 30
Iscritto il: 10/05/2017, 10:45

Re: chiusura di tutti gli ordini aperti

Messaggio da romjp » 30/05/2017, 17:10

Ciao Alextrade. ho seguito il tuo consiglio ed ho copiato la parte della chiusura degli ordini, ma non funziona.
potreste dargli un'occhiata e dirmi dove c'è l'errore? grazie

Codice: Seleziona tutto

     if(AccountProfit()>=100)
          { 
            for(int i=OrdersTotal()-1;i>=0;i--)
              {
               if(OrderSelect(i, SELECT_BY_POS)==true)  int type = OrderType();
               C_ordine = false;
               switch(type)
                     {
//Close opened long positions
                      case OP_BUY: C_ordine = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),0);
                      break;
               
//Close opened short positions
                      case OP_SELL: C_ordine = OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_ASK),0);
                      break;             
                     } 
              }
            Print ("Massimo profitto raggiunto. Tutti gli ordini sono stati chiusi");
          }

Avatar utente
PlSoft
Messaggi: 139
Iscritto il: 20/12/2015, 21:12
Località: Suzzara

Re: chiusura di tutti gli ordini aperti

Messaggio da PlSoft » 19/06/2017, 22:07

Usa questo codice. Ti permette di chiudere un ordine specifico quando lo desideri.
Le variabili che devi passare sono tre.

Close_This(buy_big_profit_tickets,buy_big_profit_lots,300);

//+------------------------------------------------------------------+
//| CLOSE THIS TRADE |
//+------------------------------------------------------------------+
bool Close_This(int NumbTicket,double NumLot,int magic) // funzione per chiudere uno specifico ordine e lottaggio
{
int cnt=0; double MyPrice=0;
for(int x=0; x<OrdersTotal(); x++)
{
if(OrderSelect(NumbTicket, SELECT_BY_TICKET)==true)
{
if(NumLot==0 || NumLot>OrderLots())NumLot=OrderLots();
if(OrderType()==OP_BUY && OrderMagicNumber() == magic)MyPrice=MarketInfo(OrderSymbol(),MODE_BID);
if(OrderType()==OP_SELL && OrderMagicNumber() == magic)MyPrice=MarketInfo(OrderSymbol(),MODE_ASK);
bool res=OrderClose(NumbTicket,NumLot,MyPrice,3,CLR_NONE);
if(res==true){return(true);break;}
if(res==false)continue;
}
}

return(false);

}

romjp
Messaggi: 30
Iscritto il: 10/05/2017, 10:45

Re: chiusura di tutti gli ordini aperti

Messaggio da romjp » 20/06/2017, 9:42

Ti ringrazio!

Rispondi