计算趋势线的斜率角。 - 页 15 1...8910111213141516171819202122...27 新评论 Eugeni Neumoin 2017.05.13 12:05 #141 Daniil Kurmyshev:啊,好吧,那我明白了))然后我把代码还回去,也许除了Renat Akhtyamov 之外,还有人需要它,顺便说一下,我不经常坐在论坛上)))。//-----------------------------------------------------------------------------------//xAngle /////////////////////////////////////////////////////////////////////////////-----------------------------------------------------------------------------------double xAngle(double x1,double y1,double x2,double y2) // x1,x2 Time[] - y1,y2 Price{如果(x1==0 || x2==0 || y1==y2){返回(0);}。if(y1==y2) {return(0);}//---double PriceMAX=ChartGetDouble(0,CHART_PRICE_MAX,0)。double PriceMIN=ChartGetDouble(0,CHART_PRICE_MIN,0)。double Bar1proc=(double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60) /100;double Price1proc=((PriceMAX-PriceMIN)/_Point)/100;x1=iBarShift(NULL,0,(datetime)x1)。x2=iBarShift(NULL,0,(datetime)x2)。double x1x2=MathAbs(x1-x2)*_Period*60;double y1y2=MathAbs(y1-y2)/_Point;double x1x2_proc=x1x2/Bar1proc。double y1y2_proc=y1y2/Price1proc。//---double theta=MathArctan(y1y2_proc/x1x2_proc)*(180/3.1415926535);如果(y2<y1){theta=NormalizeDouble(theta*(-1),2);}。return(theta)。}//+------------------------------------------------------------------+纯粹的功能,用于计算角度,在自动模式下,通过图表比例进行修正,我自己也在使用,效果非常好)至于趋势策略,通过角度,你可以估计趋势的强度和大概的持续时间。在这里。double Bar1proc=(double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60) /100;double Price1proc=((PriceMAX-PriceMIN)/_Point)/100;除以100是多余的。在最后的公式中,它们(100)在计算theta时被放在分子和分母中。而且它们是缩写的。在这里。double Price1proc=((PriceMAX-PriceMIN)/_Point)/100;double y1y2=MathAbs(y1-y2)/_Point;除以_Point是多余的。除以100的情况也是如此。在最后的公式中,双y1y2_proc=y1y2/Price1proc。分子和分母中的点数被减少。这些简化首先减少了计算量(CPU负载),其次,可能会提高最终结果的准确性。=============================== 或者你应该尝试使用ChartTimePriceToXY 函数来确定图形工具的锚点的像素值。用水平和垂直方向的像素数来计算三角函数比较容易。没有了条形和点的转换。这应该是更简单的。//-----------------------------------------------------------------------------------//xAngle /////////////////////////////////////////////////////////////////////////////-----------------------------------------------------------------------------------double xAngle(datetime x1,double y1,datetime x2,double y2) // x1,x2 Time[] - y1, y2 Price{如果(x1==0 || x2==0 || y1==y2){返回(0);}。int _x1, _y1, _x2, _y2;ChartTimePriceToXY(0,0,x1,y1,_x1, _y1)。ChartTimePriceToXY(0,0,x2,y2,_x2,_y2)。double theta=MathArctan((double)MathAbs(_y1-_y2)/(double)MathAbs(_x1-_x2)) *(180/3.1415926535)。如果(y2<y1){theta=NormalizeDouble(theta*(-1),2);}。return(theta)。} 这里如果(y2<y1){theta=NormalizeDouble(theta*(-1),2);}通过结果调整符号。 Calculation of the slope 为EA交易提供指标的现成模板(第2部分):交易量和比尔威廉姆斯指标 从 MQL4 迁移到 MQL5 Georgiy Merts 2017.05.13 12:43 #142 Eugeni Neumoin:在这里。.........应该会简单得多。是的,所有这些都是完全无用的,因为它取决于用户设置的比例,在不同的图表上可能是不同的。唯一真正的解决办法是衡量每单位时间内的价格趋势。一个 "每小时0.0001欧元 "的趋势将被任何人以完全相同的方式画出来,不管任何规模,甚至平台。 Eugeni Neumoin 2017.05.13 12:50 #143 George Merts:这都是完全无用的,因为它取决于用户设置的比例,在不同的图表上可能是不同的。唯一正确的解决方案是衡量每单位时间内的价格趋势。一个 "每小时0.0001欧元 "的趋势将被任何人以完全相同的方式画出来,不管任何规模,甚至平台。我没有注意到这个话题的主题。计算角度以使斜面铭文与趋势平行是很有趣的。我写了一个计算上述角度的简化函数。它完全不取决于规模。为了避免在改变比例和其他图表属性 时铭文失真,你可以使用CHARTEVENT_CHART_CHANGE=========我想在线条附近显示一个标题,就像图片上那样。随着上述功能的改变,结果是这样的。 Aleksey Vyazmikin 2017.05.13 15:11 #144 Eugeni Neumoin:我想在线条附近显示标签,如图所示。上述功能的结果是这样的。 很漂亮! Daniil Kurmyshev 2017.05.13 17:49 #145 Eugeni Neumoin:我同意你的观点,我不喜欢这样,但是当我最初创建这个函数时,我检查了几种不同的方式,然后我没有改变它),关于像素,我完全同意你的观点,对我个人来说,最理想的角度计算方式是这样的,这是我的函数。//-----------------------------------------------------------------------------------// xAnglePixels ///////////////////////////////////////////////////////////////////////-----------------------------------------------------------------------------------double xAnglePixels(datetime x1,double y1,datetime x2,double y2) // x1,x2 Time[] - y1,y2{如果(x1==0 || x2==0 || y1==y2){返回(0);}。//---int x[2],y[2];ChartTimePriceToXY(0,0,x1,y1,x[0],y[0])。ChartTimePriceToXY(0,0,x2,y2,x[1],y[1]) 。//---if(x[1]<x[0]){return(-1000);}//---double x1x2=MathAbs(x[0]-x[1]);double y1y2=MathAbs(y[0]-y[1]);//---双theta。if(x1x2!=0){theta=MathArctan(y1y2/x1x2)*(180/3.1415926535);}else{theta=90;}如果(y2<y1){theta=NormalizeDouble(theta*(-1),2);}else{theta=NormalizeDouble(theta,2);}。return(theta)。}//---------------------------------------------------------------------------------p.s. 在函数if(x[1]<x[0]){return(-1000);} 中可以去掉,因为我自己用了它),更具体地说,如果用户 把 对象的 两个点 交换了位置,就需要它。//-----------------顺便说一下,对于图表上的铭文,我使用它。 早些时候,我在分支中发布了这个指标的工作实例,在那里你可以看到它。//-----------------特别感谢你和尊重) Calculation of the slope 淘宝网上有卖的,有卖的,有卖的,有卖的,有卖的,有卖的,有卖的,有卖的。 利用 CCanvas 的自定义指标和信息图 Georgiy Merts 2017.05.13 18:46 #146 Eugeni Neumoin:计算角度以使斜面铭文与趋势平行是很有趣的。上面我写了一个计算角度的简化函数。它完全不取决于规模。 是的,这是一个相当不同的情况。这里的任务不是确定趋势,而是确定显示器上绘制的直线的斜率。而在这种情况下,这是正确的方式。而且图片上的一切都很美。 Daniil Kurmyshev 2017.05.18 07:12 #147 George Merts: 是的,这是一个不同的问题。这里的任务不是确定趋势,而是确定显示器上显示的直线的斜率。而在这种情况下,这是正确的方式。而且图片上的一切都很美。 根据你的说法,我们可以画出趋势线,它们将显示趋势方向,并且相对于所画的线,将显示正确的角度,而不需要玩游戏。我在图片中附上了一个例子,我的机器人是按照所有的规则建造的,但本质是清楚的。 附加的文件: 2017-04-23_01-07-40.png 43 kb Alexander Puzanov 2017.05.18 07:40 #148 Daniil Kurmyshev: 如果我们从你的话出发,意思是我们可以画出趋势线,它们会显示出趋势方向,相对于画出的线,直角会显示出来,没有任何篡改。我在图片中附上了一个例子,我的机器人是按照规则建造的,但本质是清楚的。 这张图是你的计算结果的可视化。可视化比例可以被扭曲(改变图表的比例),图像将发生显著变化--线条将改变其斜率角,单位为度。但当你改变比例时,你的计算结果不会改变。当然,除非你用像素来计算趋势 Daniil Kurmyshev 2017.05.18 08:50 #149 Alexander Puzanov: 这张图是你的计算结果的可视化。你可以扭曲可视化的比例(改变图表的比例),画面会发生明显的变化--线条会改变其斜率角的度数。但当你改变比例时,你的计算结果不会改变。当然,除非你在计算像素的趋势。 我同意,但你要意识到,在每个TF上,趋势是不同的;在小TF上看起来很大的,在大TF上变得很小,斜率也会改变;这改变的只是趋势的呈现,而不是角度测量系统;如果测量系统改变了,就不会有什么好结果。 Alexander Puzanov 2017.05.18 08:57 #150 Daniil Kurmyshev: 我同意你的观点,但你要明白,在每个TF上,趋势是不同的,在小的上看起来很大,在大的上变得很小,斜率也会改变,只是趋势的表现形式改变了,而不是角度测量系统,如果测量系统会改变,没有什么好的结果。 改变TF与此无关--当你改变TF时,你的计算方法就会改变。而当你改变比例时(用+/-按钮或终端上的按钮,有时只是滚动图表),计算中没有任何变化,而°是漂浮在中间的。 1...8910111213141516171819202122...27 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
啊,好吧,那我明白了))然后我把代码还回去,也许除了Renat Akhtyamov 之外,还有人需要它,顺便说一下,我不经常坐在论坛上)))。
//-----------------------------------------------------------------------------------
//xAngle ///////////////////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------------------
double xAngle(double x1,double y1,double x2,double y2) // x1,x2 Time[] - y1,y2 Price
{
如果(x1==0 || x2==0 || y1==y2){返回(0);}。
if(y1==y2) {return(0);}
//---
double PriceMAX=ChartGetDouble(0,CHART_PRICE_MAX,0)。
double PriceMIN=ChartGetDouble(0,CHART_PRICE_MIN,0)。
double Bar1proc=(double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60) /100;
double Price1proc=((PriceMAX-PriceMIN)/_Point)/100;
x1=iBarShift(NULL,0,(datetime)x1)。
x2=iBarShift(NULL,0,(datetime)x2)。
double x1x2=MathAbs(x1-x2)*_Period*60;
double y1y2=MathAbs(y1-y2)/_Point;
double x1x2_proc=x1x2/Bar1proc。
double y1y2_proc=y1y2/Price1proc。
//---
double theta=MathArctan(y1y2_proc/x1x2_proc)*(180/3.1415926535);
如果(y2<y1){theta=NormalizeDouble(theta*(-1),2);}。
return(theta)。
}
//+------------------------------------------------------------------+
纯粹的功能,用于计算角度,在自动模式下,通过图表比例进行修正,我自己也在使用,效果非常好)至于趋势策略,通过角度,你可以估计趋势的强度和大概的持续时间。
在这里。
double Bar1proc=(double)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60) /100;
double Price1proc=((PriceMAX-PriceMIN)/_Point)/100;
除以100是多余的。在最后的公式中,它们(100)在计算theta时被放在分子和分母中。而且它们是缩写的。
在这里。
double Price1proc=((PriceMAX-PriceMIN)/_Point)/100;
double y1y2=MathAbs(y1-y2)/_Point;
除以_Point是多余的。除以100的情况也是如此。
在最后的公式中,双y1y2_proc=y1y2/Price1proc。
分子和分母中的点数被减少。
这些简化首先减少了计算量(CPU负载),其次,可能会提高最终结果的准确性。
===============================
或者你应该尝试使用ChartTimePriceToXY 函数来确定图形工具的锚点的像素值。
用水平和垂直方向的像素数来计算三角函数比较容易。没有了条形和点的转换。
这应该是更简单的。
//-----------------------------------------------------------------------------------
//xAngle ///////////////////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------------------
double xAngle(datetime x1,double y1,datetime x2,double y2) // x1,x2 Time[] - y1, y2 Price
{
如果(x1==0 || x2==0 || y1==y2){返回(0);}。
int _x1, _y1, _x2, _y2;
ChartTimePriceToXY(0,0,x1,y1,_x1, _y1)。
ChartTimePriceToXY(0,0,x2,y2,_x2,_y2)。
double theta=MathArctan((double)MathAbs(_y1-_y2)/(double)MathAbs(_x1-_x2)) *(180/3.1415926535)。
如果(y2<y1){theta=NormalizeDouble(theta*(-1),2);}。
return(theta)。
}
这里如果(y2<y1){theta=NormalizeDouble(theta*(-1),2);}通过结果调整符号。在这里。
.........
应该会简单得多。
是的,所有这些都是完全无用的,因为它取决于用户设置的比例,在不同的图表上可能是不同的。
唯一真正的解决办法是衡量每单位时间内的价格趋势。
一个 "每小时0.0001欧元 "的趋势将被任何人以完全相同的方式画出来,不管任何规模,甚至平台。
这都是完全无用的,因为它取决于用户设置的比例,在不同的图表上可能是不同的。
唯一正确的解决方案是衡量每单位时间内的价格趋势。
一个 "每小时0.0001欧元 "的趋势将被任何人以完全相同的方式画出来,不管任何规模,甚至平台。
我没有注意到这个话题的主题。计算角度以使斜面铭文与趋势平行是很有趣的。我写了一个计算上述角度的简化函数。它完全不取决于规模。为了避免在改变比例和其他图表属性 时铭文失真,你可以使用CHARTEVENT_CHART_CHANGE
=========
我想在线条附近显示一个标题,就像图片上那样。随着上述功能的改变,结果是这样的。
我想在线条附近显示标签,如图所示。上述功能的结果是这样的。
我同意你的观点,我不喜欢这样,但是当我最初创建这个函数时,我检查了几种不同的方式,然后我没有改变它),关于像素,我完全同意你的观点,对我个人来说,最理想的角度计算方式是这样的,这是我的函数。
//-----------------------------------------------------------------------------------
// xAnglePixels /////////////////////////////////////////////////////////////////////
//-----------------------------------------------------------------------------------
double xAnglePixels(datetime x1,double y1,datetime x2,double y2) // x1,x2 Time[] - y1,y2
{
如果(x1==0 || x2==0 || y1==y2){返回(0);}。
//---
int x[2],y[2];
ChartTimePriceToXY(0,0,x1,y1,x[0],y[0])。
ChartTimePriceToXY(0,0,x2,y2,x[1],y[1]) 。
//---
if(x[1]<x[0]){return(-1000);}
//---
double x1x2=MathAbs(x[0]-x[1]);
double y1y2=MathAbs(y[0]-y[1]);
//---
双theta。
if(x1x2!=0){theta=MathArctan(y1y2/x1x2)*(180/3.1415926535);}
else{theta=90;}
如果(y2<y1){theta=NormalizeDouble(theta*(-1),2);}else{theta=NormalizeDouble(theta,2);}。
return(theta)。
}
//---------------------------------------------------------------------------------
p.s. 在函数if(x[1]<x[0]){return(-1000);} 中可以去掉,因为我自己用了它),更具体地说,如果用户 把 对象的 两个点 交换了位置,就需要它。
//-----------------
顺便说一下,对于图表上的铭文,我使用它。 早些时候,我在分支中发布了这个指标的工作实例,在那里你可以看到它。
//-----------------
特别感谢你和尊重)
计算角度以使斜面铭文与趋势平行是很有趣的。上面我写了一个计算角度的简化函数。它完全不取决于规模。
是的,这是一个不同的问题。这里的任务不是确定趋势,而是确定显示器上显示的直线的斜率。而在这种情况下,这是正确的方式。而且图片上的一切都很美。
如果我们从你的话出发,意思是我们可以画出趋势线,它们会显示出趋势方向,相对于画出的线,直角会显示出来,没有任何篡改。我在图片中附上了一个例子,我的机器人是按照规则建造的,但本质是清楚的。
这张图是你的计算结果的可视化。你可以扭曲可视化的比例(改变图表的比例),画面会发生明显的变化--线条会改变其斜率角的度数。但当你改变比例时,你的计算结果不会改变。当然,除非你在计算像素的趋势。
我同意你的观点,但你要明白,在每个TF上,趋势是不同的,在小的上看起来很大,在大的上变得很小,斜率也会改变,只是趋势的表现形式改变了,而不是角度测量系统,如果测量系统会改变,没有什么好的结果。