-
Play videoPlease edit your post.
For large amounts of code, attach it.
- Regression has three lines. Try 0 and 2. Then report it.
- Can someone please advise where I send a Request for Support to Metaquotes. - MQL4 forum
- Get in touch with developers using Service Desk! - MQL5 forum
- Report it to the service desk. 'MQL5.community - User Memo' - an article about the algorithmic/automated trading in MetaTrader
- Report it to the Service Desk, not us users.
if(RegressionCreate(0,"Regression",0,mindate,maxdate,clrBlue,STYLE_SOLID,1,false,false,true,true,true,0)==true) { Regression_Channel=true; testprice=ObjectGetValueByTime(0,"Regression",TimeCurrent(),1); }else { Regression_Channel=false; } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx //xxxxxxxxxxxxxxxx Create Linear Regression Channel by the given coordinates xxxxxxxxxxxxxxxxxxxxx //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx bool RegressionCreate(const long chart_ID=0, // chart's ID const string name="Regression", // channel name const int sub_window=0, // subwindow index datetime time1=0, // first point time datetime time2=0, // second point time const color clr=clrRed, // channel color const ENUM_LINE_STYLE style=STYLE_SOLID, // style of channel lines const int width=1, // width of channel lines const bool fill=false, // filling the channel with color const bool back=false, // in the background const bool selection=true, // highlight to move const bool ray_right=false, // channel's continuation to the right const bool hidden=true, // hidden in the object list const long z_order=0) // priority for mouse click { //--- set anchor points' coordinates if they are not set //ChangeRegressionEmptyPoints(time1,time2); //--- reset the error value ResetLastError(); //--- create a channel by the given coordinates if(!ObjectCreate(chart_ID,name,OBJ_REGRESSION,sub_window,time1,0,time2,0)) { Print(__FUNCTION__, ": failed to create linear regression channel! Error code = ",GetLastError()); return(false); } //--- set channel color ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- set style of the channel lines ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- set width of the channel lines ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); //--- display in the foreground (false) or background (true) ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- enable (true) or disable (false) the mode of highlighting the channel for moving //--- when creating a graphical object using ObjectCreate function, the object cannot be //--- highlighted and moved by default. Inside this method, selection parameter //--- is true by default making it possible to highlight and move the object ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- enable (true) or disable (false) the mode of continuation of the channel's display to the right ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right); //--- hide (true) or display (false) graphical object name in the object list ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- set the priority for receiving the event of a mouse click in the chart ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); //--- successful execution return(true); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
I have tried both with 0,1 and 2 but I still get 0 in the debug mode.
I believe that either in the call of ObjectGetValueByTime I make a mistake or in the initial creation of the Regression Channel.
The Regression Channel is successfully created on the chart. I do not know if this is a clue but when I hover the mouse ove the middle regression line I do get a value on the chart (not in the code) but when the mouse is over the two outer regression lines no price is returned. This might indicate something wrong in the creation code part.
Thanking you in advance,
Panos Kourtesis
This is one of the strange anomalies with mq4.
The ObjectCreate() function returns true, but the object has not always actually been created. The Object drawing has been placed in a queue.
Because your code tries to read the value immediately after the ObjectCreate, the object has not actually been drawn, so ObjectGetValueByTime() returns zero.
In a script, this can often be overcome by inserting
ChartRedraw();
after the ObjectCreate, or Sleep for a few seconds. In an indicator, you will need to create the object and wait at least 1 tick before trying to access the values
Here is an example of use in an indicator
datetime mindate=Time[10]; datetime maxdate=Time[1]; static bool Regression_Channel=false; double testprice; if(Regression_Channel) { testprice=ObjectGetValueByTime(0,"Regression",TimeCurrent(),0); Print(DoubleToStr(testprice,Digits)); testprice=ObjectGetValueByTime(0,"Regression",TimeCurrent(),1); Print(DoubleToStr(testprice,Digits)); testprice=ObjectGetValueByTime(0,"Regression",TimeCurrent(),2); Print(DoubleToStr(testprice,Digits)); } else if(RegressionCreate(0,"Regression",0,mindate,maxdate,clrBlue,STYLE_SOLID,1,false,false,true,true,true,0)) { ChartRedraw(); Regression_Channel=true; } else { Regression_Channel=false; }
Obviously, this will print the values every tick, but I doubt that you actually want to print the values in your code when it is finished.
This is one of the strange anomalies with mq4.
The ObjectCreate() function returns true, but the object has not always actually been created. The Object drawing has been placed in a queue.
Because your code tries to read the value immediately after the ObjectCreate, the object has not actually been drawn, so ObjectGetValueByTime() returns zero.
In a script, this can often be overcome by inserting
after the ObjectCreate, or Sleep for a few seconds. In an indicator, you will need to create the object and wait at least 1 tick before trying to access the values
Here is an example of use in an indicator
Obviously, this will print the values every tick, but I doubt that you actually want to print the values in your code when it is finished.
You were right with the use of ChartRedraw(); it works perfectly.
I would like to ask you another question: How can I delete a specific fibolevel, because ObjectDelete requires chart id and object name and I havent given any names to fibolevels!
Thanking you in advance!
You need to be clear whether you want do delete a Fibonacci object or a level within that object. If there is only 1 Fibonacci object on the chart, you can find it by loopng through the objects and checking ObjectType().
I have, as yet, never done any coding with Fibonacci objects, so maybe somebody else can help you.
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
You agree to website policy and terms of use
Hi,
I am faceing the following problem: I create a regression channel with the following code
if(RegressionCreate(0,"Regression",0,mindate,maxdate,clrBlue,STYLE_SOLID,1,false,false,true,true,true,0)==true)
{
Regression_Channel=true;
testprice=ObjectGetValueByTime(0,"Regression",TimeCurrent(),1);
}else
{
Regression_Channel=false;
}
where
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxx Create Linear Regression Channel by the given coordinates xxxxxxxxxxxxxxxxxxxxx
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
bool RegressionCreate(const long chart_ID=0, // chart's ID
const string name="Regression", // channel name
const int sub_window=0, // subwindow index
datetime time1=0, // first point time
datetime time2=0, // second point time
const color clr=clrRed, // channel color
const ENUM_LINE_STYLE style=STYLE_SOLID, // style of channel lines
const int width=1, // width of channel lines
const bool fill=false, // filling the channel with color
const bool back=false, // in the background
const bool selection=true, // highlight to move
const bool ray_right=false, // channel's continuation to the right
const bool hidden=true, // hidden in the object list
const long z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
//ChangeRegressionEmptyPoints(time1,time2);
//--- reset the error value
ResetLastError();
//--- create a channel by the given coordinates
if(!ObjectCreate(chart_ID,name,OBJ_REGRESSION,sub_window,time1,0,time2,0))
{
Print(__FUNCTION__,
": failed to create linear regression channel! Error code = ",GetLastError());
return(false);
}
//--- set channel color
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set style of the channel lines
ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set width of the channel lines
ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- display in the foreground (false) or background (true)
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- enable (true) or disable (false) the mode of highlighting the channel for moving
//--- when creating a graphical object using ObjectCreate function, the object cannot be
//--- highlighted and moved by default. Inside this method, selection parameter
//--- is true by default making it possible to highlight and move the object
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the channel's display to the right
ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object list
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chart
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- successful execution
return(true);
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
though the testprice is always 0 despite the fact that the Regression Channel is successfully created. Do I make some mistake in the ObjectGetValueByTime section?
Thanking you in advance,
Panos Kourtesis