Guarda come scaricare robot di trading gratuitamente
Ci trovi su Facebook!
Unisciti alla nostra fan page
Unisciti alla nostra fan page
Ti è piaciuto lo script? Provalo nel Terminale MetaTrader 5
Code Block for "Trailing Stop" based on current market price. (Ask / Bid) - sistema esperto per MetaTrader 5
- Visualizzazioni:
- 66
- Valutazioni:
- Pubblicato:
-
Hai bisogno di un robot o indicatore basato su questo codice? Ordinalo su Freelance Vai a Freelance
Questo blocco di codice funziona se si utilizza uno Stop Loss o meno.
Requisiti
- È necessario includere "Trade.mqh" per avere accesso alla classe CTrade che consente di lavorare con posizioni e ordini.
#include <Trade\Trade.mqh> // <<------------------------------------------ Includere questo "Trade.mqh" per accedere alla classe CTrade
- È necessario impostare un parametro di input per regolare la distanza di trailing come si desidera. Non è necessario, ma è comodo.
input double Traling_Step = 3.0;
- È necessario definire un'istanza della classe CTrade, il cui nome può essere qualsiasi. Sarebbe meglio inserirla dopo il gestore dell'evento OnInt .
- Quindi è necessario creare un'istruzione if per verificare se una posizione è in corso al momento. Questa istruzione richiama la funzione Check_TrailingStop(); per ogni tick. Questo è importante perché l'EA deve seguire un percorso netto e regolare. Ricordate di inserire questa istruzione all' inizio del gestore dell'evento OnTick per funzionare correttamente.
//+------------------------------------------------------------------+ //| Funzione di inizializzazione dell'esperto| //+------------------------------------------------------------------+ int OnInit() { //--- creare il timer EventSetTimer(60); //--- return(INIT_SUCCEEDED); } CTrade trade; // <<------------------------------------------ Dichiarare la calss "CTrade". è possibile sostituire "trade" con un nome qualsiasi.
void OnTick() { if(PositionsTotal() > 0) // chiama la funzione di trailing stop per ogni tick se ci sono posizioni in corso. { Check_TralingStop(); } }
- È necessario dichiarare una funzione personalizzata chiamata Check_TrailingStop(); ( in questo caso) per fare il resto. Si può usare il nome che si desidera.
- La funzione personalizzata esegue un loop di tutte le posizioni aperte e le traccia alla distanza desiderata.
void Check_TralingStop() { int totalPositions = PositionsTotal(); for(int count =0; count < totalPositions; count++) { ulong TicketNo = PositionGetTicket(count); // Ottenere il numero del biglietto di posizione utilizzando l'"indice" della posizione. if(PositionSelectByTicket(TicketNo)) // Selezionare una posizione utilizzando il numero di biglietto (abbiamo già scelto il numero di biglietto). { if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // Controllare la posizione Tipo. { double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); // <<-------------------Raccogliere la posizione attuale Stop Loss double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol,SYMBOL_BID); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(bidPrice - (Traling_Step * Point()),_Digits); if(stopLoss < openPrice) // Nessun stop loss è vero. { if(bidPrice > openPrice && trailingLevel > openPrice) // Viene eseguito solo una volta per posizione. Imposta il primo SL. trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificare il trailing stop utilizzando "CTrade.trade". } if(bidPrice > openPrice && trailingLevel > stopLoss) // verifica che il livello di trailing sia superiore al livello precedente. { trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificare il trailing stop utilizzando "CTrade.trade". } } if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL) { double openPrice = PositionGetDouble(POSITION_PRICE_OPEN); double stopLoss = PositionGetDouble(POSITION_SL); double takeProfit = PositionGetDouble(POSITION_TP); double bidPrice = SymbolInfoDouble(_Symbol,SYMBOL_BID); double askPrice = SymbolInfoDouble(_Symbol,SYMBOL_ASK); ulong ticket = PositionGetTicket(count); double trailingLevel = NormalizeDouble(askPrice + (Traling_Step * Point()),_Digits); if(stopLoss < openPrice) // Nessun stop loss è vero. { if(askPrice < openPrice && trailingLevel < openPrice) // Viene eseguito solo una volta per posizione. Imposta il primo SL. trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificare il trailing stop utilizzando "CTrade.trade". } if(askPrice < openPrice && trailingLevel < stopLoss) // verifica che il livello di trailing sia superiore al livello precedente. { trade.PositionModify(ticket,trailingLevel,takeProfit); // Modificare il trailing stop utilizzando "CTrade.trade". } } } } }
Tradotto dall’inglese da MetaQuotes Ltd.
Codice originale https://www.mql5.com/en/code/49021
StoDiv
Un tipico indicatore di segnale semaforico che utilizza l'oscillatore stocastico e i frattali.
ComprareVendere
Questo indicatore mostra l'ultima "linea di difesa" della tendenza attuale. Il cambiamento di tendenza è indicato da quadrati colorati e la direzione della tendenza da punti colorati.
Simple Code for Detect A "New Bar or New Candle " Received
Questo blocco di codice rileva una Nuova barra o una Nuova candela quando viene ricevuta.
Correlazione di rango Ultra Spearman
Questo indicatore di tendenza del segnale si basa sulle letture dell'indicatore personalizzato Spearman Rank Correlation e sull'analisi della tendenza delle sue linee di segnale multiple.