MMA_Breakout_strategy_volume I (senza MM o MF) - codificato da WhooDoo22 - pagina 4

 

Simon,

1. . . . che numero di biglietto sta selezionando?

RE 1.: Ho avuto un malinteso in un uso della funzione OrderSelect() in combinazione con la funzione OrdersHistoryTotal(). Nessuna delle due funzioni ha a che fare con l'altra. Con questo capito, posso semplicemente rimuovere la funzione OrderSelect() dall'inizio del primo blocco di codice di invio ordini. Non è necessario (ricordate, questo codice è stato scritto rigorosamente per scopi di test, non per funzionare in demo o live. Ovviamente alla fine deve essere corretto in modo che possa essere usato su conti demo e live).

Inoltre, credo di aver capito il tuo punto ripetitivo, "controlla i valori di ritorno con la funzione GetLastError()". OTTENUTO. Ha ha :)

2. Se hai capito OrderHistoryTotal()...

RE 2.: Ho capito lo scopo delle funzioni OrdersHistoryTotal(). Avevo un'idea sbagliata dell'uso della funzione OrderSelect() in combinazione con la funzione OrdersHistoryTotal().

3. Se hai capito come funzionano le parentesi graffe { } ...

RE 3.: Credo di aver capito l'uso corretto delle parentesi graffe. Capisco anche che le parentesi possono essere inutili in questo caso.

if(OrderType()==OP_BUY)  
   OrderModify(ticket,0,OrderOpenPrice()-5000*Point,0,0,Blue);

Ho deciso di usare le parentesi non necessarie per assicurarmi che le espressioni di ogni blocco di codice isolassero le chiamate di funzione ad ogni specifico blocco di codice utilizzato. Roba molto ordinata, non voglio che i blocchi di codice dell'EA saltino accidentalmente le loro chiamate di funzione a causa di una mancanza di parentesi graffe.

4. Usare la variabile i come numero di biglietto:

RE 4.: Sono un po' sorpreso che tu non capisca la mia interpretazione di usare la variabile i come un numero di biglietto fittizio, non un numero di biglietto. La variabile i è semplicemente una cifra che viene aggiunta ogni volta che viene eseguita la funzione OrderClose(). La variabile i non è definita come un vero numero di biglietto. Ho a che fare con la chiusura parziale dell'ordine. Questo è l'unico modo che conosco per realizzare questo compito. Sarei aperto a una soluzione diversa. Hai una soluzione migliore? :) Credo che ci potrebbe essere un altro modo, ma per ora, non vedo una ragione per cambiare il processo utilizzato. Di nuovo, sono aperto a idee produttive.

5. . . . se ilticket OrderSend() fallisce sarà = -1:

