[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 842
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ciao a tutti, recentemente mi sono interessato alle medie mobili. Ho trovato alcune combinazioni di medie mobili e condizioni di trading e ho deciso di controllare il mio TS, se è redditizio o meno, e ottimizzarlo, semmai. Ma il mio Expert Advisor non ha aperto accordi durante i test. Ho passato tutta la sera a cercare di capire la soluzione e ho deciso di chiedere a voi, cari programmatori. Per capire come funziona l'EA, spiegherò brevemente il mio TS: sul grafico con EMA(13) e EMA(55), se una barra ha attraversato EMA(13) e tutte le barre seguenti erano sopra/sotto EMA(13), allora toccando il prezzo con MA(13) si apre una posizione nella direzione delle barre precedenti (dopo l'attraversamento + almeno 9 e non più di 23). Take Profit 60 punti, Stop Loss = EMA(55) più meno cinque punti. Questa è in realtà l'intera strategia. Per una migliore illustrazione, ho postato un esempio:
Ed ecco il codice dell'Expert Advisor:
Se qualcuno può aiutare per favore. Vi darò anche l'EA stesso
Molte funzioni possono essere raccolte in un ciclo for per aprire, cambiare, chiudere posizioni, ecc.
Ecco un semplice esempio:
- Domanda: è corretto usare "break" piuttosto che "return" qui? C'è una differenza?
Molte funzioni possono essere raccolte in un ciclo for per aprire, cambiare, chiudere posizioni, ecc.
Ecco un semplice esempio:
- Domanda: è corretto usare "break" piuttosto che "return" qui? C'è una differenza?
Da https://docs.mql4.com/ru/basis/operators/break:
"L'istruzione break ferma l'esecuzione dello switch esterno annidato più vicino, while o for. Il controllo è dato all'operatore che segue quello che finisce".
Da https://docs.mql4.com/ru/basis/operators/return:
"L'istruzione return termina la funzione corrente e restituisce il controllo al programma chiamante".
Risposta: è corretto usare "break" qui.
Da https://docs.mql4.com/ru/basis/operators/break:
"L'operatore di interruzione termina l'esecuzione dell'operatore esterno annidato più vicino, while o for. Il controllo è dato all'operatore che segue quello che finisce".
Da https://docs.mql4.com/ru/basis/operators/return:
"L'operatore di ritorno termina la funzione corrente e restituisce il controllo al programma chiamante".
Risposta: è corretto usare "break" qui.
In realtà uso anch'io break, ma pensavo che return significasse un cambio di tick (e break no).
In realtà, finché l'ordine non cambia, ci sarà un cambio di tick, quindi affinché il tester simuli correttamente la situazione
è necessario usare il ritorno. Giusto?
Forse mi sbaglio ma vorrei capirlo.
In realtà uso anch'io break, ma pensavo che return significasse un cambio di tick (mentre break no).
In realtà, finché l'ordine non cambia, il cambio di tick si verifica e quindi il tester deve usare il ritorno per simulare correttamente la situazione
è necessario usare il ritorno. Giusto?
Forse mi sbaglio, ma voglio capire.
Leggiamo nella documentazione: "L'operatore di ritorno interrompe l'esecuzione della funzione corrente e restituisce il controllo al programma chiamante".
Se la funzione start() corrente, leggete di nuovo la documentazione:
https://docs.mql4.com/ru/runtime/start
"Quando arriva una nuova quotazione, viene eseguita la funzione start() degli Expert Advisors e degli indicatori personalizzati collegati. Se all'arrivo di una nuova quotazione viene eseguita la funzione start(), in esecuzione sulla quotazione precedente, allora la quotazione in arrivo sarà ignorata dall'Expert Advisor. Tutte le nuove citazioni, che arrivano durante l'esecuzione del programma, sono ignorate fino alla prossima esecuzione della funzione start(). Dopo di che la funzione start() sarà lanciata solo dopo l'arrivo della prossima nuova quotazione.
Leggere nella documentazione: "L'istruzione return termina la funzione corrente e restituisce il controllo al programma chiamante".
Se la funzione corrente è start(), leggete di nuovo la documentazione:
https://docs.mql4.com/ru/runtime/start
"Quando arrivano nuove quotazioni, la funzione start() viene eseguita per gli Expert Advisors e gli indicatori personalizzati collegati. Se all'arrivo di una nuova quotazione viene eseguita la funzione start(), in esecuzione sulla quotazione precedente, allora la quotazione in arrivo sarà ignorata dall'Expert Advisor. Tutte le nuove citazioni, che arrivano durante l'esecuzione del programma, sono ignorate fino alla prossima esecuzione della funzione start(). Dopo di che la funzione start() sarà lanciata solo dopo l'arrivo della prossima nuova quotazione.
Vorrei che lo mettessi in parole tue. Non capisco cosa intendi.
Nel tester, se for è terminato con break e qualche altra funzione lo segue, sarà eseguito nello stesso tick. Ma in realtà, diversi tick possono cambiare durante questo tempo (mentre l'ordine viene modificato). Ecco perché penso che il ritorno sia più realistico. Non è vero?
Avrei voluto che lo mettessi in parole tue. Non capisco cosa intendi.
Se for è terminato con break e seguito da qualche altra funzione, sarà eseguito nello stesso tick. Ma in realtà, diversi tick possono cambiare durante questo tempo (mentre l'ordine viene modificato). Ecco perché penso che il ritorno sia più realistico. Non è vero?
start() inizia all'inizio di un tick e potrebbe non essere finito all'inizio del tick successivo.
break termina per, e return termina la funzione. Se non ci sono operatori dopo for, non c'è differenza nell'usare for e return per questo algoritmo.
Ma ogni operatore ha il suo scopo. E l'uso involontario di un operatore è come un fucile da caccia scarico.
Di nuovo, nell'algoritmo del ciclo for, per qualche motivo non c'è bisogno di continuare l'esecuzione della funzione, possiamo usare return.
In altre parole, se l'algoritmo richiede una pausa nel ciclo, allora viene usata la pausa, anche se la funzione è ancora terminata dopo il ciclo.
start() inizia a lavorare all'inizio di un tick e il suo lavoro potrebbe non finire all'inizio del tick successivo.
break completa per, return completa la funzione. Se non ci sono operatori dopo for, non c'è differenza tra usare for e return per questo algoritmo.
Ma ogni operatore ha il suo scopo. E l'uso involontario di un operatore è come un fucile da caccia scarico.
Di nuovo, nell'algoritmo del ciclo for, per qualche motivo non c'è bisogno di continuare l'esecuzione della funzione, possiamo usare return.
In altre parole, se l'algoritmo ci richiede di interrompere il ciclo, mettiamo break, anche se la funzione termina comunque dopo il ciclo.
Mi è venuto in mente un pensiero, dato che tutto questo è stato pensato solo per il tester, possiamo (se necessario) fare quanto segue:
Grazie!
È venuta un'idea - dato che questo è stato iniziato solo per un tester, si potrebbe (se del caso) fare quanto segue:
Grazie!
è possibile