Domanda di OrderModify() - pagina 3

 

Simon,

Sto cercando di pensare a come potrei fare questo, ma non viene fuori niente. Sto setacciando il dizionario in MetaEditor per trovare possibili percorsi. Sto considerando l'uso delle funzioni OrderSymbol() e OrderSelect() di concerto. Se mi stai dando un'opzione per un suggerimento, ovviamente lo prendo. Qual è il suggerimento? ;) Lo considero più una discussione che una sfida. Se la considerate una sfida, non accetterò alcun suggerimento. Ho piena fiducia nelle mie capacità.

Grazie.

 

Perché dovresti usare MarketInfo() per dirti cosa?


Prima di poterlo codificare devi capire come farlo e poi essere in grado di esprimerlo usando un linguaggio semplice, non il codice.


Il codice necessario per soddisfare questo requisito contiene molti aspetti di ciò che dovevi fare con il codice che hai messo nel Code Base.


È ora di andare a letto per me. . . quindi ecco un suggerimento per iniziare, avete più ordini, quindi avete bisogno di fare un ciclo attraverso tutti loro per trovare quello giusto. . . o forse più di uno, coprendo tutte le opzioni che potete vedere.

Se non riuscite a trovare un modo fatemelo sapere e io mi inventerò quella che penso sia una soluzione e la posterò . . . poi potrete leggerla, capirla e farla a pezzi e chiedermi di giustificare qualsiasi parte di essa che pensate sia sbagliata o non necessaria.

In entrambi i casi sono convinto che imparerete nel processo.

 

Simon,

