(think when I put the "wave1 > 0.0 && wave2 > 0.0 && wave3 > 0" in the if-satatement)
Think there is something horribly wrong with the data at mt4 brokers, with 1 broker it shows everything, with one it does not and the one that shows changes its results when you change timeframes compared to when you open mt4 starting on that timeframe....
hamama:
Dear people,
I have been struggling with this problem the whole day yesterday. It seems such an easy task, but apparently it is not. I just want to look at 3 MACD values and when they all 3 are above zero, I want to plot blue dots on the 0 line. And when all 3 are below zero I want to plot red dots on the 0 line.
Have the following code:
SNIP
Please use the SRC button to post code: How to use the SRC button.
#property copyright "Maggot" #property link "" #property version "1.00" #property strict #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 2 #property indicator_buffers 2 #property indicator_plots 2 //--- plot upTrend #property indicator_label1 "upTrend" #property indicator_type1 DRAW_ARROW #property indicator_color1 clrBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 3 //--- plot downTrend #property indicator_label2 "downTrend" #property indicator_type2 DRAW_ARROW #property indicator_color2 clrRed #property indicator_style2 STYLE_SOLID #property indicator_width2 3 //--- indicator buffers double upTrendBuffer[]; double downTrendBuffer[]; double macd1[]; double macd2[]; double macd3[]; //-- parameters extern int FastMAPeriod1=20; extern int SlowMAPeriod1=41; extern int FastMAPeriod2=34; extern int SlowMAPeriod2=89; extern int FastMAPeriod3=55; extern int SlowMAPeriod3=89; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { IndicatorDigits(Digits+1); //--- indicator buffers mapping SetIndexBuffer(0,upTrendBuffer); SetIndexBuffer(1,downTrendBuffer); SetIndexBuffer(2, macd1); SetIndexBuffer(3, macd2); SetIndexBuffer(4, macd3); //--- setting a code from the Wingdings charset as the property of PLOT_ARROW PlotIndexSetInteger(0,PLOT_ARROW,159); PlotIndexSetInteger(1,PLOT_ARROW,159); //--- 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; //--- if(rates_total<=SlowMAPeriod3) return(0); //--- if(prev_calculated>0) limit++; for(int i=0; i<limit; i++) { macd1[i] = iMA(NULL,0,FastMAPeriod1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(NULL,0,SlowMAPeriod1,0,MODE_EMA,PRICE_CLOSE,i); macd2[i] = iMA(NULL,0,FastMAPeriod2,0,MODE_EMA,PRICE_CLOSE,i) - iMA(NULL,0,SlowMAPeriod2,0,MODE_EMA,PRICE_CLOSE,i); macd3[i] = iMA(NULL,0,FastMAPeriod3,0,MODE_EMA,PRICE_CLOSE,i) - iMA(NULL,0,SlowMAPeriod3,0,MODE_EMA,PRICE_CLOSE,i); upTrendBuffer[i] = EMPTY_VALUE; downTrendBuffer[i] = EMPTY_VALUE; if(macd1[i] > 0.0 && macd2[i] > 0.0 && macd3[i] > 0.0) upTrendBuffer[i] = 1; if(macd1[i] < 0.0 && macd2[i] < 0.0 && macd3[i] < 0.0) downTrendBuffer[i] = 1; } //--- return value of prev_calculated for next call return(rates_total); }
tried like this, now it doesnt plot anything at all
Use Print() and see if anything comes out from it. We always use Print() for debugging purposes.
Can't seem to make it work, the weird thing is, sometimes it shows both blue and red dots and sometimes when you restart it only shows blue dots. It is really really buggy
int OnInit() { IndicatorDigits(Digits+1); IndicatorBuffers(5); //--- indicator buffers mapping SetIndexBuffer(0,upTrendBuffer); SetIndexBuffer(1,downTrendBuffer); SetIndexBuffer(2, macd1); SetIndexBuffer(3, macd2); SetIndexBuffer(4, macd3);
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
Dear people,
I have been struggling with this problem the whole day yesterday. It seems such an easy task, but apparently it is not. I just want to look at 3 MACD values and when they all 3 are above zero, I want to plot blue dots on the 0 line. And when all 3 are below zero I want to plot red dots on the 0 line.
Have the following code:
int start()
{
int i, counted_bars;
counted_bars = IndicatorCounted();
//---- check for possible errors
if (counted_bars<0) return(-1);
//---- last counted bar will be recounted
if (counted_bars>0) counted_bars--;
i = Bars - counted_bars - 1;
double wave1, wave2, wave3, zero=0.0;
while(i >= 0)
{
wave1 = iMA(NULL,0,FastMAPeriod1,0,MODE_EMA,PRICE_CLOSE,i) - iMA(NULL,0,SlowMAPeriod1,0,MODE_EMA,PRICE_CLOSE,i);
wave2 = iMA(NULL,0,FastMAPeriod2,0,MODE_EMA,PRICE_CLOSE,i) - iMA(NULL,0,SlowMAPeriod2,0,MODE_EMA,PRICE_CLOSE,i);
wave3 = iMA(NULL,0,FastMAPeriod3,0,MODE_EMA,PRICE_CLOSE,i) - iMA(NULL,0,SlowMAPeriod3,0,MODE_EMA,PRICE_CLOSE,i);
bool upTrend = wave1 > 0.0 && wave2 > 0.0 && wave3 > 0.0;
bool downTrend = wave1 < 0.0 && wave2 < 0.0 && wave3 < 0.0;
if(upTrend)
{
pos[i] = 0.0;
neg[i] = EMPTY_VALUE;
}
else if(downTrend)
{
pos[i] = EMPTY_VALUE;
neg[i] = 0.0;
}
else
{
pos[i] = EMPTY_VALUE;
neg[i] = EMPTY_VALUE;
}
i--;
}
return;
}
But it only plots the pos[i] line, and if you look further in the history it sometimes shows really different results from other charting software. Weird thing is at some point (think when I put the "wave1 > 0.0 && wave2 > 0.0 && wave3 > 0") it only plotted the neg[i] line.
What am I missing?
Thank you for your time!
hamama