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
Ciao a tutti,
E' da molto tempo che non venivo qui...
Sto lavorando su un'idea di EA, ho bisogno di aggiungere un indicatore ma non so come includerlo nell'EA, puoi aiutarmi per favore?
L'indicatore è Slope Directional Line, voglio che funzioni nel grafico giornaliero e che attivi gli ordini nel grafico TF inferiore, il codice dell'indicatore è:
//+------------------------------------------------------------------+
//| slope directional line D.L.M.mq4 |
//| DANIEL LUCHINGER 2014 ||
//| MQL5: trading forex automatizzato, tester di strategie e indicatori personalizzati con MetaTrader ||
//+------------------------------------------------------------------+
#proprietà indicator_chart_window
#proprietà indicator_buffers 2
#proprietà indicator_color1 Blue
#proprietà indicator_width1 3
#proprietà indicatore_colore2 Rosso
#proprietà indicator_width2 3
//---- parametri di ingresso
extern int period=14;
extern int method=3; // MODE_SMA
extern int price=0; // PRICE_CLOSE
//---- buffer
double Uptrend[]
double Dntrend[]
double ExtMapBuffer[]
//+------------------------------------------------------------------+
//|Funzione di inizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(3);
SetIndexBuffer(0, Uptrend);
SetIndexBuffer(1, Dntrend);
SetIndexBuffer(2, ExtMapBuffer);
ArraySetAsSeries(ExtMapBuffer, true);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,3);
IndicatoreNomeCorto("Linea di direzione della pendenza");
return(0);
}
//+------------------------------------------------------------------+
//| Funzione personalizzata di deinizializzazione dell'indicatore |
//+------------------------------------------------------------------+
int deinit(){return(0);}
double WMA(int x, int p)
{
return(iMA(NULL, 0, p, 0, metodo, prezzo, x));
}
//+------------------------------------------------------------------+
//| Funzione di iterazione dell'indicatore personalizzato |
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars < 0)
return(-1);
int x = 0;
int p = MathSqrt(periodo);
int e = Bars - counted_bars + periodo + 1;
doppio vect[], trend[];
se(e > Bars)
e = Bars;
ArrayResize(vect, e);
ArraySetAsSeries(vect, true);
ArrayResize(trend, e);
ArraySetAsSeries(trend, true);
for(x = 0; x < e; x++)
{
vect[x] = 2*WMA(x, periodo/2) - WMA(x, periodo);
}
for(x = 0; x < e-periodo; x++)
ExtMapBuffer[x] = iMAOnArray(vect, 0, p, 0, metodo, x);
for(x = e-periodo; x >= 0; x--)
{
trend[x] = trend[x+1];
se (ExtMapBuffer[x]> ExtMapBuffer[x+1]) trend[x] =1;
se (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1;
se (trend[x]>0)
{ Uptrend[x] = ExtMapBuffer[x];
se (trend[x+1]<0) Uptrend[x+1]=ExtMapBuffer[x+1];
Dntrend[x] = EMPTY_VALUE;
}
altrimenti
se (trend[x]<0)
{
Dntrend[x] = ExtMapBuffer[x];
se (trend[x+1]>0) Dntrend[x+1]=ExtMapBuffer[x+1];
Uptrend[x] = EMPTY_VALUE;
}
}
return(0);
---------------
--------------
Ho codificato nel modo seguente
double UpTrend = iCustom(NULL,1440, "slope directional line D.L.M",20,3,0,1); // dove 0 = UptrendBuffer
double DnTrend = iCustom(NULL,1440, "slope directional line D.L.M",20,3,1,1); // dove 1 = DntrendBuffer
doppio _sl = 0,_tp = 0;
{
if(haMode == 0 || haMode == 1)
{
if(UpTrend)
{label("Condizione LONG OK");
if(Close[0] >= srDown && Close[0] < srUp)
//if(StopLoss > 0) _sl = Ask - StopLoss;
_sl = srDownHT-StopLossShift;
if(TakeProfit > 0) _tp = Ask + TakeProfit;
if(tt && orders<MaxTrades)
{
openOrder(getLots(),MagicNumber,OP_BUY, _sl,_tp);
}
}}
}
}
Qualcuno può correggermi per favore perché sono sicuro che questo non funziona
Grazie
Daniel1983
Grazie mille Mistertools per il tuo aiuto.
Ma ...
Quello che voglio fare è applicare una media mobile al #_FullSSA_normalize corretto mtf nmc.
Questo funziona senza problemi quando lo faccio sulla M5 in modo normale con l'aiuto della MA di MT4.
E' l'unica cosa che uso da MT4 ...
Sulla M1 a volte funziona, altre volte no. Potrebbe avere a che fare con le impostazioni.
Basta guardare l'immagine, l'SSA è ok, ma non la MA ...
Ho provato a farlo da solo, ma è troppo complicato per me, anche se ho avuto solo due errori, dopo il 'mio lavoro' ...
Devo essere stato fortunato, ma tuttavia, l'SSA ha funzionato senza problemi, ma il MA non si è visto da nessuna parte.
Naturalmente, l'SSA è un'elite ....
che ho comprato qualche tempo fa e ne vale la pena ...
Ciao a tutti,
È da molto tempo che non venivo qui...
Sto lavorando su un'idea di EA, ho bisogno di aggiungere un indicatore ma non so come includerlo nell'EA, potete aiutarmi per favore?
L'indicatore è Slope Directional Line, voglio che funzioni nel grafico giornaliero e che attivi gli ordini nel grafico TF inferiore, il codice dell'indicatore è:
//+------------------------------------------------------------------+
//| slope directional line D.L.M.mq4 |
//| DANIEL LUCHINGER 2014 ||
//| MQL5: trading forex automatizzato, tester di strategie e indicatori personalizzati con MetaTrader ||
//+------------------------------------------------------------------+
#proprietà indicator_chart_window
#proprietà indicator_buffers 2
#proprietà indicator_color1 Blue
#proprietà indicator_width1 3
#proprietà indicatore_colore2 Rosso
#proprietà indicator_width2 3
//---- parametri di ingresso
extern int period=14;
extern int method=3; // MODE_SMA
extern int price=0; // PRICE_CLOSE
//---- buffer
double Uptrend[]
double Dntrend[]
double ExtMapBuffer[]
//+------------------------------------------------------------------+
//|Funzione di inizializzazione dell'indicatore personalizzata
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(3);
SetIndexBuffer(0, Uptrend);
SetIndexBuffer(1, Dntrend);
SetIndexBuffer(2, ExtMapBuffer);
ArraySetAsSeries(ExtMapBuffer, true);
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,3);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,3);
IndicatoreNomeCorto("Linea di direzione della pendenza");
return(0);
}
//+------------------------------------------------------------------+
//| Funzione personalizzata di deinizializzazione dell'indicatore |
//+------------------------------------------------------------------+
int deinit(){return(0);}
double WMA(int x, int p)
{
return(iMA(NULL, 0, p, 0, metodo, prezzo, x));
}
//+------------------------------------------------------------------+
//| Funzione di iterazione dell'indicatore personalizzato |
//+------------------------------------------------------------------+
int start()
{
int counted_bars = IndicatorCounted();
if(counted_bars < 0)
return(-1);
int x = 0;
int p = MathSqrt(periodo);
int e = Bars - counted_bars + periodo + 1;
doppio vect[], trend[];
se(e > Bars)
e = Bars;
ArrayResize(vect, e);
ArraySetAsSeries(vect, true);
ArrayResize(trend, e);
ArraySetAsSeries(trend, true);
for(x = 0; x < e; x++)
{
vect[x] = 2*WMA(x, periodo/2) - WMA(x, periodo);
}
for(x = 0; x < e-periodo; x++)
ExtMapBuffer[x] = iMAOnArray(vect, 0, p, 0, metodo, x);
for(x = e-periodo; x >= 0; x--)
{
trend[x] = trend[x+1];
se (ExtMapBuffer[x]> ExtMapBuffer[x+1]) trend[x] =1;
se (ExtMapBuffer[x]< ExtMapBuffer[x+1]) trend[x] =-1;
se (trend[x]>0)
{ Uptrend[x] = ExtMapBuffer[x];
se (trend[x+1]<0) Uptrend[x+1]=ExtMapBuffer[x+1];
Dntrend[x] = EMPTY_VALUE;
}
altrimenti
se (trend[x]<0)
{
Dntrend[x] = ExtMapBuffer[x];
se (trend[x+1]>0) Dntrend[x+1]=ExtMapBuffer[x+1];
Uptrend[x] = EMPTY_VALUE;
}
}
return(0);
---------------
--------------
Ho codificato nel modo seguente
double UpTrend = iCustom(NULL,1440, "slope directional line D.L.M",20,3,0,1); // dove 0 = UptrendBuffer
double DnTrend = iCustom(NULL,1440, "slope directional line D.L.M",20,3,1,1); // dove 1 = DntrendBuffer
doppio _sl = 0,_tp = 0;
{
if(haMode == 0 || haMode == 1)
{
if(UpTrend)
{label("Condizione LONG OK");
if(Close[0] >= srDown && Close[0] < srUp)
//if(StopLoss > 0) _sl = Ask - StopLoss;
_sl = srDownHT-StopLossShift;
if(TakeProfit > 0) _tp = Ask + TakeProfit;
if(tt && orders<MaxTrades)
{
openOrder(getLots(),MagicNumber,OP_BUY, _sl,_tp);
}
}}
}
}
Qualcuno può correggermi per favore perché sono sicuro che questo non funziona
Grazie
Daniel1983Non funziona semplicemente perché la linea direzionale di pendenza è un indicatore di riverniciatura. Prendi una qualsiasi media Hull normale ("slope directional line" è una media Hull) e tutto sarà più facile
Grazie Mladen, apprezzo il tuo tempo.
Ho trovato attraverso i post sull'HMA, uno che hai creato con il controllo della velocità,
vorrei provarlo nell'EA, la stessa idea che volevo con l'indicatore Slope Directional,
ma con questo indicatore HMA che hai postato "Hull Moving Averages 2.0 &SR lines"
come sarebbe il codice per questo per farlo funzionare nel mio EA?
Ho scritto
input int IndicatorTF = 1440 //(indicatore in TimeFrame giornaliero)
input int HMAPeriod = 35; //(permettimi di cambiare questo parametro)
input ENUM_HMAPrice = PRICE_CLOSE; //(permettimi di cambiare questo parametro)
input int HMASpeed = 2.0; //(permettimi di cambiare questo parametro)
double trendUp = iCustom(Symbol(),IndicatorTF, "Hull moving average 2.0 & sr lines",HMAPeriod,ENUM_HMAPrice,HMASpeed,0,0);
double trendDn = iCustom(Symbol(),IndicatorTF, "Hull moving average 2.0 & sr lines",HMAPeriod,ENUM_HMAPrice,HMASpeed,1,0);
se(trendUp > 0)
{
Aprire Comprare
}
Il codice dell'indicatore è:
//+------------------------------------------------------------------+
//| media mobile di Hull ||
//| mladen |
//+------------------------------------------------------------------+
#proprietà copyright"www.forex-tsd.com"
#property link "www.forex-tsd.com"
#proprietà indicator_chart_window
#proprietà indicator_buffers 3
#proprietà indicator_color1 LimeGreen
#proprietà indicator_color2 PaleVioletRed
#proprietà indicator_color3 PaleVioletRed
#proprietà indicator_width1 2
#property indicator_width2 2
#proprietà indicator_width3 2
//
//
//
//
//
extern string TimeFrame = "Current time frame";
extern int HMAPeriod = 35;
extern int HMAPrice = PRICE_CLOSE;
extern double HMASpeed = 2.0;
extern bool LinesVisible = false;
extern int LinesNumber = 5;
extern color ColorUp = LimeGreen;
extern color ColorDown = PaleVioletRed;
extern string UniqueID = "HullLines1
extern bool alertsOn = false;
extern bool alertsOnCurrent = true;
extern bool alertsMessage = true;
extern bool alertsSound = false;
extern bool alertsEmail = false;
//
//
//
//
//
doppio hma[];
doppio hmada[]
doppio hmadb[];
doppio lavoro[];
doppio trend[];
int HalfPeriod;
int HullPeriod;
stringa indicatorFileName;
bool returnBars;
bool calculateValue;
int timeFrame;
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int init()
{
IndicatorBuffers(5);
SetIndexBuffer(0,hma);
SetIndexBuffer(1,hmada);
SetIndexBuffer(2,hmadb);
SetIndexBuffer(3,trend);
SetIndexBuffer(4,lavoro);
//
//
//
//
//
HMAPeriod = MathMax(2,HMAPeriod);
HalfPeriod = MathFloor(HMAPeriod/HMASpeed);
HullPeriod = MathFloor(MathSqrt(HMAPeriod));
indicatorFileName = WindowExpertName();
calculateValue = TimeFrame=="calculateValue"; if (calculateValue) { return(0); }
returnBars = TimeFrame=="returnBars"; if (returnBars) { return(0); }
timeFrame = stringToTimeFrame(TimeFrame);
//
//
//
//
//
IndicatorShortName(timeFrameToString(timeFrame)+" HMA ("+HMAPeriod+")");
return(0);
}
void deinit()
{
deleteLines();
}
void deleteLines()
{
int lookForLength = StringLen(UniqueID);
for (int i= ObjectsTotal()-1; i>=0; i--)
{
string name = ObjectName(i);
if (StringSubstr(name,0,lookForLength)==UniqueID) ObjectDelete(name);
}
}
//------------------------------------------------------------------
//
//------------------------------------------------------------------
//
//
//
//
//
int start()
{
int i,counted_bars = IndicatorCounted();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
int limit=MathMin(Bars-counted_bars,Bars-1);
if (returnBars) { hma[0] = MathMin(limit+1,Bars-1); return(0); }
//
//
//
//
//
if (calculateValue || timeFrame == Period())
{
if (trend[limit] == -1) CleanPoint(limit,hmada,hmadb);
for(i=limite; i>=0; i--) work = 2.0*iMA(NULL,0,HalfPeriod,0,MODE_LWMA,HMAPrice,i)-iMA(NULL,0,HMAPeriod,0,MODE_LWMA,HMAPrice,i);
for(i=limite; i>=0; i--)
{
hma = iMAOnArray(work,0,HullPeriod,0,MODE_LWMA,i);
hmada = EMPTY_VALUE;
hmadb = EMPTY_VALUE;
tendenza = tendenza;
se (hma > hma) trend = 1;
se (hma < hma) trend = -1;
se (trend == -1) PlotPoint(i,hmada,hmadb,hma);
}
deleteLines();
se (LineeVisibili)
{
int k = 0;
for (i=0; i<Bars && k<Numero linee; i++)
se (trend!=trend)
{
string name = UniqueID+(string)Time;
ObjectCreate(name,OBJ_TREND,0,Time,hma,Time+Period()*60,hma);
se (tendenza==1)
ObjectSet(nome,OBJPROP_COLOR,ColorUp);
altrimenti ObjectSet(nome,OBJPROP_COLOR,ColorDown);
k++;
}
}
manageAlerts();
return(0);
}
//
//
//
//
//
limit = MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,indicatorFileName, "returnBars",0,0)*timeFrame/Period());
if (trend[limit]==-1) CleanPoint(limit,hmada,hmadb);
for (i=limite; i>=0; i--)
{
int y = iBarShift(NULL,timeFrame,Time);
trend = iCustom(NULL,timeFrame,indicatorFileName, "calculateValue",HMAPeriod,HMAPrice,HMASpeed,LinesVisible,LinesNumber,ColorUp,ColorDown,UniqueID,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsEmail,3,y);
hma = iCustom(NULL,timeFrame,indicatorFileName, "calculateValue",HMAPeriod,HMAPrice,HMASpeed,LinesVisible,LinesNumber,ColorUp,ColorDown,UniqueID,alertsOn,alertsOnCurrent,alertsMessage,alertsSound,alertsEmail,0,y);
hmada = VUOTO_VALORE;
hmadb = VUOTO_VALORE;
}
for (i=limit;i>=0;i--) if (trend==-1) PlotPoint(i,hmada,hmadb,hma);
return(0);
}
//+-------------------------------------------------------------------
//|
//+-------------------------------------------------------------------
//
//
//
//
//
void manageAlerts()
{
se (alertsOn)
{
se (avvisiOnCurrent)
int whichBar = 0;
altrimenti qualeBar = 1;
se (trend[qualeBar] != trend[qualeBar+1])
{
se (trend[qualeBar] == 1) doAlert(qualeBar, "up");
se (trend[whichBar] == -1) doAlert(whichBar, "down");
}
}
}
//
//
//
//
//
void doAlert(int forBar, string doWhat)
{
static string previousAlert="niente";
static datetime previousTime;
messaggio di stringa;
if (previousAlert != doWhat || previousTime != Time[forBar]) {
previousAlert = doWhat;
previousTime = Time[forBar];
//
//
//
//
//
message = Symbol()+" "+timeFrameToString(Period())+" a "+TimeToStr(TimeLocal(),TIME_SECONDS)+" HMA trend cambiato a "+doWhat;
if (alertsMessage) Alert(message);
if (alertsEmail) SendMail(Symbol()+" HMA ",message);
se (avvisiSuono) PlaySound("avviso2.wav");
}
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
void CleanPoint(int i,double& first[],double& second[])
{
if ((second != EMPTY_VALUE) && (second != EMPTY_VALUE))
secondo = VUOTO_VALORE;
altrimenti
if ((first != EMPTY_VALUE) && (first != EMPTY_VALUE) && (first == EMPTY_VALUE))
first = EMPTY_VALUE;
}
//
//
//
//
//
void PlotPoint(int i,double& first[],double& second[],double& from[])
{
se (first == EMPTY_VALUE)
{
if (first == EMPTY_VALUE) {
first = from;
first = from;
secondo = EMPTY_VALUE;
}
altrimenti {
secondo = da;
secondo = da;
primo = EMPTY_VALUE;
}
}
else
{
first = from;
secondo = VUOTO_VALORE;
}
}
//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
//
//
//
//
//
stringa sTfTable[] = {"M1", "M5", "M15", "M30", "H1", "H4", "D1", "W1", "MN"};
int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};
//
//
//
//
//
int stringToTimeFrame(stringa tfs)
{
tfs = stringUpperCase(tfs);
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
se (tfs==sTfTable || tfs==""+iTfTable) return(MathMax(iTfTable,Period());
return(Periodo());
}
stringa timeFrameToString(int tf)
{
for (int i=ArraySize(iTfTable)-1; i>=0; i--)
se (tf==iTfTable) return(sTfTable);
return("");
}
//
//
//
//
//
stringa stringUpperCase(stringa str)
{
stringa s = str;
for (int length=StringLen(str)-1; length>=0; length--)
{
int tchar = StringGetChar(s, lunghezza);
if((tchar > 96 && tchar 223 && tchar < 256))
s = StringSetChar(s, lunghezza, tchar - 32);
else if(tchar > -33 && tchar < 0)
s = StringSetChar(s, lunghezza, tchar + 224);
}
return(s);
}
Non è un problema di altri indicatori che interferiscono (a meno che tu non stia usando più istanze di quello stesso indicatore sullo stesso grafico). In questo caso può accadere perché quell'indicatore non è scritto per essere usato come indicatore multi istanza sullo stesso grafico
Ciao MLaden , grazie mille ma non è un caso in cui sto usando più di un'istanza su un grafico, solo una. solo le linee si stanno spostando.
se il suo non è ovvio non ti preoccupare manterrò come è, grazie per il tuo input! buona giornata...
zigflip
Ciao MLaden , grazie mille ma non è un caso in cui sto usando più di un'istanza su un grafico, solo una. solo le linee si stanno spostando.
se non è ovvio non preoccupatevi, lo terrò così com'è, grazie per il vostro input! buona giornata...
zigflipHo provato quello che ho postato e non si spostavano
Provalo, forse aiuta
Come faccio a chiamare un indicatore HMA in un EA?
doppio (NULL,0, "HMA",??????)
E le condizioni sono
if(trendUp) allora compra, o if(trendUp =1) allora compra o qualcosa del genere?
grazie
Come posso chiamare un indicatore HMA in un EA?
doppio (NULL,0, "HMA",??????)
E le condizioni sono
if(trendUp) allora compra, o if(trendUp =1) allora compra o qualcosa del genere?
grazieDipende dai parametri degli indicatori, ma devi usare iCustom() per questo
Molte più informazioni con alcuni esempi si possono trovare qui: https: //www.mql5.com/en/forum/173108
Dipende dai parametri degli indicatori, ma devi usare iCustom() per questo Molte più informazioni con parecchi esempi puoi trovare qui: https: //www.mql5.com/en/forum/173108
Grazie per avermi guidato, sono ancora confuso, ho trovato un indicatore HMA simile al codice della linea di pendenza, è "HMA_Russian_Color", ma ho ancora problemi con le condizioni, per filtrare la tendenza all'acquisto dalla tendenza alla vendita.
Ho scritto
double Uptrend = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,0); // dove ultimo 0 = UptrendBuffer
double Dntrend = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,1); // dove ultimo 1 = DntrendBuffer
//periodo = 20 / tipo = 3 / prezzo = 0 è corretto?
if(Uptrend) //come faccio a scrivere questo?
{
Aprire Acquista
}
Ordini Buy ancora aperto mentre HMA downtrend o colore rosso ...
Per favore correggetemi, e o aiutatemi a sistemare questo...
Grazie
Grazie per avermi guidato, sono ancora confuso, ho trovato un indicatore HMA simile al codice della linea di pendenza, è "HMA_Russian_Color", ma ho ancora problemi con le condizioni, per filtrare il trend di acquisto dal trend di vendita.
ho scritto
double Uptrend = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,0); // dove last 0 = UptrendBuffer
double Dntrend = iCustom(Symbol(),0, "HMA_Russian_Color",20,3,0,1); // dove ultimo 1 = DntrendBuffer
//periodo = 20 / tipo = 3 / prezzo = 0 è corretto?
if(Uptrend) //come faccio a scrivere questo?
{
Aprire Acquista
}
Ordini Buy ancora aperto mentre HMA downtrend o colore rosso ...
Per favore correggetemi, e o aiutatemi a sistemare questo...
GraziePer il cambio di pendenza prova qualcosa come questo:
double previous1 = iCustom(Symbol(),0,"HMA_Russian_Color",20,3,0,1);
double previous2 = iCustom(Symbol(),0,"HMA_Russian_Color",20,3,0,2);
if (current>previous1 && previous1<previous2)
{
// slope changed to up
}
if (currentprevious2)
{
// slope changed to down
}