RE 5.: Si prega di specificare a quale funzione OrderSend() si riferisce (sia il "rullo compressore", primo invio dell'ordine OPPURE l'invio dell'ordine all'interno delle chiamate della funzione di chiusura dell'ordine) Questo chiarimento guiderebbe i nostri pensieri nella stessa direzione e rafforzerebbe la comunicazione tra i due membri di questa discussione.

1. Perché il 1° o il 2° (correggere questo plz) invio dell'ordine fallirebbe? (forse a causa di un uso scorretto della funzione OrderSelect() e OrdersHistory...()? Questo sarà corretto).

2. Se l'invio dell'ordine è fallito, perché la variabile ticket dovrebbe rappresentare -1? Credo che se l'invio dell'ordine è fallito, la variabile ticket rappresenterebbe ancora 0 e non -1. Per favore spiegate.

Grazie.

 
WhooDoo22:

Simon,

RE 5.: Si prega di specificare a quale funzione OrderSend() ti riferisci (sia il "rullo compressore", il primo invio dell'ordine OPPURE l'invio dell'ordine all'interno delle chiamate della funzione di chiusura dell'ordine) Questo chiarimento guiderebbe i nostri pensieri nella stessa direzione e rafforzerebbe la comunicazione tra i due membri di questa discussione.

1. Perché il 1° o il 2° (correggere questo plz) ordine di invio fallirebbe? (forse a causa di un uso scorretto della funzione OrderSelect() e OrdersHistory...()? Questo sarà corretto).

2. Se l'invio dell'ordine è fallito, perché la variabile ticket dovrebbe rappresentare -1? Credo che se l'invio dell'ordine è fallito, la variabile ticket rappresenterebbe ancora 0 e non -1. Per favore spiegate.

Grazie.

Se OrderSend() fallisce, per qualsiasi motivo. ."Restituisce il numero del ticket assegnato all'ordine dal trade server o -1 se fallisce", tratto dalla documentazione. Tu usi la variabile ticket per mantenere il valore restituito. . . quindi se OrderSend() fallisce (per qualsiasi motivo) il numero di ticket è ora -1 . . . non si controlla, si spera solo per il meglio e si usa quello che si ottiene . . .


State usando la variabilei come numero di biglietto . .. . in questo codice . . .

OrderClose(i, 0.01, Ask, 30, CLR_NONE);

. . . dalla documentazione per OrderClose() la prima variabile nella chiamata di funzione è un int. . .ticket - Numero unico del ticket dell'ordine. Quindi supponiamo che tu abbia appena chiuso il ticket numero34282694 cosa ti fa pensare che fare i++; dopo ti aiuterà in qualche modo? Forse potresti rispondere a questo particolare punto e spiegare come funziona?



"Non voglio che i blocchi di codice dell'EA saltino accidentalmente le loro chiamate di funzione a causa di una mancanza di parentesi graffe.". . . saltare accidentalmente? Come pensi che possa succedere? La CPU ha un attacco di tosse o si prende un raffreddore?


Ok, quindi stai dicendo che comprendi perfettamente tutti i problemi, ma invece di scrivere un codice che possa funzionare nello Strategy Tester e anche in un ambiente Live/Demo, hai scelto specificamente di storpiare il tuo codice scrivendolo in modo che funzioni solo nello Strategy Tester? E' questo che stai dicendo?

 

Simon,

1. Se OrderSend() fallisce, per qualsiasi motivo . . .

RE 1.: Ipoteticamente, diciamo che un ordine fallisce... Se quello che hai detto è vero, allora il conteggio dei ticket viene sottratto di 1 (-1 dal totale dei ticket). Quindi, l'EA ha inviato e chiuso 25 ordini con successo. Arriva il segnale per inviare l'ordine e la funzione OrderSend() fallisce. Il conteggio attuale dei ticket è 24? Se è così, la variabile i indicherebbe un falso conteggio di ticket perché anche la variabile i non sottrarrebbe 1 (-1). La variabile i semplicemente non aumenterebbe e ora c'è un falso conteggio di ticket. Il conteggio corretto dei biglietti è 24 e quello della variabile i è 25. La funzione OrderSelect() sta ora selezionando il numero di biglietto errato. Siamo d'accordo? :) Quindi sembra che la soluzione più ovvia sarebbe quella di sottrarre 1 dalla variabile i se la funzione OrderSend() fallisce. Whew... Mi sto asciugando il sudore dalla fronte su questo :).

2. la CPU si mette a tossire o prende un raffreddore?

RE 2.: Di solito, se prendo un virus influenzale, tendo a saltare alcuni pensieri sensati quando parlo. Ho pensato che lo stesso vale per le CPU :) A parte l'umorismo, credo che qualsiasi possibilità che una chiamata di funzione venga saltata a causa della mancanza di "{ }", sarebbe un semplice problema da risolvere. Perché non essere più attenti? Se non c'è davvero alcuna preoccupazione che una chiamata di funzione venga saltata, allora non vedo perché le parentesi graffe non dovrebbero essere rimosse.

3. OK, quindi stai dicendo...

RE 3.: Credo di capire i problemi che mi avete presentato finora.

4. hai scelto specificamente di storpiare il tuo codice scrivendolo in modo che funzionasse solo nello Strategy Tester ?..

RE 4.: Ho scelto di sacrificare ciò che credevo avesse meno priorità e ho tenuto ciò che credevo avesse più priorità. Questa è stata una scelta fatta in base ai limiti di tempo e ai livelli di priorità.

Grazie.

 
WhooDoo22:

Simon,

1. Se OrderSend() fallisce, per qualsiasi motivo . . .

