OrderClose non funziona - pagina 3

 

Grazie Thrdel, darò un'occhiata alla tua codifica. Sei davvero molto gentile. Grazie ancora

 
thrdel:


Se intendi che non è il modo migliore per chiudere un ordine sono d'accordo, ma se il tizio non vuole usare OrderSelect (o non sa come farlo) e non lascia nessun ordine aperto sul mercato, funziona.

Cerchiamo di aiutarci a vicenda qui e la tua risposta non ha aiutato per niente, non gli hai mostrato come usare la funzione Order Select e il suo EA non funziona meglio ora a causa del tuo commento.

La prossima volta che vuoi aiutare, fallo nel modo giusto, metti il codice giusto in modo che gli altri possano effettivamente imparare qualcosa.

 
Grazie a tutti coloro che hanno risposto alla mia domanda. La mia intenzione è quella di entrare nel trade quando la barra2 soddisfa determinate condizioni. Sto facendo dei test su GBPJPY e apro un'operazione alla volta perché sono molto nuovo di MQL4. Con un solo trade sono in grado di utilizzare il ticket in Orderclose(). Non ho ancora familiarità con OrderSelect. Quindi il trade si chiuderà se bar3 soddisfa certe condizioni. Vorrei fare una domanda, c'è un modo per memorizzare l'esecuzione del programma in un file per il debug? Poiché ho scoperto che quando il programma viene eseguito, non so quale parte dell'esecuzione è andata male.
 
chuale:
Grazie a tutti coloro che hanno risposto alla mia domanda. La mia intenzione è quella di entrare nel trade quando la barra2 soddisfa determinate condizioni. Sto facendo dei test su GBPJPY e apro un'operazione alla volta perché sono molto nuovo di MQL4. Con un solo trade sono in grado di utilizzare il ticket in Orderclose(). Non ho ancora familiarità con OrderSelect. Quindi il trade si chiuderà se bar3 soddisfa certe condizioni. Vorrei fare una domanda, c'è un modo per memorizzare l'esecuzione del programma in un file per il debug? Poiché ho scoperto che quando il programma viene eseguito, non so quale parte dell'esecuzione è andata male.

Sei il benvenuto Chuale, ho imparato molto anche da altri su questo forum quindi nessun problema. Non hai davvero bisogno di salvare l'esecuzione del programma in un file, ci sono alcuni modi per guardare i valori delle tue variabili e gli eventuali errori che possono venire fuori. Io uso soprattutto la funzione Comment() e la funzione Print (). Posso mandarti degli esempi se hai bisogno. Come ho detto prima GBPJPY non mi ha dato risultati positivi ma USDJPY sì. Ho solo eseguito un back test per un mese (21 gennaio 2014 - 25 febbraio 2015) e con le mie impostazioni il ritorno è stato un po' più di 400 USD. Proverò altre coppie non appena avrò un po' di tempo e vi farò sapere. Inoltre, se hai bisogno di aiuto su come utilizzare Print() o Comment() per vedere i valori sullo schermo in tempo reale, fammi sapere. L'immagine precedente allegata era il grafico delle prestazioni dell'EA su un periodo di un mese. Non sembra male finora.
 

Caro thedel,

Grazie

Sì, sto usando Print(). Ho bisogno di sapere come usare OrderSelect() se ci sono più scambi aperti. Per una singola operazione, se uso SELECT_BY_POS, quale sarà il valore dell'indice (OrderSelect (int index, in select, int pool=MODE_TRADES)? È 1?

o quale valore?

 
chuale:
Grazie a tutti quelli che hanno risposto alla mia domanda. La mia intenzione è di entrare nel trade quando la barra2 soddisfa certe condizioni. Sto facendo dei test su GBPJPY e apro un'operazione alla volta perché sono molto nuovo di MQL4. Con un solo trade sono in grado di utilizzare il ticket in Orderclose(). Non ho ancora familiarità con OrderSelect. Quindi il trade si chiuderà se bar3 soddisfa certe condizioni. Vorrei fare una domanda, c'è un modo per memorizzare l'esecuzione del programma in un file per il debug? Poiché ho scoperto che quando il programma viene eseguito, non so quale parte dell'esecuzione è andata male.