Richard Bhauer mi ha mandato una versione rivista di quello che ho postato prima. Sicuramente NON è il mio stile di codifica preferito, ma penso che sia impressionante. Ho pensato di condividerlo con te per vedere se questo codice ha qualche connessione con un metodo che stai promuovendo per la selezione e la chiusura degli ordini. Grazie ancora a Richard. Inoltre, un motivo per cui ho pensato di provare il metodo OrderSymbol() è stato perché ho scritto EAs utilizzando più ordersend di OrderSend("GBPUSD"...); o qualsiasi coppia di valute. Ho pensato che avrei potuto semplicemente tentare un processo simile per chiudere gli ordini. Apparentemente, il lavoro di selezione dell'ordine (per chiuderlo) è fatto all'interno della funzione OrderSelect(). Nel post precedente, hai menzionato come suggerimento, di provare ad eseguire un ciclo per individuare il numero di biglietto corretto (immagino che il ciclo venga eseguito per primo e quando il biglietto viene trovato, scenda al blocco di codice successivo che contiene in primo luogo la funzione OrderSelect(). All'interno della funzione OrderSelect() ci sarebbe la variabile usata nel precedente blocco di codice del ciclo per trovare il numero di biglietto corretto. La funzione OrderSelect() userebbe la variabile per selezionare il biglietto. Una volta selezionato il biglietto, tutto il resto è abbastanza semplice. Leggerò la tua risposta in mattinata.

Grazie.

File:
 
WhooDoo22:

A quanto pare, il lavoro di selezione dell'ordine (per chiuderlo) viene fatto all'interno della funzione OrderSelect().

Leggete la documentazione delle seguenti funzioni, OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice() che hanno tutte la seguente dichiarazione:Nota: l'ordine deve essere precedentemente selezionato dalla funzioneOrderSelect().

OrderClose() non ha questa dichiarazione perché si passail numero del ticket a OrderClose() come primo parametro. . . con tutte le funzioni elencate sopra non lo si fa, quindi per usarle bisogna prima selezionare l'ordine che interessa, questo è il compito di OrderSelect() . . poi puoi trovare la sua dimensione di posizione con OrderLots() o il suo prezzo aperto con OrderOpenPrice(), ma prima deve essere selezionato.


Dovete afferrare questo concetto e capirlo. . .

WhooDoo22:

Nel post precedente, hai menzionato come suggerimento, di provare ad eseguire un ciclo per individuare il numero di ticket corretto (immagino che il ciclo venga eseguito per primo e che quando il ticket viene trovato, si passi al blocco di codice successivo che contiene innanzitutto la funzione OrderSelect(). All'interno della funzione OrderSelect() ci sarebbe la variabile usata nel precedente blocco di codice del ciclo per trovare il numero di biglietto corretto.

Come farai a trovare il numero di biglietto corretto dall'interno di un loop? Non sai quale numero di biglietto è quello corretto... che informazioni hai che puoi usare?
 

Simon,

Le seguenti funzioni, OrderTicket(), OrderLots(), OrderClosePrice(), OrderProfit(), OrderType(), OrderTakeProfit(), OrderSymbol(), OrderStopLoss(), OrderOpenTime(), OrderOpenPrice() devono essere precedentemente selezionate dalla funzione OrderSelect().

La funzione OrderClose() non deve essere precedentemente selezionata dalla funzione OrderSelect() perché la funzione OrderClose() passa il numero del ticket come primo parametro.

Lo scopo di OrderSelect() è di selezionare un ordine.

Concetti compresi, esaminerò la documentazione.

Come troverai...

RE: Ci sto ancora lavorando.

Grazie

 

Simon,

Sembra che tu continui a indicare il "numero del biglietto". Lo capisco. Ecco la cosa però, sono a conoscenza di due soli modi per isolare i biglietti usando la funzione OrderSelect(). Posso usare il modo "Order pool", dove non c'è una variabile specifica del numero del biglietto OPPURE posso usare l'altro modo, dove posso usare un nome specifico della variabile del biglietto "ticket", "bababab22", "lambchops", qualsiasi cosa, per isolare il biglietto. Credo che usare il modo "Order pool" sia più pratico, quindi sto considerando l'uso di questa funzione in questo modo. Mi piace.


Inoltre, ho dato un'occhiata alla revisione di Robert e ho notato che quando ha chiuso gli ordini, ha semplicemente usato la funzione OrderSelect(), (quella in cui si seleziona da un pool di ordini) e l'unica condizione "if" usata oltre all'ovvio segnale di chiusura era la dimensione del lotto e se l'ordine era di acquisto/vendita. Questo era tutto. Mi piace, ma questo non è attualmente il compito. In questo compito, sì certo, potrei scrivere la stessa cosa, ma non si imparerebbe nulla. Ciò che è difficile attualmente è come posso imparare ciò che volete insegnare, se non so cosa state cercando di insegnarmi. Credo che se tu potessi essere più diretto con i tuoi pensieri, potrei afferrare ciò che vuoi condividere con maggiore velocità. Cercherò di essere più comprensivo.

Grazie.

 
WhooDoo22:

Simon,

Sembra che continui a indicare il "numero del biglietto". Questo lo capisco. Ecco il punto però, sono a conoscenza di due soli modi per isolare i biglietti usando la funzione OrderSelect(). Posso usare il modo "Order pool", dove non c'è una variabile specifica del numero del biglietto OPPURE posso usare l'altro modo, dove posso usare un nome specifico della variabile del biglietto "ticket", "bababab22", "lambchops", qualsiasi cosa, per isolare il biglietto. Credo che usare il modo "Order pool" sia più pratico, quindi sto considerando l'uso di questa funzione in questo modo. Mi piace.

In questo caso non puoi memorizzare il numero di ticket in una variabile perché gli ordini vengono piazzati manualmente, quindi il codice non conosce alcun numero di ticket finché non li scopre, quindi puoi usare solo la prima opzione usando un ciclo e OrderSelect().

Salvare i numeri dei ticket è un grosso inconveniente e dovrebbe essere evitato a meno che non sia necessario, il che significa che non c'è alcun modo possibile per evitarlo. . perché? perché il vostro codice deve essere in grado di recuperare da un riavvio di MT4, quindi ciò significa salvare le informazioni sui ticket su file e idealmente copiare i file su un secondo PC per un'ulteriore copertura di backup. poi quando il codice si riavvia deve leggere il file per ottenere i numeri dei ticket e provare a riprendere da dove ha lasciato. . questo tipo di complessità non è necessario per la maggior parte delle persone, ma spesso pensano che salvare i numeri dei biglietti sia l'opzione più semplice . . e non hanno davvero bisogno di salvare le informazioni su file, ecc, ecc . . poi quando tutto va male vorrebbero averlo fatto.

Ok, ho codificato la mia versione del codice per soddisfare i miei requisiti, ho aggiunto alcuni controlli per rilevare ordini multipli USDJPY e modificare e chiudere tutti gli ordini USDJPY . . . ecco alcune schermate per mostrare come è andata la versione finale.


Gli ordini che ho piazzato manualmente . . .

Tutti gli ordini

Gli ordini USDJPYi che il mio codice ha modificato (notare il TP & SL) e chiuso, e anche il numero del ticket. Si noti anche il mix di ordini di acquisto e vendita.

Ordini USDJPYi chiusi

I restanti ordini . . .

Ordini rimanenti

 

Simon,

In questo caso non puoi memorizzare il numero del biglietto in una variabile...

RE: Quindi stai seguendo la strada del "pool di ordini" per questo esempio, giusto?

// order pool example

if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES)){

Salvare i numeri dei biglietti è un grosso inconveniente...

RE: Sono d'accordo.

salvare le informazioni sui biglietti su file e idealmente copiare i file su un secondo PC per un'ulteriore copertura di backup...

RE: Sì, ma salvare le informazioni sui biglietti su file è un gruppo separato di blocchi di codice per la mia situazione attuale. Non inizierei a codificare questo fino a quando i fondamenti sono scritti.

Ho codificato la mia versione del codice per soddisfare il mio requisito...

RE: Sì, lo vedo. Sembra bene :)


Dopo aver completato questo compito, continuerò con il volume II. Non si scriverà da solo ;)

Grazie.

 
WhooDoo22:

Simon,

In questo caso non puoi memorizzare il numero del biglietto in una variabile...

RE: Quindi stai andando con il percorso "order pool" per questo esempio, giusto?


C'è un'altra opzione?
 

Simon,

No, non che io sappia. Sembra che ci siano solo due opzioni e questa opzione sembra la migliore per il volume II. Inoltre, sembra meno complicato, e questo non mi dispiace affatto ;)

Quindi, tornando a questo compito, ho capito che hai usato il metodo order pool per selezionare l'ordine sulla coppia usdjpy, ma quale condizione hai usato per isolare l'ordine su usdjpy?

Grazie.

Motivazione: