Home Trading Sistematico Post

Trader RSI e MFI Ottimizzati: L'Esperto per MetaTrader 4

Allegato
19392.zip (4.86 KB, Scarica 2 volte)

Ciao a tutti, trader! Oggi voglio condividere con voi un pezzo del mio sogno: avere un robot che si ottimizza da solo. Così sarei sicuro che sta sempre operando con i migliori valori. Questo è il mio modesto tentativo di rendere questa idea una realtà. L'esperto advisor allegato ottimizza i livelli di ipercomprato e ipervenduto utilizzati per effettuare operazioni. Spero che altri possano prendere questo concetto e ampliarlo per creare qualcosa di ancora più grande! Se lo fate, fatemelo sapere. E non dimenticate di valutare il mio robot usando le stelle qui sopra. Questa strategia è applicabile a qualsiasi coppia di valute e in qualsiasi timeframe, ovviamente con le impostazioni corrette.

Ci sono diverse impostazioni elencate per questo robot. Ho incluso alcune funzionalità extra con cui mi piace sperimentare. Buon divertimento!

Impostazioni

  • magic = 4376 - Numero unico per questo EA.
  • optomizingPeriods = 144 - Periodi di ottimizzazione (candele). Questo è il numero di candele su cui si desidera eseguire l'ottimizzazione. Ad esempio, se si utilizza un grafico orario e si sceglie 144, il robot guarderà indietro per 144 ore, che corrispondono a sei giorni.
  • inAggressive = false - Rendere l'expert aggressivo? Rischioso. La modalità aggressiva fa sì che l'expert advisor prenda operazioni in modo più audace. Invece di aspettare un incrocio dei livelli di ipercomprato o ipervenduto, in modalità aggressiva il robot eseguirà un acquisto semplicemente se gli acquisti sono stati più redditizi delle vendite, e viceversa.
  • inTradeReverse = false - Trading inverso. Il trading inverso cambierà la direzione delle tue operazioni.
  • inOneOrderAtATime = true - Solo un ordine aperto alla volta? Se vero, il robot avrà solo un ordine aperto alla volta; se falso, aprirà un numero illimitato di ordini in base alle condizioni di ingresso.
  • Lot_sizing_dynamic_invalidates_static - Solo uno spazio per separare la meccanica della dimensione del lotto dalle altre impostazioni.
  • Lots = 0.01 - Dimensione statica del lotto per gli ordini. Specifica la dimensione del lotto per i tuoi ordini usando un numero statico.
  • inUseDynamicLotSize = true - Utilizza la dimensione del lotto dinamica. Attiva la dimensione del lotto dinamica che verrà utilizzata invece di quella statica. Tuttavia, se la dimensione del lotto dinamica risulta essere non valida, il robot passerà alla dimensione del lotto statica.
  • inPercentageOfRisk = 2 - % di bilancio da rischiare su ogni operazione (2 = 2%). Quando si utilizza la dimensione del lotto dinamica, si specifica la dimensione del lotto come una percentuale del proprio bilancio. 2 equivale al 2 percento. Non è necessario inserire 0.02; se lo fai, la percentuale utilizzata sarà davvero molto piccola. La percentuale massima utilizzabile è del 10 percento.
  • Index_Indicator_Values - Solo uno spazio per separare i parametri dell'indicatore dell'indice dalle altre impostazioni.
  • indicator index = _RSI_ - Scegli quale indicatore utilizzare. Ti consente di scegliere tra l'Indice di Forza Relativa (RSI) o l'Indice di Flusso di Denaro (MFI).
  • IndicatorTopValue = 100 - Il valore massimo a cui traderai. Questo è il valore massimo a cui piazzerai un'operazione utilizzando il tuo indicatore. Lascia a 100 per considerare tutti i valori dell'indicatore.
  • IndicatorBottomValue = 0 - Il valore minimo a cui traderai. Questo è il valore minimo a cui piazzerai un'operazione utilizzando il tuo indicatore. Lascia a 0 per considerare tutti i valori dell'indicatore.
  • IndyTimeframe = PERIOD_CURRENT - Timeframe per l'indice. Seleziona quale timeframe desideri utilizzare per l'indicatore durante l'ottimizzazione e il trading. PERIOD_CURRENT significa semplicemente che utilizzerà il timeframe del grafico a cui alleghi l'expert advisor. Teoricamente, potresti utilizzare un timeframe per le tue valutazioni che sia diverso da quello a cui alleghi il robot; qui puoi cambiare questa impostazione.
  • inIndyPeriods = 14 - Periodo medio per calcoli dell'indice e dell'ATR. L'Average True Range (ATR) è utilizzato per impostare uno stop-loss o un take-profit dinamico nelle ulteriori opzioni di input qui sotto.
  • IndyAppPrice = PRICE_CLOSE - Prezzo applicato per l'indice, se necessario.
  • SL_TP_Dynamic_invalidates_static_values - Solo uno spazio per separare i parametri di stop loss e take profit dalle altre impostazioni.
  • iStoploss = 1000 - Valore statico dello stop loss in punti. I valori di stop loss sono in punti, che sono l'unità di movimento più piccola nel tuo terminale.
  • iTakeprofit = 2000 - Valore statico del take profit in punti. I valori di take profit sono in punti, che è l'unità di movimento più piccola nel tuo terminale.
  • input inDynamic = true - Utilizzare stop-loss e take-profit dinamici basati su un multiplo di ATR? Se attivi lo stop loss e il take profit dinamici, verranno utilizzati invece dello stop loss o del take profit statico. Le impostazioni dinamiche possono essere interessanti perché hanno la capacità di adattarsi al comportamento del mercato. Poiché l'ATR è più grande quando ci sono più movimenti, utilizzare le impostazioni dinamiche comporterebbe stop loss e take profit più ampi quando il mercato è in movimento veloce e impostazioni più ravvicinate quando il mercato si è rallentato.
  • inStoplossMultiple = 2 - SL dinamico = X * ATR (periodo medio). Lo stop loss sarà il valore che inserisci qui moltiplicato per l'Average True Range (ATR) utilizzando i periodi specificati nell'impostazione inIndyPeriods.
  • inTakeProfitMultiple = 7 - TP dinamico = X * ATR (periodo medio). Il take profit sarà il valore che inserisci qui moltiplicato per l'Average True Range (ATR) utilizzando i periodi specificati nell'impostazione inIndyPeriods.
  • Break_Even_Settings - Il padding deve essere inferiore al trigger. Un separatore per le impostazioni di Break Even. Funziona così: quando i punti in profitto superano l'importo del trigger, lo stop loss viene spostato a break even. Se hai un'impostazione di padding, lo stop loss viene spostato a break even + padding per bloccare l'importo di profitto del padding.
  • bUseBreakEven = true - Utilizzare Break Even (BE). Attiva l'uso del break even.
  • inTrigger = 200 - Se BE = [true] imposta i punti in profitto per attivare. Se l'operazione raggiunge questi punti in profitto, lo stop loss verrà spostato a break even.
  • inPadding = 100 - Punti di padding da aggiungere a BE devono essere inferiori al trigger. Questo è un numero di punti di profitto che desideri bloccare quando ci si sposta a break even; questo importo deve essere inferiore al trigger.

