Il valore lo verficavo con il MACD della MT4. Ad ogni modo, non so come ma sono riuscito a farlo funzionare.
Grazie mille
Announcement
Collapse
No announcement yet.
Indicatore MACD
Collapse
X
-
qual è il valore che imposti come variabile esterna ?
io vedo soltanto queste due variabili
extern double MACD_VAL_NEG = 0.0;
extern double MACD_VAL_POS = 0.0;
se quando carichi l'indicatore su grafico le setti ad un valore, queste dovrebbero rimanere in memoria, essendo variabili esterne.
Stampa una Print() di queste due variabile così verifichi se il valore si mantiene ad ogni tick
Code:Print("MACD_VAL_NEG = "+DoubleToStr(MACD_VAL_NEG,1)+" MACD_VAL_POS = "+DoubleToStr(MACD_VAL_POS,1));
Comunque se non stampi a video le variabili per controllarne i valori, se non vedi a video se il calcolo del iMACD è corretto, come fai a sapere se il giocattolo sta funzionando come vuoi ?
Io stampo decine di Print per avere il controllo totale su ogni evento, e alla fine poi quando vedo che tutto funziona commento queste Print() (inserisco // e il compilatore di Mt4 non le inserisce nel codice che quindi risulta snello come se non avessi messo le Print)
Leave a comment:
-
Umbertosm, si i parametri del macd che ho impostato sono assolutamente quelli. Sotto l'aspetto strategia ha ovviamente dei filtri ma non è questo il problema. Dall'indicatore non voglio avere la visualizzazione del macd ma solo delle frecce che mi indichino quando si avvera la condizione impostata. Ora, siccome il valore dell'istogramma voglio che vari da grafico a grafico che vado a seguire sulla mt4 mi è sembrato opportuno creare delle variabili esterne in maniera tale da modificare il valore del macd ogni volta che mi interessa farlo. Il problema è che la mt4 non mi legge il valore che io imposto quando carico l'indicatore. Come posso fare? Grazie mille
Leave a comment:
-
ho salvato il codice che hai postato in un file indicatore
il problema è che non si vede il MACD sul grafico e quindi non puoi verificare nulla sulla correttezza o meno.
Inoltre leggo
if(iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, i) > iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_SIGNAL, i)
quindi le tre variabili Fast EMA Period, Slow EMA Period, Signal SMA Period sono cablate ai valori 12, 48 e 12 !
TI consiglio di modificare l'indicatore nativo di Mt4 con il file MACD.mq4
input int InpFastEMA=12; // Fast EMA Period
input int InpSlowEMA=26; // Slow EMA Period
input int InpSignalSMA=9; // Signal SMA Period
così da vedere l'indicatore sul grafico e verificare le soglie
Leave a comment:
-
Questo è il codice
Grazie mille
//+------------------------------------------------------------------+
//| MACD personale.mq4 |
//| Copyright 2020, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property description ""
#include <stdlib.mqh>
#include <stderror.mqh>
//--- indicator settings
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_type1 DRAW_ARROW
#property indicator_width1 1
#property indicator_color1 0xFFAA00
#property indicator_label1 "MACD BUY"
#property indicator_type2 DRAW_ARROW
#property indicator_width2 1
#property indicator_color2 0x0000FF
#property indicator_label2 "MACD SELL"
//--- indicator buffers
double Buffer1[];
double Buffer2[];
extern double MACD_VAL_NEG = 0.0;
extern double MACD_VAL_POS = 0.0;
datetime time_alert; //used when sending alert
extern bool Audible_Alerts = true;
double myPoint; //initialized in OnInit
void myAlert(string type, string message)
{
if(type == "print")
Print(message);
else if(type == "error")
{
Print(type+" | MACD @ "+Symbol()+","+IntegerToString(Period())+" | "+message);
}
else if(type == "order")
{
}
else if(type == "modify")
{
}
else if(type == "indicator")
{
if(Audible_Alerts) Alert(type+" | MACD @ "+Symbol()+","+IntegerToString(Period())+" | "+message);
}
}
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
IndicatorBuffers(2);
SetIndexBuffer(0, Buffer1);
SetIndexEmptyValue(0, EMPTY_VALUE);
SetIndexArrow(0, 241);
SetIndexBuffer(1, Buffer2);
SetIndexEmptyValue(1, EMPTY_VALUE);
SetIndexArrow(1, 242);
//initialize myPoint
myPoint = Point();
if(Digits() == 5 || Digits() == 3)
{
myPoint *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime& time[],
const double& open[],
const double& high[],
const double& low[],
const double& close[],
const long& tick_volume[],
const long& volume[],
const int& spread[])
{
int limit = rates_total - prev_calculated;
//--- counting from 0 to rates_total
ArraySetAsSeries(Buffer1, true);
ArraySetAsSeries(Buffer2, true);
//--- initial zero
if(prev_calculated < 1)
{
ArrayInitialize(Buffer1, EMPTY_VALUE);
ArrayInitialize(Buffer2, EMPTY_VALUE);
}
else
limit++;
//--- main loop
for(int i = limit-1; i >= 0; i--)
{
if (i >= MathMin(5000-1, rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation
//Indicator Buffer 1
if(iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, i) > iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_SIGNAL, i)
&& iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, i+1) < iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_SIGNAL, i+1) //MACD crosses above MACD
&& iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, i) < MACD_VAL_NEG //MACD < fixed value
&& iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, i) > iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, 1+i) //MACD > MACD
&& iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, 1+i) < iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, 2+i) //MACD < MACD
)
{
Buffer1[i] = Low[i] - iATR(NULL, PERIOD_CURRENT, 14, i) * 1.5; //Set indicator value at Candlestick Low - Average True Range * fixed value
if(i == 1 && Time[1] != time_alert) myAlert("indicator", "MACD BUY"); //Alert on next bar open
time_alert = Time[1];
}
else
{
Buffer1[i] = EMPTY_VALUE;
}
//Indicator Buffer 2
if(iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, i) < iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_SIGNAL, i)
&& iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, i+1) > iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_SIGNAL, i+1) //MACD crosses below MACD
&& iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, i) > MACD_VAL_NEG //MACD > fixed value
&& iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, i) < iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, 1+i) //MACD < MACD
&& iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, 1+i) > iMACD(NULL, PERIOD_CURRENT, 12, 48, 12, PRICE_CLOSE, MODE_MAIN, 2+i) //MACD > MACD
)
{
Buffer2[i] = High[i] + iATR(NULL, PERIOD_CURRENT, 14, i) * 1.5; //Set indicator value at Candlestick High + Average True Range * fixed value
if(i == 1 && Time[1] != time_alert) myAlert("indicator", "MACD SELL"); //Alert on next bar open
time_alert = Time[1];
}
else
{
Buffer2[i] = EMPTY_VALUE;
}
}
return(rates_total);
}
//+------------------------------------------------------------------+
Leave a comment:
-
Siccome quel che vuoi fare è molto semplice...
o posti quel che hai scritto e proviamo a capire come correggerlo
o continua a studiare le basi di metaquote language
Leave a comment:
-
Indicatore MACD
Salve a tutti. Premesso che non sono un programmatore MQL me sto cercando ugualmente di programmare un indicatore MACD che mi dia il segnale quando la mode_main taglia (al rialzo o al ribasso) la mode_signal.
Avendo però stabilito dei valori di mode_main diversi per ogni grafico che andrò a tradare è la nata la necessità di creare delle variabili esterne che la mt4 mi fa modificare ma solo in facciata, nel senso che poi il programma non modifica i dati immessi di default e quindi non genera il segnale richiesto.
Qualcuno può darmi una mano? Grazie infinite a tutti
Tags: None
Leave a comment: