MetaTrader4
Guida al Trailing Stop con MagicNumber per MetaTrader 4
Il trailing stop è uno strumento fondamentale per i trader, poiché ci permette di spostare il nostro stop loss nell'area di profitto, garantendo così la sicurezza delle nostre operazioni in modo automatico.Iniziamo a scrivere il codice specificando i parametri di input per il trailing stop.input bool isTrailingStop = true; //Attivazione Trailing Stop
input int trailingStart = 15; //Inizio Trailing (pips)
input int trailingStep = 5; //Passo Trailing (pips)
input int MagicNumber = 0; //Numero MagicoVariabile Globale//Variabile Globale
double myPoint = 0.0;Quando eseguiamo questo EA, la funzione OnInit() verrà eseguita per la prima volta, e in questa funzione verranno validate e inizializzate le variabili di input.int OnInit()
{
if (isTrailingStop && trailingStart <= 0){
Alert ("Parametri non validi");
return(INIT_PARAMETERS_INCORRECT);
}
myPoint = GetPipPoint(Symbol());
return(INIT_SUCCEEDED);
}Ogni volta che si verifica un movimento di prezzo (tick) sul grafico dove è associato questo EA, verrà eseguita la funzione OnTick(). All'interno di OnTick() verrà chiamata la funzione setTrailingStop().void OnTick()
{
//---
setTrailingStop(MagicNumber);
}Funzione setTrailingStop()void setTrailingStop(int magicNumber=0){
if (isTrailingStop==false) return;
int tOrder = 0;
string pair = "";
double sl = 0.0, tp = 0.0;
pair = Symbol();
tOrder = OrdersTotal();
for (int i=tOrder-1; i>=0; i--){
bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){
if (OrderType() == OP_BUY){
if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice()
&& (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() )
)
{
sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits());
if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){
Print ("#", OrderTicket(), " errore aggiornamento sl");
}
}
}
if (OrderType() == OP_SELL){
if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice()
&& ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0)
)
{
sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() );
if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){
Print ("#", OrderTicket(), " errore aggiornamento sl");
}
}
}
} //fine if magicNumber
}//fine for
}Altre funzioni standard necessarie sono GetPipPoint() // Funzione GetPipPoint
double GetPipPoint(string pair)
{
double point= 0.0;
int digits = (int) MarketInfo(pair, MODE_DIGITS);
if(digits == 2 || digits== 3) point= 0.01;
else if(digits== 4 || digits== 5) point= 0.0001;
return(point);
}
Se hai domande, sentiti libero di lasciarle nei commenti oppure puoi unirti al nostro gruppo di condivisione t.me/codeMQL.Inoltre, non dimenticare di scaricare l'App SignalForex per supportare le tue operazioni e massimizzare i tuoi profitti.https://play.google.com/store/apps/details?id=com.autobotfx.signalforex
2021.03.30