Guarda come scaricare robot di trading gratuitamente
Ci trovi su Facebook!
Unisciti alla nostra fan page
Script interessante?
Pubblica il link!
lasciare che altri lo valutino
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Visualizzazioni:
341
Valutazioni:
(31)
Pubblicato:
2021.11.10 17:29
Freelance MQL5 Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance


    L'expert Moving Average per formare segnali di trade utilizza una media mobile. L'apertura e la chiusura delle posizioni avvengono quando la media mobile incontra il prezzo alla barra appena formata (indice della barra uguale a 1). La dimensione del lotto sarà ottimizzata secondo uno speciale algoritmo.

    L'expert advisor analizza la concomitanza tra la media mobile e il grafico dei prezzi di mercato. Il controllo viene esguito tramite la funzione CheckForOpen(). Se la media mobile incontra la barra in modo tale che la prima sia superiore al prezzo di apertura ma inferiore al prezzo di chiusura, verrà aperta la posizione BUY. Se la media mobile incontra la barra in modo tale che la prima sia inferiore al prezzo di apertura ma superiore al prezzo di chiusura, verrà aperta la posizione SELL.

    Il Money Management utilizzato nell'expert è molto semplice, ma efficace: il controllo sul volume di ogni posizione viene eseguito in base ai risultati delle transazioni precedenti. Questo algoritmo è implementato nella funzione LotsOptimized(). La dimensione del lotto di base è calcolata sulla base del rischio massimo ammissibile:

    lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);

    Il parametro MaximumRisk visualizza il rischio in percentuale per ogni transazione. Di solito ha un valore compreso tra 0,01 (1%) e 1 (100%). Per esempio, se il margine libero (AccountFreeMargin) è uguale a $20,500 e le regole del capital management prescrivono di utilizzare un rischio del 2%,la dimensione del lotto di base sarà data da 20500 * 0.02 / 1000 = 0.41. È molto importante controllare l'accuratezza della dimensione del lotto e normalizzare il risultato con i valori consentiti. Normalmente sono ammessi lotti frazionari con passo 0.1. Una transazione con volume di 0,41 non verrà eseguita. Per normalizzare, viene utilizzata la funzione NormalizeDouble() con precisione fino a 1 carattere dopo il punto. Ciò si traduce nel lotto base di 0,4. Il calcolo del lotto di base sulla base del margine libero consente di aumentare i volumi delle operazioni in base al successo del trading, ovvero di tradare con il reinvestimento. Questo è il meccanismo di base con la gestione obbligatoria del capitale per aumentare l'efficacia del trading.

    DecreaseFactor è la misura in cui la dimensione del lotto verrà ridotta dopo un trading non redditizio. Valori normali sono 2,3,4,5. Se le transazioni precedenti non sono state redditizie, i volumi successivi diminuiranno di un fattore DecreaseFactor per attendere il periodo non redditizio. Questo è il fattore principale nell'algoritmo di capital management. L'idea è molto semplice: se il trading sta avendo successo aumenta,l'expert lavora con il lotto base ottenendo il massimo profitto. Dopo la prima transazione non redditizia, l'esperto "ridurrà la velocità" fino a quando non verrà effettuata una nuova transazione positiva. L'algoritmo consente di disabilitare la "riduzione della velocità", per farlo è necessario specificare DecreaseFactor = 0. La somma delle ultime transazioni consecutive non redditizie viene calcolato nella cronologia delle transazioni. Il lotto base verrà ricalcolato su questa base:

    if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);

    Pertanto, l'algoritmo consente di ridurre efficacemente il rischio che si verifica a seguito di una serie di transazioni non redditizie. Alla fine della funzione la dimensione del lotto è obbligatoriamente verificata per la dimensione minima consentita perché i calcoli effettuati in precedenza possono portare a lotto = 0 :

    if(lot<0.1) lot=0.1;

    L'esperto è principalmente destinato a lavorare con il periodo giornaliero e nella modalità di test - per avere i prezzi di chiusura. Traderà solo all'apertura di un nuova barra, ecco perché non è necessaria la modalità every-tick.

I risultati dei test sono rappresentati nel report.

Strategy Tester Report

Moving Average


SimboloEURUSD (Euro vs US Dollar)
Periodo1 Hour (H1) 2003.01.08 00:00 - 2003.11.25 00:00
ModelloEvery tick (basato su tutti i timeframe minimi disponibili con interpolazione frattale di ogni tick)
ParametriLots=0.1; MaximumRisk=0.01; DecreaseFactor=1; MovingPeriod=16; MovingShift=11;

Barre testate19371Tick modellati656918Qualità del modello25.00%

Deposito iniziale10000.00



Profitto totale netto1695.20Profitto maggiore4293.20Perdita maggiore-2598.00
Fattore di profitto1.65Guadagno atteso10.80

Drawdown assoluto40.35Drowdown massimo (%)318.50 (3.0%)


Trade totali157Posizioni corte (vincenti %)73 (26.03%)Posizioni lunghe (vincenti %)84 (32.14%)

Trade profittevoli (% del totale)46 (29.30%)Trade perdenti (% del totale)111 (70.70%)
Il più grandetrade in profitto262.55trade perdente-91.00
Mediatrade in profitto93.33trade perdente-23.41
Massimovittorie consecutive (profitto in denaro)2 (387.15)perdite consecutive (perdita in denaro)7 (-287.25)
Massimaleprofitti consecutivi (conto delle vittorie)387.15 (2)perdite consecutive (conto delle perdite)-287.25 (7)
Mediavincite consecutive1perdite consecutive3

Tradotto dal russo da MetaQuotes Ltd.
Codice originale https://www.mql5.com/ru/code/7927

Invio Ordine Pendente Invio Ordine Pendente

Lo script invia un ordine pendente SELL STOP con data di espirazione e stampa il numero del ticket.

Modifica Ordine Pendente Modifica Ordine Pendente

Modifica Ordine Pendente - script che sceglie il primo ordine pendente nella lista, stampa i dati dell'ordine pendente selezionato, lo modifica e ne stampa i dati dopo la modifica.

Convertitore di periodo Convertitore di periodo

E' designato per creare un periodo non standard del simbolo basato sull'uso di un periodo standard.

Convertitore di periodo Convertitore di periodo

Utilizza questo script per creare un timeframe personale non standard.