Caro qjol,
Non capisco bene cosa intendi, potresti spiegare per favore. Grazie, grazie a te.
nel tuo codice
if (bar3>1) OrderClose(OrderTicket(), OrderLots(),Ask,3,Red);
stai usando OrderTicket() e OrderLots() e 4 queste funzioni devi usare OrderSelect()
Come potete vedere nella documentazione:
Nota
Il parametro pool è ignorato se l'ordine è selezionato dal numero del biglietto. Il numero del biglietto è un identificatore unico dell'ordine.
Per sapere da quale lista l'ordine è stato selezionato, bisogna analizzare il suo tempo di chiusura. Se il tempo di chiusura dell'ordine è uguale a 0, l'ordine è aperto o in sospeso e preso dalla lista delle posizioni aperte del terminale.
Si può distinguere una posizione aperta da un ordine pendente per il tipo di ordine. Se il tempo di chiusura dell'ordine non è uguale a 0, l'ordine è un ordine chiuso o un ordine pendente cancellato ed è stato selezionato dalla storia del terminale. Si differenziano anche per il tipo di ordine.
La funzione OrderSelect() copia i dati dell'ordine nell'ambiente del programma e tutte le ulteriori chiamate di OrderClosePrice(), OrderCloseTime(), OrderComment(), OrderCommission(), OrderExpiration(), OrderLots(), OrderMagicNumber(), OrderOpenPrice(), OrderOpenTime(), OrderPrint(), OrderProfit(), OrderStopLoss(), OrderSwap(), OrderSymbol(), OrderTakeProfit(), OrderTicket(), OrderType() restituiscono i dati copiati in precedenza. Ciò significa che in alcuni casi i dettagli dell'ordine (prezzo aperto, livelli SL/TP o data di scadenza) possono cambiare e i dati diventano non reali. Si raccomanda vivamente di chiamare la funzione OrderSelect() prima di richiedere i dati dell'ordine.
Quindi, se uso il numero di biglietto attuale e i Lotti, non c'è bisogno di usare OrderSelect, giusto? Io apro solo un ordine alla volta, posso sapere come ottenere il numero di ticket dell'ordine aperto?
Grazie ancora
Quindi, se uso il numero di biglietto attuale e i Lotti, non c'è bisogno di usare OrderSelect, giusto? Io apro solo un ordine alla volta, posso sapere come ottenere il numero di ticket dell'ordine aperto?
Grazie ancora
La funzione OrderSend() restituisce il numero di ticket se ha successo. Ti suggerisco di leggere la sezione Book di questo sito dall'inizio alla fine per capire meglio come usare MQL, oltre a consultare la documentazione di riferimento per ogni funzione che usi per capire meglio quali parametri usare e quali sono i valori di ritorno.
Cari tutti,
Ho inserito OrderSelect(), ma OrderClose ancora non funziona, per favore aiutatemi.
//+------------------------------------------------------------------+ //| chuale.mq4 | //| Copyright 2014, MetaQuotes Software Corp. | //| http://www.abc.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "http://www.abc.com" #property version "1.00" #property strict extern double TakeProfit=500; extern double Lots=0.1; extern double StopLoss=300; double bar1; double bar2; double bar3; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int init() { //--- //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //--- return(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { int ticket; int total=OrdersTotal(); int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; { bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100; bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100; bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100; if (bar2>1) { if(total<1) ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green); OrderSelect(1,SELECT_BY_POS); if (bar3 <-1) OrderClose(OrderTicket(),Lots,Bid,3,Green); } if (bar2<-1) { if(total<1) ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red); if ( bar3>1) OrderClose(OrderTicket(), Lots,Ask,3,Red); } } return(0); //--- return(0); } //+------------------------------------------------------------------+
Ciao a tutti,
Ora inserisco ticket e Lotti nell'OrderClose senza usare OrderTicket() e OrderLots() ma non chiude anche l'ordine. Per favore aiutatemi.
//+------------------------------------------------------------------+ //| chuale.mq4 | //| Copyright 2014, MetaQuotes Software Corp. | //| http://www.abc.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2014, MetaQuotes Software Corp." #property link "http://www.abc.com" #property version "1.00" #property strict extern double TakeProfit=500; extern double Lots=0.1; extern double StopLoss=300; double bar1; double bar2; double bar3; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int init() { //--- //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //--- return(0); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int start() { int ticket; int total=OrdersTotal(); int counted_bars=IndicatorCounted(); if(counted_bars>0) counted_bars--; { bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100; bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100; bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100; if (bar2>1) { if(total<1) ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green); if (bar3 <-1) OrderClose(ticket,Lots,Bid,3,Green); } if (bar2<-1) { if(total<1) ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red); if ( bar3>1) OrderClose(ticket, Lots,Ask,3,Red); } } return(0); //--- return(0); } //+------------------------------------------------------------------+
Ciao a tutti,
Ora inserisco ticket e Lotti nell'OrderClose senza usare OrderTicket() e OrderLots() ma non chiude anche l'ordine. Per favore aiutatemi.
ticket è una variabile locale, quindi il prossimo tick non avrà lo stesso valore
Mettere fuori dalle funzioni per renderlo Globalscope
double bar1; double bar2; double bar3; int ticket;
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Ciao,
Ho il seguente codice per il mio EA, per favore aiutatemi a capire perché l'OrderClose non viene attivato? Devo usare OrderSelect()? Qual è lo scopo di OrderSelect()? Grazie.