RE 1.: Ipoteticamente, diciamo che un ordine fallisce... Se quello che hai detto è vero, allora il conteggio dei ticket viene sottratto di 1 (-1 dal totale dei ticket). Quindi, l'EA ha inviato e chiuso 25 ordini con successo. Arriva il segnale per inviare l'ordine e la funzione OrderSend() fallisce. Il conteggio attuale dei ticket è 24? Se è così, la variabile i dichiarerebbe un falso conteggio di ticket perché anche la variabile i non sottrarrebbe 1 (-1). La variabile i semplicemente non aumenterebbe e ora c'è un falso conteggio di ticket. Il conteggio corretto dei biglietti è 24 e quello della variabile i è 25. La funzione OrderSelect() sta ora selezionando il numero di biglietto errato. Siamo d'accordo? :) Quindi sembra che la soluzione più ovvia sarebbe quella di sottrarre 1 dalla variabile i se la funzione OrderSend() fallisce. Whew... Mi sto asciugando il sudore dalla fronte su questo :).

Se quello che ho detto è vero, leggete la documentazione da soli, vi ho dato un link, cliccatelo e leggete.

Stai fraintendendo completamente come funziona... mi dispiace ma è così. I numeri dei ticket funzionano solo in modo sequenziale nello Strategy Tester... il conteggio dei ticket non viene sottratto... la variabile che stai usando per contenere il numero di ticket = -1 non sottrai mai la variabile ticket da nulla nel tuo codice. . .

"Il segnale arriva per inviare l'ordine e la funzione OrderSend() fallisce.Il conteggio attuale dei biglietti è 24?" No, la variabileticket contiene il numero -1, non 25 o 24, contiene -1 quindi qualsiasi chiamata OrderSelect(ticket, . . .) che segue questo fallirà perché non c'è nessun ordine con il numero di biglietto -1, è un numero di biglietto non valido . . . poi qualsiasi chiamata OrderType() fallirà anche perché la OrderSelect() è fallita . . . . . e poi anche la OrderModify(ticket, . . . .) fallisce . . .

Dato che hai detto che capisci tutti questi problemi ma hai scelto di ignorarli e di sottoporre questo codice al codebasee . . . credo di non aver bisogno di sprecare altro tempo cercando di spiegare nulla di tutto ciò, dato che hai già una buona padronanza del problema. Mi dispiace per l'inconveniente, non voglio rubarti altro tempo cercando di aiutarti.

 

Simon,

Leggerò la documentazione come hai richiesto.

1. la variabile che stai usando per tenere il numero del biglietto = -1

RE 1.: Quale variabile stai indicando? La variabile i o la variabile ticket?

2. la variabile che state usando per contenere il numero del biglietto = -1

RE 2: Si può anche dire: "quando un ordine fallisce, il numero del biglietto è meno uno (-1)?

se questo è il caso, se l'EA ha inviato e chiuso 24 ordini con successo e non è riuscito a inviare il 25° ordine, il numero di ticket corrente è meno uno (-1). Corretto? :)

Ovviamente qualsiasi blocco di codice contenente la funzione OrderSelect() fallirà a causa dell'errore "numero di ticket non valido". Penso che il numero di errore sia 4108 come hai scritto in precedenza e anche la documentazione lo riporta.

Non ho scritto "capisco tutti questi problemi". Ho scritto:"Credo di capire i problemi che mi hai presentato finora".

3. "Come hai detto tu capisci tutti questi problemi ma hai scelto di ignorarli e di sottoporre questo codice al codebasee . . . credo di non aver bisogno di sprecare altro tempo cercando di spiegare nulla di tutto ciò, dato che hai già una buona padronanza di esso. Mi dispiace per l'inconveniente, non ruberò più il tuo tempo cercando di aiutare".

RE 3: Non sto ignorando questi problemi al momento. La mia discussione con voi lo dimostra. Sono interessato a tutti i punti che avete fatto e continuate a fare. Inoltre, rispetto la tua conoscenza della documentazione di MQL4 e apprezzo il tuo desiderio di aiutare. Non è passato inosservato e vi ringrazio per questo.

Grazie.

 

Ciao a tutti,

In questo codice mi rendo conto che non posso cambiare nessuno dei prezzi del lotto....perché è così...

per tutto il tempo in cui ho provato a farlo ho avuto un errore....

Grazie...e aspetto la tua risposta....

Ottimo lavoro WhooDoo22!!!! ;)

Motivazione: