Sto provando il mio primo indior e apprezzerei l'aiuto di codificatori MQL esperti.
Lo script seguente è derivato dallo script MACD di esempio e modificato per posizionare una freccia SU quando il MACD ha attraversato la linea zero dopo 3 barre consecutive sopra la linea zero e allo stesso modo una freccia GI?? se il MACD attraversa sotto la linea zero con 3 barre consecutive sotto zero.
Sto riscontrando problemi: non riesco a visualizzare alcuna freccia.
Se riesci a vedere dove sto andando fuori strada, questo sarebbe di grande aiuto.
Grazie
#property copyright Copyright © 2007, Systrader
#link proprietà http://www....
//---- ambienti interni
#property indior_separate_window
#property indior_buffers 4
#property indior_color1 Acqua
#property indior_color2 Rosso
#property indior_color3 Verde
#propertyindior_color4 Rosso
#property indior_width1 2
//---- parametri interni
esterno int FastEMA=12;
esterno int SlowEMA=26;
extern int SegnaleSMA=9;
//---- respingenti interni
doppio Macd[];
doppio segnale[];
//---- contatore
contatore int;
// ----------------------------------------------- -------------------
//| Funzione di inizializzazione interna personalizzata |
// ----------------------------------------------- -------------------
intero init()
{
//---- impostazioni disegno
SetIndexStyle(0,DRAW_HISTOGRAM);
ImpostaStileIndice(1,DRAW_LINE);
ImpostaIndiceFreccia(2,233);
ImpostaIndiceFreccia(3,234);
SetIndexDrawBegin(1,SegnaleSMA);
IndiorDigits(Cifre 1);
//---- mappatura dei buffer interni
SetIndexBuffer(0,Macd);
SetIndexBuffer(1,Segnale);
//---- nome per DataWindow ed etichetta della sottofinestra interna
IndiorShortName(MACDZC( FastEMA , SlowEMA , SignalSMA ));
SetIndexLabel(0,MACD);
SetIndexLabel(1,Segnale);
//---- inizializzazione eseguita
ritorno(0);
}
// ----------------------------------------------- -------------------
//| Medie mobili Convergenza/Divergenza |
// ----------------------------------------------- -------------------
int inizio()
{
limite int;
int counted_bars=IndiorCounted();
//---- verrà ricontata l'ultima battuta contata
if(counted_barsgt;0) counted_bars--;
limit=Bar-counted_bars;
//---- macd contato nel primo buffer
for(int i=0; ilt;limite; i )
Macd[i]=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);
//---- linea di segnale contata nel secondo buffer
for(i=0; ilt;limite; i )
Signal[i]=iMAOnArray(Macd,Bars,SignalSMA,0,MODE_SMA,i);
//---- Conta se 3 barre di macd sono sopra o sotto zero
contatore=0;
//inizia dalla 3a battuta per consentire il controllo delle 3 battute precedenti
for(int j=3; jlt;limite; j )
{
if (Macd[j] lt; 0) contatore--;
if (Macd[j] gt; 0) contatore ;
}
//conta se sono state viste 3 barre sopra la linea zero
if (contatore gt; 2) {
ImpostaStileIndice(2,DRAW_ARROW);
ObjectCreate(UpAlert, OBJ_ARROW, 0, High[j],0);
ObjectSet(UpAlert, OBJPROP_ARROWCODE, 74);
}
//conta se sono state viste 3 barre sotto la linea zero
if (contatore lt; -2)
{
ImpostaStileIndice(3,DRAW_ARROW);
ObjectCreate(DnAlert, OBJ_ARROW, 0, Basso[j],0);
ObjectSet(DnAlert, OBJPROP_ARROWCODE, 74);
}
//---- fatto
ritorno(0);
}
// ----------------------------------------------- -------------------