Domanda di OrderModify()

 

Ciao forum MQL4,

{OrderModify(ticket,0,Ask-500*Point,0,0,Blue);}}}}

Il codice di cui sopra funziona, ma sposta la sl su o giù quando il prezzo ask si muove su o giù.

Ho provato questo, come soluzione...

{OrderModify(ticket,0,OrderOpenPrice()-500*Point,0,0,Blue);}}}}

(l'ordine selezionato è un ordine di acquisto)

Ho controllato il giornale per l'errore ricevuto e si legge 4051. Ci sono più errori 4051. In pratica non funziona, e sono curioso di sapere se qualcun altro ha già risolto questo problema in precedenza e ha una spiegazione.

Non vedo perché questa soluzione non dovrebbe funzionare (sì, credo di selezionare correttamente l'ordine perché la prima soluzione errata OrderModify funziona).

Grazie.

 
WhooDoo22:


Ho controllato il diario per l'errore ricevuto e si legge 4051. Ci sono più errori 4051. Fondamentalmente non funziona, e sono curioso di sapere se qualcun altro ha già risolto questo problema in precedenza e ha una spiegazione.

Quando hai un problema con una funzione leggi la documentazione su quella funzione. . . . OrderModify()<----- Click ME ! ! !

Non è possibile modificare il prezzo di apertura dell'ordine a 0,0 ... supponendo che tu abbia eseguito correttamente una OrderSelect(), usa OrderOpenPrice() per il secondo parametro che stai passando a OrderModify()

 

Simon, ho letto la documentazione della funzione OrderModify() e ho notato che l'esempio utilizzato è un trailing stop. Non voglio usare un trailing stop per l'EA. Questo perché se usassi un trailing stop, (secondo l'esempio) l'EA avrebbe bisogno che il mercato viaggiasse x punti sopra lo sl corrente per modificare lo sl al prezzo specificato. Fondamentalmente questo è troppo complicato. Voglio solo aggiungere uno stop loss all'ordine DOPO che l'ordine è stato inviato al mercato.

Comunque, sto provando nuove soluzioni anche attualmente.

Grazie.

 
WhooDoo22:

Simon, ho letto la documentazione della funzione OrderModify() e ho notato che l'esempio utilizzato è un trailing stop. Non voglio usare un trailing stop per l'EA. Questo perché se usassi un trailing stop, (secondo l'esempio) l'EA avrebbe bisogno che il mercato viaggiasse x punti sopra lo sl corrente per modificare lo sl al prezzo specificato. Fondamentalmente questo è troppo complicato. Voglio solo aggiungere uno stop loss all'ordine DOPO che l'ordine è stato inviato al mercato.

Comunque, sto provando nuove soluzioni anche attualmente.

Grazie.

Allora perché stai cercando di cambiare il prezzo di apertura a 0,0? devi lasciare il prezzo di apertura invariato, cioè OrderOpenPrice() provalo . . .
 

Simon,

tester di strategia:

1. Modalità visiva

2. Velocità 31

3. 2010.12.29

4. EURUSD

5. M15

eseguire"solo prezzi aperti", non ogni tick.


MetaEditor: Modifica -> Trova... -> "// scelta 1."


scelta 1. = nessun errore, ma ovviamente non voglio questo.

scelta 2. = scheda Journal -> Journal legge: "errore 4051".

Grazie.

File:
test1.mq4  12 kb
 

Evidentemente, l'utilizzo della funzione OrderOpenPrice() all'interno dei parametri di OrderModify() è considerato un "parametro di funzione non valido" secondo l'errore 4051. Sto pensando "?" :) Potrei salvare il valore di OrderOpenPrice() e includerlo nei parametri della funzione OrderModify per fare ciò che desidero, ma davvero? Sicuramente c'è un modo più semplice! Torno alla vecchia macina per me ;)

Grazie.

 
WhooDoo22:
Evidentemente, l'utilizzo della funzione OrderOpenPrice() all'interno dei parametri di OrderModify() è considerato un "parametro di funzione non valido" secondo l'errore 4051.
Evidentemente, il tuo codice è sbagliato. OrderOpenPrice() va bene. Pubblica il codice che include il tuo orderSelect.
 

William,

Evidentemente, ho postato l'EA in un link che puoi scaricare e visualizzare in MetaEditor se vuoi fornire il tuo supporto. La funzione OrderSelect() non è attualmente un problema. Sai una cosa? Lo posterò solo per te, William.

//***************************************************
// EMERGENCY BUY ORDER STOP LOSS PROTECTION SECTION ;
//***************************************************

   OrderSelect(0,SELECT_BY_TICKET,MODE_TRADES); // was ticket.
   if(OrdersTotal()>0)                                                                         {
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderSend1==true)                                                                        {
//   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<=OrderOpenPrice()-500*Point)                     {
     
// choice 1.     
//     {OrderModify(ticket,OrderOpenPrice(),Ask-500*Point,0,0,Blue);}}}}
// choice 2.
     {OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice()-500*Point,0,0,Blue);}}}}

Come hai richiesto.

Grazie.

 
WhooDoo22:

William,

Evidentemente, ho postato l'EA in un link che puoi scaricare e visualizzare in MetaEditor se vuoi fornire il tuo supporto. La funzione OrderSelect() non è attualmente un problema. Sai una cosa? Lo posterò solo per te, William.

Come hai richiesto.

Grazie.

0 NON è un numero di ticket valido, nemmeno nello Strategy Tester, prova il tuo OrderSelect() e lo vedrai da solo.
 

Simon, farò dei test per scoprirlo.

Grazie.

 

Ah-ha! Ho cambiato il biglietto numero 0 con 1, poi tutto ha funzionato alla perfezione. Sì, mi sbagliavo William... La funzione OrderSelect() era un problema. Ovviamente, la funzione OrderSelect() deve selezionare un biglietto. Se il numero del biglietto è 0, quale biglietto selezionerà l'EA? :O "?". Grazie a entrambi per la vostra assistenza.

Grazie a voi.