新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1519 1...151215131514151515161517151815191520152115221523152415251526...1953 新评论 DYM 2021.06.29 16:59 #15181 很抱歉再次打扰你,但有一个问题出现了。MT4有一个颜色水平指标,在它的设置中,有一些线段,是由TrendCreate趋势线创建的,它有4个锚点--日期和价格,如果我把它进一步扩展为一个水平,我必须按Shift键。是否有可能像HLineCreate那样改变TrendCreate属性,即从水平面开始有段,或者也许有办法通过HLineCreate本身制作段?我的意思是使该段的行为像一个水平,而不是趋势线 Tretyakov Rostyslav 2021.06.29 17:44 #15182 DYM: 很抱歉再次打扰你,但有一个问题出现了。MT4有一个颜色水平指标,它的线段是由TrendCreate线创建的,它有4个锚点--日期和价格,如果你把它进一步拉伸成一个水平,你必须按住Shift。是否有可能像HLineCreate那样改变TrendCreate属性,即从水平面开始有段,或者也许有办法通过HLineCreate本身制作段?我的意思是使该段表现得像一个水平线,而不是趋势线 这个问题并不清楚... 为什么要按住Shift?线条可以随意移动。如果你按中心点移动,坡度不会改变。 如果你想改变指标中线条的长度,请在代码中添加黄色高亮部分 extern int x_coor = 10; // Coordinate X extern int y_coor = 20; // Coordinate Y extern int x_size = 155; // длина объектов jarikn 2021.06.29 18:43 #15183 Waaaaaaaaaaaaaaaaa。帮我解决这个问题。我搞不清楚哪里出了问题。它甚至没有在测试器中测试。那里缺少什么呢?为什么是在每个蜡烛上执行,而不是在箭头上?我已经要疯了(((( 附加的文件: 123.mq4 10 kb DYM 2021.06.29 18:48 #15184 MakarFX:这个问题并不清楚...为什么要按住Shift?线条可以随意移动。如果你按中心点移动,坡度不会改变。如果你想改变指标中线条的长度,请在代码中加入突出显示的黄色 我做了一个GIF,第一条线有趋势线属性,第二条线有水平线属性(在我看来是这样的)。我想了解如何使一条线段具有第二条线的属性。 附加的文件: line.gif 2022 kb Tretyakov Rostyslav 2021.06.29 19:40 #15185 DYM:我做了一个GIF,第一条线有趋势线属性,第二条线有水平线属性(嗯,对我来说似乎是这样)。我想了解一条线段如何具有第二条线的属性。 double a=ObjectGetDouble(ChartID,name,OBJPROP_PRICE1); double b=ObjectGetDouble(ChartID,name,OBJPROP_PRICE2); if(b!=a) ObjectSetDouble(ChartID,name,OBJPROP_PRICE2,a); Igor Makanu 2021.06.30 05:41 #15186 MakarFX:Igor,谢谢你,但是MT4不能正常工作。 你能告诉我该怎么解决吗? 这段代码应该可以工作。 #property copyright "IgorM" #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 // plot ZigZagZZ #property indicator_label1 "ZigZagZZ" #property indicator_type1 DRAW_SECTION #property indicator_color1 clrDarkBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 3 // input parameters input int Deviation=10; // indicator buffers double ZZBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { // indicator buffers mapping SetIndexBuffer(0,ZZBuffer,INDICATOR_DATA); IndicatorSetInteger(INDICATOR_DIGITS,_Digits); SetIndexEmptyValue(0,0.0); //PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0); 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[]) { static bool UP; static double max,min; static int LastExt=rates_total - 1; static const double dev=NormalizeDouble(Deviation*_Point,_Digits); int limit=LastExt; if(prev_calculated==0) { ArrayInitialize(ZZBuffer,0.0); limit = LastExt = rates_total - 1; if(low[0]<high[1]) { min=low[limit]; max=high[limit - 1]; UP=true; } else { max=high[limit]; min = low[limit - 1]; UP=false; } } for(int i=limit; i>=0; i--) { ZZBuffer[i]=0.0; if(UP) { if(low[i]-min<=0.0) { min=low[i]; ZZBuffer[LastExt]=0.0; LastExt=i; ZZBuffer[i]=min; } else { if(high[i]-min-dev>0.0) { max=high[i]; LastExt=i; ZZBuffer[i]=max; UP=false; } } } else { if(high[i]-max>=0.0) { max=high[i]; ZZBuffer[LastExt]=0.0; LastExt=i; ZZBuffer[i]=max; } else { if(low[i]-max+dev<0.0) { min=low[i]; LastExt=i; ZZBuffer[i]=min; UP=true; } } } } return(rates_total); } //+------------------------------------------------------------------+ Tretyakov Rostyslav 2021.06.30 05:52 #15187 Igor Makanu:这段代码应该可以工作。 非常感谢您!这一切都很有效......现在我想弄清楚其中的逻辑("之 "字形结构对我来说很难理解)。 Igor Makanu 2021.06.30 05:55 #15188 MakarFX: 太感谢了!这一切都很有效......现在我想弄清楚其中的逻辑(之字形结构对我来说很难理解)。 没有检查,运行它 - 它绘制 逻辑很简单--寻找其中一个条件发生的条数,并将其存储在代码中。 static int LastExt 然后将这个柱子与下一个柱子进行比较,如果是断相,我们将把这个柱子记在静态int LastExt中 Tretyakov Rostyslav 2021.06.30 06:40 #15189 Igor Makanu:没有检查,运行它 - 它绘制逻辑很简单--寻找其中一个条件发生的条数,并将其存储在代码中。然后你将这个条形图与下一个条形图进行比较,如果有一个阶段性的中断,你将其存储在静态的Int LastExt中。 现在一切都在我的脑海里排好了)谢谢你,伊戈尔。 DYM 2021.06.30 10:45 #15190 MakarFX: 我遇到了麻烦,我明白锚点 是price1,但我不够聪明,不能做一个条件。我的变体不起作用。 extern ENUM_LINE_STYLE line_st = STYLE_SOLID; // 9. Стиль линий extern int line_wd = 2; // 10. Толщина линий // Координаты extern int x_coor = 7; // Сдвиг по оси X extern int y_coor = 10; // Сдвиг по оси Y //-- глобальные переменные string line[6] = {"line_1","line_2","line_3","line_4","line_5","line_6"}; void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { datetime dt1 = 0; double price1 = 0; datetime dt2 = 0; double price2 = 0; int window = 0; int x = 0; int y = 0; //+------------------------------------------------------------------+ //--- Клик по 1 линии if(id==CHARTEVENT_OBJECT_CLICK) { string clickObject=sparam; if(clickObject==line[0]) { string name="line_"+IntegerToString(MathRand()+100,0,' '); y=210; ChartXYToTimePrice(0,x_coor+25,y,window,dt1,price1); ChartXYToTimePrice(0,x_coor+157,y,window,dt2,price2); TrendCreate(0,name,0,dt1,price1,dt2,price2,color2,line_st,line_wd,false,true,false,false,false,0); price1=ObjectGetDouble(id,name,OBJPROP_PRICE1); price2=ObjectGetDouble(id,name,OBJPROP_PRICE2); if(price2!=price1) { ObjectSetDouble(id,name,OBJPROP_PRICE2,price1); } } } } //+------------------------------------------------------------------+ 1...151215131514151515161517151815191520152115221523152415251526...1953 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
很抱歉再次打扰你,但有一个问题出现了。MT4有一个颜色水平指标,它的线段是由TrendCreate线创建的,它有4个锚点--日期和价格,如果你把它进一步拉伸成一个水平,你必须按住Shift。是否有可能像HLineCreate那样改变TrendCreate属性,即从水平面开始有段,或者也许有办法通过HLineCreate本身制作段?我的意思是使该段表现得像一个水平线,而不是趋势线
这个问题并不清楚...
为什么要按住Shift?线条可以随意移动。如果你按中心点移动,坡度不会改变。
如果你想改变指标中线条的长度,请在代码中添加黄色高亮部分
这个问题并不清楚...
为什么要按住Shift?线条可以随意移动。如果你按中心点移动,坡度不会改变。
如果你想改变指标中线条的长度,请在代码中加入突出显示的黄色
我做了一个GIF,第一条线有趋势线属性,第二条线有水平线属性(在我看来是这样的)。我想了解如何使一条线段具有第二条线的属性。
我做了一个GIF,第一条线有趋势线属性,第二条线有水平线属性(嗯,对我来说似乎是这样)。我想了解一条线段如何具有第二条线的属性。
Igor,谢谢你,但是MT4不能正常工作。
你能告诉我该怎么解决吗?
这段代码应该可以工作。
这段代码应该可以工作。
太感谢了!这一切都很有效......现在我想弄清楚其中的逻辑(之字形结构对我来说很难理解)。
没有检查,运行它 - 它绘制
逻辑很简单--寻找其中一个条件发生的条数,并将其存储在代码中。
然后将这个柱子与下一个柱子进行比较,如果是断相,我们将把这个柱子记在静态int LastExt中
没有检查,运行它 - 它绘制
逻辑很简单--寻找其中一个条件发生的条数,并将其存储在代码中。
然后你将这个条形图与下一个条形图进行比较,如果有一个阶段性的中断,你将其存储在静态的Int LastExt中。
现在一切都在我的脑海里排好了)谢谢你,伊戈尔。
我遇到了麻烦,我明白锚点 是price1,但我不够聪明,不能做一个条件。我的变体不起作用。