chiusura di tutti gli ordini aperti

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

Moderator: Dainesi

Post Reply
romjp
Posts: 30
Joined: 10/05/2017, 10:45

chiusura di tutti gli ordini aperti

Post by 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:

Code: Select all

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
Posts: 30
Joined: 10/05/2017, 10:45

Re: chiusura di tutti gli ordini aperti

Post by romjp » 15/05/2017, 12:10

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

zetalakappa
Posts: 24
Joined: 06/07/2015, 15:45

Re: chiusura di tutti gli ordini aperti

Post by 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.

Code: Select all

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
Posts: 30
Joined: 10/05/2017, 10:45

Re: chiusura di tutti gli ordini aperti

Post by 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
Posts: 30
Joined: 10/02/2016, 15:58

Re: chiusura di tutti gli ordini aperti

Post by 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
Posts: 30
Joined: 10/05/2017, 10:45

Re: chiusura di tutti gli ordini aperti

Post by 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

Code: Select all

     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");
          }

User avatar
PlSoft
Posts: 114
Joined: 20/12/2015, 21:12
Location: Suzzara

Re: chiusura di tutti gli ordini aperti

Post by 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
Posts: 30
Joined: 10/05/2017, 10:45

Re: chiusura di tutti gli ordini aperti

Post by romjp » 20/06/2017, 9:42

Ti ringrazio!

Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest