You will need to provide all the relevant code, otherwise there is no way to check if the problem comes from your code or from MT4/mql4 (Canvas).
I can't belive! my yellow rectangle is different from the candelstick, but the Time and Price data in mqlrate array are right !
You think they are right or you checked they are right ? We can't guess.
You will need to provide all the relevant code, otherwise there is no way to check if the problem comes from your code or from MT4/mql4 (Canvas).
You think they are right or you checked they are right ? We can't guess.
Hi Alain, thank you for your answer. Sorry for my delay, but the "official job" has all my time.
I'm new here and I'm learning to use the forum tools...
I insert the code that i have run on a chart EURUSD and if you zoom to the maximum scale you can see the "error".
Thank you for all your help!!!
Stefano
PS. I have verified that the data are correct comparing the pop up on the chart and the printing data from MqlRates.
//+------------------------------------------------------------------+ //| BananaChart.mq4 | //| Stefano Gallone | //| | //+------------------------------------------------------------------+ #include <Canvas\Canvas.mqh> //--- #property copyright "Stefano Gallone" #property link "" #property version "1.00" #property strict //--- #property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 2 //--- #property indicator_label1 "BANANA" //--- Costanti // Costanti del periodo espresso in minuti! const int Std_Period[10]={ PERIOD_CURRENT, //0 PERIOD_M1, //1 PERIOD_M5, //5 PERIOD_M15, //15 PERIOD_M30, //30 PERIOD_H1, //60 PERIOD_H4, //240 PERIOD_D1, //1440 PERIOD_W1, //10080 PERIOD_MN1}; //43200 //--- layer di disegno CCanvas Tela; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- settaggio dal layer di disegno int ChartWidth=0, ChartHeight=0; ChartHeight=ChartPixelsGet('H'); ChartWidth=ChartPixelsGet('W'); ResetLastError(); if (!Tela.CreateBitmapLabel("Tela",0,0,ChartWidth-10,ChartHeight-10,COLOR_FORMAT_ARGB_NORMALIZE)) Print("ERRORE CREAZIONE TELA: ",GetLastError()); Tela.Erase(ColorToARGB(clrBlack,0)); //reset dell'area di disegno. 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[]) { //--- MqlRates Main_Rates[], Sub_Rates[], M1_Rates[]; int copied, Current_Period=0, Sub_Period=0; int i=0; int x[5],y[5]; int ChartWidth=0, ChartHeight=0; int Err=0; //--- ArraySetAsSeries(Main_Rates,true); ArraySetAsSeries(Sub_Rates,true); ArraySetAsSeries(M1_Rates,true); //--- setting del periodo corrente e del sottoperiodo da usare per l'analisi. Current_Period=Period(); for (i=1; i<10 && Std_Period[i]!=Current_Period;i++); if (i>1) Sub_Period=Std_Period[i-1]; else Sub_Period=Current_Period; //--- ultima candela completa per il periodo corrente CopyRates(Symbol(),Current_Period,0,2,Main_Rates); //--- ultime candele per M1 corrispondente al periodo precedente a quello corrente. //--- calcolo della media interna alla candela. ChartHeight=ChartPixelsGet('H'); ChartWidth=ChartPixelsGet('W'); Tela.Resize(ChartWidth,ChartHeight); ResetLastError(); //--- START convertion precision TEST int xTest[2], yTest[2]; ChartTimePriceToXY(0,0,Main_Rates[1].time,Main_Rates[1].open,xTest[0],yTest[0]); Err+=GetLastError(); ChartTimePriceToXY(0,0,Main_Rates[1].time,Main_Rates[1].close,xTest[1],yTest[1]); Err+=GetLastError(); Tela.Rectangle(xTest[0]-3,yTest[0],xTest[1]+3,yTest[1],ColorToARGB(clrYellow,255)); Tela.Update(); //--- END convertion precision TEST //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| Chart property width end height | //+------------------------------------------------------------------+ int ChartPixelsGet(char Dim,const long chart_ID=0,const int sub_window=0) { //--- prepare the variable to get the property value long result=-1; int DimentionToGet=CHART_WIDTH_IN_PIXELS; switch (Dim) { case 'W': DimentionToGet=CHART_WIDTH_IN_PIXELS; break; case 'H': DimentionToGet=CHART_HEIGHT_IN_PIXELS; break; default: DimentionToGet=CHART_WIDTH_IN_PIXELS; break; } //--- reset the error value ResetLastError(); //--- receive the property value if(!ChartGetInteger(chart_ID,DimentionToGet,sub_window,result)) { //--- display the error message in Experts journal Print(__FUNCTION__+", Error Code = ",GetLastError()); } //--- return the value of the chart property return((int)result); }

- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hello everyone!
this my discovery today.
I want to draw directly on my chart, and i use CCanvas class and its method.
BUT...
This is my code
and this is the result:
I can't belive! my yellow rectangle is different from the candelstick, but the Time and Price data in mqlrate array are right !
In my opinion, it is the conversion method to be wrong.
Infact with this correction, before drawing:
yTest[0]-=3;
yTest[1]-=3;
it seems works...
but it is a very bad solution.
Can someone give me a feedback to this problem?
thank you so mutch!
bye