Генератор торговых стратегий Мастера MQL5 значительно упрощает проверку торговых идей. В статье рассказывается о том, как написать и подключить в Мастер MQL5 свой собственный модуль управления открытыми позициями, устанавливающий уровень Stop Loss в безубыток при движении цены в благоприятном направлении, что позволяет защитить прибыль и уменьшить потери. Рассматривается структура и формат описания созданного класса для Мастера MQL5.
请帮助翻译寻找两条线段的交点坐标的算法
摘自文章。
这很简单!
x1,y1和x2,y2是第一段的顶点的坐标。
x3,y3和x4,y4是第二段的顶点的坐标。
为了找到交点,我们要做直线的方程。
第一个方程式。
(x-x1)/(x2-x1)=(y-y1)/(y2-y1);
第二方程
(x-x3)/(x4-x3)=(y-y3)/(y4-y3);
这些方程定义了一条通过两点的直线,这就是我们需要的。
从这些方程中,我们通过以下公式找到x和y。
x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3);
由于我们的线相交,它们有一个共同的交点,坐标为(x,y),我们需要找到这个交点。
为了使交点属于我们的线段,我们需要对其进行约束,即检查条件。
如果
(((x1<=x)and(x2>=x)and(x3<=x)and(x4>=x))或((y1<=y)and(y2>=y)and(y3<=y) and(y4>=y))
则这些线段有一个交点,如果没有,则没有交点。
你还应该用角度系数检查这些线段的平行度。
k1:=(x2-x1)/(y2-y1)。
k2:=(x4-x3)/(y4-y3)。
其中k1和k2是线段与OX轴正方向的角度的切线,如果k1=k2,那么线段是平行的,因此没有交集点。
Готовая функция. Код: POINT Point_X(POINT a1,POINT a2,POINT a3,POINT a4){ POINT T; if(((a1.x<=T.x)&&(a2.x>=T.x)&&(a3.x<=T.x)&&(a4.x >=T.x))||((a1.y<=T.y)&&(a2.y>=T.y)&&(a3.y<=T.y)&&(a4.y>=T.y))){ float x1=a1.x,x2=a2.x,x3=a3.x,x4=a4.x,y1=a1.y,y2=a2.y,y3=a3.y,y4=a4.y; float k1,k2; if(y2-y1!=0){ k1=(x2-x1)/(y2-y1); if(y4-y3!=0){ k2=(x4-x3)/(y4-y3); if(k1!=k2){ T.x=((a1.x*a2.y-a2.x*a1.y)*(a4.x-a3.x)-(a3.x*a4.y-a4.x*a3.y)*(a2.x-a1.x))/((a1.y-a2.y)*(a4.x-a3.x)-(a3.y-a4.y)*(a2.x-a1.x)); T.y=((a3.y-a4.y)*T.x-(a3.x*a4.y-a4.x*a3.y))/(a4.x-a3.x); T.x*=-1; return T; }else{ T.x=969; T.y=969; //text2("Паралельны"); } }else{ T.x=969; T.y=969; //text2("Паралельны"); } }else{ T.x=969; T.y=969; //text2("Паралельны"); } }else{ //text2("Пересечение вне отрезка"); T.x=979; T.y=979; return T; } }也许有人在档案馆里有一个现成的?亲爱的朋友们,大家好!
请帮助翻译寻找两条线段的交点坐标的算法
摘自文章。
这很简单!
也许有人在档案馆里有一个现成的?x1,y1和x2,y2是第一段的顶点的坐标。
x3,y3和x4,y4是第二段的顶点的坐标。
为了找到交点,我们要做直线的方程。
第一个方程式。
(x-x1)/(x2-x1)=(y-y1)/(y2-y1);
第二方程
(x-x3)/(x4-x3)=(y-y3)/(y4-y3);
这些方程定义了一条通过两点的直线,这就是我们需要的。
从这些方程中,我们通过以下公式找到x和y。
x:=((x1*y2-x2*y1)*(x4-x3)-(x3*y4-x4*y3)*(x2-x1))/((y1-y2)*(x4-x3)-(y3-y4)*(x2-x1));
y:=((y3-y4)*x-(x3*y4-x4*y3))/(x4-x3);
由于我们的线相交,它们有一个共同的交点,坐标为(x,y),我们需要找到这个交点。
为了使交点属于我们的线段,我们需要对其进行约束,即检查条件。
如果
(((x1<=x)and(x2>=x)and(x3<=x)and(x4>=x))或((y1<=y)and(y2>=y)and(y3<=y) and(y4>=y))
则这些线段有一个交点,如果没有,则没有交点。
你还应该用角度系数检查这些线段的平行度。
k1:=(x2-x1)/(y2-y1)。
k2:=(x4-x3)/(y4-y3)。
其中k1和k2是线段与OX轴正方向的角度的切线,如果k1=k2,那么线段是平行的,因此没有交集点。
这有点复杂...我写了线的交集的定义,一个是2米的高点,另一个是2米的低点,比下一个柱子还要远,或者不远。我是用切线来写的,即以点为单位的价差与画线的Haijs之间的条数 之比。相应地,它是第二线角在低点的正切。然后我用切线找到下一个条形的点数,也就是说,我用逆向公式,用改变了的一个猫头鹰的值(条形的数目)。我们在这些线的测试点获得价格值。而相应地,如果直条的价格值较小,则发生了交叉。
但到目前为止,我还没有找到这个指标。
...
或者有人在档案馆里有一个现成的?
Kim发布了一个功能。该函数返回从直线向右绘制的射线的点的价格。
x1 - 第一行坐标的小节,y1 - 第一行坐标的价格。 x2 - 第二行坐标的小节,y2 - 第二行坐标的价格,x - 返回价格的小节。
你可以找到两条线各自的价格,看看它们是否重叠...
我在这里写的算是......,有些东西是算数的,也是画出来的,但不是在每个路口都有。我的写作有问题。我不明白它是什么。
非常感谢Alexey和Artem对我的问题的关注!
我在这里写的算是......,有些东西是算数的,也是画出来的,但不是在每个路口都有。我的写作有问题。我不知道它是什么。
此刻,我无法理解编程中的任何东西,今天是我爱妻的生日。她今年18岁零384个月。
但是!!!请注意,线条的交叉可以发生在条形图内或条形图外,而价格(Y坐标)只能在条形图上获得。要么在之前,要么在之后,但交叉点不一定能确定。我想说这很罕见。考虑到上述情况,在考虑到这一点的情况下修改你的代码,也许会有效果。
Alexey Viktorov 2015.12.12 17:33 # RU
她已经18岁了。
请告诉我们应该在专家顾问中插入什么样的命令,以便在重新计算未结头寸 时自动纠正已经设定的止盈。或者,也许有一个脚本可以纠正最后一组的所有停顿?
请告知如何添加代码,以便在策略测试器中 可以改变模式的拟合权重。m_pattern_0(90) 替换输入变量
我对OOP不是很在行,我得到的错误是"成员 函数 未定义",或者代码根本无法工作。
这里有类似的未回答的问题 https://www.mql5.com/ru/forum/13484
p.s.: 使用CiCustom我可以改变模型的权重,但对于有标准类的标准指标(如CSignalEnvelopes等),为每个模型设置数值的方法在哪里,但在Wizard 中还没有。
,或者在某个地方有答案?
将从MetaQuotes网站加载一些东西,我得到以下图片。
顶部:数据库2049/12358条记录。
倒数第二张是2014年10月17日的,最后一张是1993年7月14日的。
失踪的人在哪里?