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
Scusa - È colpa mia che non mi sono spiegato bene. Guardo D1, 4Hr e infine 1Hr per le MA da separare a ventaglio (tra un sacco di altri filtri) - Una volta che sono tutte allineate, sull'H1 aspetterà fino a che una qualsiasi barra tira indietro alla 21 EMA UNA VOLTA, e poi da lì piazzerà un ordine sopra i massimi e uno stop sotto la 60 EMA - ATR.
Il pullback alla 21 EMA avviene solo una volta. Da lì, smetterà di cercare qualsiasi pullback al 21 EMA. Quello che dovrebbe fare, però, è assicurarsi che l'attuale ordine aperto PENDING sia esattamente aggiornato con i lotti, gli stop e i take profit DOPO ogni ora di chiusura. Tuttavia, non riesco a capire perché a volte funziona perfettamente e aggiorna l'ordine pendente dopo ogni chiusura H1, e altre volte no? Il motivo per cui l'ordine pendente si aggiorna è dovuto a ""if(OrderStopLoss() < iMA(NULL, 60, MA_Period, 0, 1, 0, 0) - ATR) ".
Se questo non è vero, allora non lo farà - TUTTAVIA, ci sono innumerevoli volte in cui questo è vero, eppure non cancellerà l'ordine e ne piazzerà uno nuovo con i nuovi valori?
Non sono sicuro che tu possa vedere qualcosa in quel codice sopra relativo al video? (Il primo codice che avete corretto). Spero che sia più chiaro?
Penso che dovrai farlo nel modo più duro e laborioso . . . stampare le variabili rilevanti, muoverti nel tempo nello Strategy Tester, tick per tick se necessario, verificando quali sono le variabili . . . poi se trovi che dovrebbero far succedere qualcosa e non lo fanno puoi concentrarti su quel codice.
E' relativamente facile individuare semplici problemi di sintassi nel codice di qualcun altro, è più difficile e richiede molto più tempo individuare errori nella codifica della loro strategia, per una cosa, per essere in grado di farlo la strategia deve essere compresa altrettanto bene, se non meglio, della persona che fa la codifica.
Una cosa che devo chiarirmi le idee è: questo codice qui, nel ciclo, come faccio ad assicurarmi che esegua la funzione OrderDelete() e che il ciclo venga eseguito su ogni chiusura H1? È perché ho questo all'"int start" che indica se il ciclo è fatto su base H1 o no? (Il "IsNewCandle()") ?
CheckForMATrade() viene chiamata una volta per ogni nuova barra, se stai lavorando su un grafico H1, sarà una volta all'inizio della nuova barra H1... il resto viene eseguito ogni tick.
Stai calcolando il valore ATR corretto, per l'inizio della nuova barra? Tenendo presente che hai appena iniziato la barra 0, vuoi davvero ottenere la MA basata sulla barra 0? Gli indicatori non sono il mio campo, quindi non pensare che stia dicendo che hai sbagliato, sto solo chiedendo
Sì, ho appena fatto una stampa per ricontrollare la matematica MA-ATR. E' corretto. Lo sto facendo sulla barra 1 (la barra H1 chiusa più recentemente). La matematica è corretta, solo che non credo che i calcoli vengano fatti coerentemente su OGNI barra H1 chiusa...
La MA non è sulla barra 1 però . . .
Un'ultima domanda, se non vi dispiace - sto ancora ricevendo questo stupido errore 1 di modifica dell' ordine! Risulta che viene da qui quando lo stampo? Qualche idea?
Buon punto - grazie :) Credo di sapere perché non cancella l'ordine... Se l'OrderStopLoss NON è > della MA-ATR, allora non fa nulla... Quindi ha senso... Solo che a volte lo guardo ed è come se non volesse cancellare l'ordine e metterne uno nuovo quando dovrebbe?
Un'ultima domanda, se non vi dispiace - sto ancora ricevendo questo stupido errore 1 di modifica dell'ordine! Risulta che viene da qui quando lo stampo? Qualche idea?
Questo è il problema . . . (simile per l'OP_SELL)
if( OrderStopLoss() < BuyStopPrice )
. . . e quando ottieni l'errore 1 è perché OrderStopLoss() == BuyStopPrice quindi stai modificando l'ordine per avere lo stesso valore di StopLoss, da cui l'errore 1, quindi ora ti stai chiedendo come da un lato OrderStopLoss() == BuyStopPrice e dall'altro OrderStopLoss() < BuyStopPrice
Hai seguito il link nel post e lo hai letto fino a farti sanguinare gli occhi? Scommetto che non l'hai fatto... https://www. mql5.com/en/forum/146380 se continui ad ignorare questo problema, continuerà a coglierti in fallo e continuerai a perdere tempo... vieni a capo della questione, comprendila, non soffrirne più, sii felice
Ok, rileggerò tutto di nuovo - tornando al problema con il video allegato, il modo in cui penso di averlo risolto è qui sotto, MA non funziona sul lato Buy? Per qualche motivo, non viene attivata nessuna operazione. Tuttavia sul lato vendita, funziona ESATTAMENTE come voglio io?
Tutto è ESATTAMENTE invertito per il lato di acquisto. Tutte quelle dichiarazioni if sono solo medie mobili. La linea specifica che ho cambiato è "triggerBarTime+H1_high>= ema21". Sul lato di acquisto sarebbe come = "triggerBarTime+H1_low<= ema21" - Se tolgo "triggerBarTime" allora funzionerà sia sugli ordini di acquisto che di vendita. Tuttavia, se lascio in "triggerBarTime" funzionerà perfettamente sul lato vendita (come dire, chiudere gli ordini su OGNI barra, ricalcolarlo perfettamente e piazzare un nuovo ordine con i parametri aggiustati!) MA non piazzerà NESSUN ordine e non tenterà di fare nulla sul lato dell'acquisto? Questa è una modifica molto importante che devo fare...
Guardate questo video: http: //screencast.com/t/uJu3nlNxAXDF - Speriamo che questo spieghi bene! :D
Non preoccupatevi se non potete aiutarmi :)