Ecco un esempio di come usare la funzione Order Select:

In questo esempio, la funzione CountTrades controlla tutti gli ordini aperti e pendenti, scarta quelli che non hanno un simbolo e un numero magico corrispondenti e conta solo quelli di cui abbiamo bisogno.

In questo esempio selezionerà dal più recente al primo.

Se avete bisogno di altro aiuto fatemelo sapere.

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
/*
On every tick program checks what the value of myTrades is
by calling (executing) the CountTrades() function and asign the value
returned to myTrades..
*/
int myTrades = CountTrades();
/*
Comment() function will display the words in quotes and the value of 
myTrades variable.
*/
Comment("You have "+myTrades+" open trades.");
   
  }
//+------------------------------------------------------------------+
int CountTrades()
{
int count=0;// we start counting from zero
int trade;  // define a variable that will hold the total number of trades that are open
// Get the number of trades from OrdersTotal() and asign that value to trade variable.
for(trade=OrdersTotal()-1;trade>=0;trade--)
   {
   OrderSelect(trade,SELECT_BY_POS,MODE_TRADES); // Select orders by position (OP_BUY and OP_SELL) - orders can be selected by position or by ticket
                                                 // select from Open or pending orders = MODE_TRADES or select from History = MODE_HISTORY
   if(OrderSymbol()!=Symbol() || OrderMagicNumber() != MagicNumber)// if the order has a different symbol or magic number, skip to next order
   continue;
   if(OrderSymbol()==Symbol() && OrderMagicNumber() == MagicNumber)// if symbol is right and magic number is right, that is my order ,then
   if(OrderType()==OP_SELL                                         // if it's an open sell do this.....
   || OrderType()==OP_BUY)                                         // if it's an open buy do this......      
   count++;                                                        // in this example increase the counter since I'm counting all my orders
   }
return(count);                                                     // When finished counting, return the result
}
 
thrdel:


Se intendi che non è il modo migliore per chiudere un ordine sono d'accordo ma se il tizio non vuole usare OrderSelect (o non sa come fare) e non lascia nessun ordine aperto sul mercato funziona.

Cerchiamo di aiutarci a vicenda qui e la tua risposta non ha aiutato per niente, non gli hai mostrato come usare la funzione Order Select e il suo EA non funziona meglio ora a causa del tuo commento.

La prossima volta che vuoi aiutare, fallo nel modo giusto, metti il codice giusto in modo che gli altri possano effettivamente imparare qualcosa.


se cerchi di aiutare allora spiegalo correttamente

hai detto

thrdel:

Prima si contano gli ordini con OrdersTotal().

total=OrdersTotal();


cattivo esempio...... hai dato

se il tizio non vuole usare OrderSelect() allora deve smettere di programmare gli EA

grande sciocchezza quella che dici qui, https://www.mql5.com/en/forum/149958/page2#915413

Ho commentato il tuo codice di esempio e ti ho detto cosa dovevi fare

ci sono molti esempi che ho dato come fare ...

cerca su Google se vuoi trovarli

 
thrdel:


Ci sono un paio di cose che hai sbagliato. Presumo che tu voglia che questo EA lavori su coppie JPY su time frame M1. Vuoi piazzare gli ordini solo sulla nuova barra e chiudere gli ordini solo sulla nuova barra o vuoi entrare sulla nuova barra e uscire se le condizioni sono soddisfatte? Ecco cosa penso:

Prima contate gli ordini con OrdersTotal().

Poi calcola le tue variabili

Se ci sono ordini nel mercato controlla se devono essere chiusi

Se non ci sono ordini sul mercato, controlla se le condizioni di entrata sono soddisfatte.

Fammi sapere se hai qualche domanda.

 
quando ho compilato il seguente: ha detto che la funzione Time non è definita. Si prega di consigliare.
if(Time[0]==previousTime) return(0);         //EA will not go past this point unless it is a new bar
   previousTime=Time[0];                        // If it was a new bar , it's old now but continue to the end
 
chuale:
quando ho compilato il seguente: ha detto che la funzione Time non è definita. Si prega di consigliare.


Ok, ho risolto il problema perché ho sbagliato a digitare la parentesi per Time, dovrebbe essere [] invece di (). Grazie