Come fa questo robot a ottimizzarsi da solo? Ecco il segreto: il robot testa ogni variabile nell'indicatore dell'indice due volte, quindi se un indicatore ha cento valori possibili, prende ogni valore e prova a effettuare un'operazione a quel valore guardando un certo numero di candele (optomizingPeriods). Poi valuta quel valore in base a quanto denaro avrebbe guadagnato o perso operando a quel valore. È un po' più complesso di così, ma stai leggendo questo per avere più dettagli, quindi ecco come funziona.

Le condizioni sono che quando un indicatore supera il valore di ipercomprato dall'alto, viene emesso un ordine di vendita, mentre viene emesso un ordine di acquisto quando un indicatore passa da sotto un valore di ipervenduto a sopra un valore di ipervenduto. Ad esempio, se l'ipercomprato è impostato a 80 e il valore del tuo indicatore era 85 nella candela prima dell'ultima e il valore dell'indicatore nell'ultima candela era 79, allora verrà emesso un ordine di vendita. 85 → 79 attraversa 80 verso il basso, ordine di vendita emesso. Se l'ipervenduto è 23, allora 19 → 27 verso l'alto creerebbe un ordine di acquisto.

Quindi, questo robot prende ogni valore per l'indicatore tra il IndicatorTopValue e il IndicatorBottomValue e esegue un test, più precisamente due test. Esegue un test di acquisto e uno di vendita su ogni valore. Ad esempio, se il valore massimo è 100, prende il valore massimo e lo sottopone a backtest sui optomizingPeriods, diciamo che sono 144 periodi. Verificherà se acquistare a 100 e vendere a 100 sarebbe stato redditizio negli ultimi 144 periodi. Se è redditizio, mantiene quell'importo in denaro.

Tenendo conto di quanti periodi stai facendo backtest, potrebbe aver avuto l'opportunità di acquistare più volte durante il backtest. Se raggiunge il take profit prima di colpire lo stop loss, avrà un risultato redditizio; se colpisce lo stop loss prima di raggiungere il take profit, avrà un risultato negativo. Dopo aver testato tutti i periodi in optomizingPeriods, somma tutti i risultati redditizi e tutte le perdite per mantenere un valore monetario. Poi l'indicatore passa al valore inferiore successivo e lo testa per la redditività.

Quando ha testato tutti i valori, seleziona quello con l'importo monetario più alto e lo sceglie come valore di acquisto ottimale. Successivamente, esegue controlli simili per il valore di vendita. Quando questo è completo, confronta il miglior valore di acquisto con il miglior valore di vendita e cerca un'operazione che sia la migliore tra le migliori. Ad esempio, dopo aver eseguito questa ottimizzazione, determina che il miglior acquisto sarebbe a 65 perché un acquisto a 65 ha generato il maggior profitto per gli acquisti, diciamo $329 nel backtesting, verificherà il valore che ha per il miglior valore di vendita, e se il miglior valore di vendita fosse 32 con un profitto di $530, il robot cercherà di vendere con l'indicatore che attraversa il livello 32, perché vendere è meglio che acquistare secondo i profitti generati nel backtest.


Idee per Espansione Futura

  • Trade su più coppie di valute contemporaneamente, possibilmente filtrate per dimensione dello spread.
  • Auto-apprendimento, in cui impara dalle proprie operazioni quali sono le migliori.
  • Il backtesting potrebbe includere anche un componente di forward testing.
  • Più indicatori tra cui scegliere.

Vi prego di lasciare i vostri suggerimenti e commenti e non dimenticate di valutare!

Disponibile ora nel marketplace di MetaTrader: https://www.mql5.com/en/market/product/26332


Aggiornato con parentesi mancanti nelle righe 137-142 per risolvere l'errore identificato nei commenti.

Post correlati

Commento (0)