ChartGetInteger возвращает значение форматаlong или bool. Через (int) происходит перевод ChartGetInteger в значение int.
если int bars, значит и значение должно быть int при присваивании.
1. Непосредственно возвращает значение свойства.
longChartGetInteger(
long chart_id, // идентификатор графика int prop_id, // идентификатор свойства int sub_window=0// номер подокна, если требуется
);
2. Возвращает true или false в зависимости от успешности выполнения функции. В случае успеха значение свойства помещается в приемную переменную, передаваемую по ссылке последним параметром
boolChartGetInteger(
long chart_id, // идентификатор графика int prop_id, // идентификатор свойства int sub_window, // номер подокна long& long_var // сюда примем значение свойства
);
intCopyRates(
string symbol_name, // имя символаENUM_TIMEFRAMES timeframe, // периодint start_pos, // откуда начнем (начнём с 1)int count, // сколько копируем (надо всего 1)MqlRates rates_array[] // массив, куда будут скопированы данные
);
//+------------------------------------------------------------------+//| CopyRates.mq5 |//| Copyright 2021, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2021, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"#property script_show_inputs//---sinputint Inpcopiedrates = 2; // какой барsinputdouble Inphigh = 100; // отступить от high//---datetime m_right_time = 0,m_left_Ctime = 0;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---MqlRates rates[];
ArraySetAsSeries(rates,true);
int copied=CopyRates(Symbol(),0,0,Inpcopiedrates,rates);
if(copied>0)
{
Print("Скопировано баров: "+copied);
string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
string out;
int size=fmin(copied,10);
for(int i=0; i<size; i++)
{
out=i+":"+TimeToString(rates[i].time);
out=out+" "+StringFormat(format,
rates[i].open,
rates[i].high,
rates[i].low,
rates[i].close,
rates[i].tick_volume);
Print(out);
ObjectDelete(0,"CopyRateshigh");
m_left_Ctime=rates[i].time;
m_right_time=TimeCurrent();
TrendCreate(0,"CopyRateshigh",clrBlue,STYLE_DASHDOTDOT,1);
TrendPointChange(0,"CopyRateshigh",0,m_left_Ctime,rates[i].high+Inphigh/100);
TrendPointChange(0,"CopyRateshigh",1,m_right_time,rates[i].high+Inphigh/100);
}
}
elsePrint("Не удалось получить исторические данные по символу ",Symbol());
}
//+------------------------------------------------------------------+//| Create a trend line by the given coordinates |//+------------------------------------------------------------------+bool TrendCreate(constlong chart_ID=0, // chart's IDconststring name="TrendLine", // line nameconstcolor clr=clrRed, // line colorconstENUM_LINE_STYLE style=STYLE_SOLID, // line styleconstint width=1, // line widthconstint sub_window=0, // subwindow indexdatetime time1=0, // first point timedouble price1=0, // first point pricedatetime time2=0, // second point timedouble price2=0, // second point priceconstbool back=false, // in the backgroundconstbool selection=false, // highlight to moveconstbool ray_left=false, // line's continuation to the leftconstbool ray_right=true, // line's continuation to the rightconstbool hidden=true, // hidden in the object listconstlong z_order=0) // priority for mouse click
{
//--- set anchor points' coordinates if they are not set
ChangeTrendEmptyPoints(time1,price1,time2,price2);
//--- reset the error valueResetLastError();
//--- create a trend line by the given coordinatesif(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,time1,price1,time2,price2))
{
Print(__FUNCTION__,
": failed to create a trend line! Error code = ",GetLastError());
return(false);
}
//--- set line colorObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- set line display styleObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- set line widthObjectSetInteger(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 moving the line by mouse//--- 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 objectObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the leftObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- enable (true) or disable (false) the mode of continuation of the line's display to the rightObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
//--- hide (true) or display (false) graphical object name in the object listObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- set the priority for receiving the event of a mouse click in the chartObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- set the textObjectSetString(chart_ID,name,OBJPROP_TEXT,name);
//--- successful executionreturn(true);
}
//+------------------------------------------------------------------+//| Move trend line anchor point |//+------------------------------------------------------------------+bool TrendPointChange(constlong chart_ID=0, // chart's IDconststring name="TrendLine", // line nameconstint point_index=0, // anchor point indexdatetime time=0, // anchor point time coordinatedouble price=0) // anchor point price coordinate
{
//--- if point position is not set, move it to the current bar having Bid priceif(!time)
time=TimeCurrent();
if(!price)
price=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- reset the error valueResetLastError();
//--- move trend line's anchor pointif(!ObjectMove(chart_ID,name,point_index,time,price))
{
Print(__FUNCTION__,
": failed to move the anchor point! Error code = ",GetLastError());
return(false);
}
//--- successful executionreturn(true);
}
//+------------------------------------------------------------------+//| Check the values of trend line's anchor points and set default |//| values for empty ones |//+------------------------------------------------------------------+void ChangeTrendEmptyPoints(datetime &time1,double &price1,
datetime &time2,double &price2)
{
//--- if the first point's time is not set, it will be on the current barif(!time1)
time1=TimeCurrent();
//--- if the first point's price is not set, it will have Bid valueif(!price1)
price1=SymbolInfoDouble(Symbol(),SYMBOL_BID);
//--- if the second point's time is not set, it is located 9 bars left from the second oneif(!time2)
{
//--- array for receiving the open time of the last 10 barsdatetime temp[10];
CopyTime(Symbol(),Period(),time1,10,temp);
//--- set the second point 9 bars left from the first one
time2=temp[0];
}
//--- if the second point's price is not set, it is equal to the first point's oneif(!price2)
price2=price1;
}
//+------------------------------------------------------------------+
你好,请你告诉我为什么在ChartGetInteger之前有一个(int)的括号?
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS)。
你好。请告知。
我有一个指标,它应该在一个较小的时间框架的每个条形上画出当天的最高和最低线。
当我把它放在图表上时,它只是在当天的最高点和最低点画线(在图片上,应该是这样)。
你好。请告知。
我有一个指标,它应该在下层时间框架的每个条形上画出当天的高低线。
当我把它放在图表上时,它只是在当天的最高点和最低点画线(在图片上,应该是这样)。
以下是答案
以下是答案
你好,请你告诉我图表ID是什么?
我通常会去找人帮忙。
请给我一个MT4和MT5专家顾问的代码,让我在刚刚收盘的蜡烛的最高/最低点以上2-3个点止损。
或者我在哪里可以看到关于这个问题的教程。提前感谢 :-)
请给我一个MT4和MT5专家顾问的代码,让我在刚刚收盘的蜡烛的最高/最低点以上2-3个点止损。
或者我在哪里可以看到关于这个问题的教程。提前感谢 :-)
你声明了一个MqlRates类型的数组。你复制OHLC和其他封闭蜡烛图的参数
然后从你偏移了2-3个点的最高值或最低值,在那里设置止损。
你也可以使用
и
声明一个MqlRates类型的数组。复制OHLC和封闭蜡烛图的其他参数
然后选择离你有2或3个点的高点或低点,并在那里设置止损。
你也可以使用
и
谢谢你,但你能不能至少给我一个客观的例子?可以这么说,从上面看。我是一个完全的新手,我已经在这个问题上呆了两天了 :-)
我也在努力学习--我想我已经有所收获了。