新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1279

 
leonerd:

把你的鼻子探入一个简单的代码,计算价格运动的角度。下面的图片显示了它。


这取决于X(像素、条形或时间)和Y(像素或价格)的测量单位。
那么任务是什么:在当前的图表上用当前的比例(条形宽度为像素)和时间框架测量角度?或者测量角度,使其对任何TF和比例都保持不变?
不同的任务和坐标系--不同的解决方案。
 
leonerd:

把你的鼻子探入一个简单的代码,计算价格运动的角度。下面的图片显示了它。


那么,你可以用切线来计算。而且你不需要角度本身,你只需要知道切线。

 
Alexey Viktorov:

而且你并不真的需要一个角度本身,你只需要一个切线。

正是如此!而我们的切入点叫做:速度。

在这个例子中,价格在39个1小时的蜡烛中已经超过1884点。这个波的总速度是。1884/(39/24)=1159点/日。

double interval=double(iBarShift(symbol,frame,start_time)-iBarShift(symbol,frame,finish_time)*PeriodSeconds(frame)/86400;
int distance=MathAbs(finish_price-start_price);
int speed=interval>0?(distance/interval):0;
而且我们不需要一个角度,我们为什么需要一个角度?当我们开始拉长或拉平图形时,那时的角度会是什么样子? 当x轴和y轴的单位相同时,角度可以被测量。例如,如果你拿一个有方块的笔记本,沿着这些方块的对角线画一条线,你会得到45度。而上面的和右边的是厘米。而在这里,一个价位等于什么?一小时,一天? 这些都是没有可比性的价值。
 
Aleksei Stepanenko:

正是如此!而我们的切入点叫做:速度。

在这个例子中,价格在39根一小时的蜡烛中已经超过了1884点。这个波的总速度是。1884/(39/24)=1159点/日。

而且我们不需要一个角度,我们为什么需要一个角度?当我们开始拉长或拉平图形时,那时的角度会是什么样子? 当x轴和y轴的单位相同时,角度可以被测量。例如,如果你拿一个有方块的笔记本,沿着这些方块的对角线画一条线,你会得到45度。而上面的和右边的是厘米。而在这里,一个价位等于什么?一小时,一天?这些都是没有可比性的价值

我们为什么要对它们进行比较呢?公里数和时间也没有可比性,但这并不妨碍我们以公里/小时计算速度。

如果你的切线是速度,它将是图表周期的 单位时间的速度。如果价格在39小时内移动了1884点,那么每小时将是48点。没有必要将其转换为天数。

但你也可以将 "加速度 "计算为当前速度与前一栏的速度之比。而通过收集这些数值中的几个,可以确定平均加速度。

 
Aleksei Stepanenko:

而在这里,一个价位等于什么?一小时,一天? 这些数值没有可比性。

那么,距离也是用光年来衡量的。所以这不是一个问题。
让我们引入一个恒定的速度。例如,1 _Point 为一个1分钟的柱子,并将坐标系统带到两个轴上的价格

那么在任何时间框架下,角度都会是一样的。

最主要的是正确计算 X1X2 之间的分钟柱数量

在这个系统中,45度的角度意味着价格在N分钟内变化N*tg(45)=N点,30度的角度意味着价格在N分钟内变化N*tg(30)=N*0.57735点。
最好使用分钟条,而不是时间,因为存在周末、低波动率等形式的时间漏洞。
 

我100%同意,因为烛台可以在水平和垂直方向上被拉长。而且应该有一些确定角度的标准(烛台宽度为像素,一个像素的点数)。

我可以问一个离题的问题吗?

如何正确地将数据时间转换为双倍数,以便编译器不会发誓(由于转换不正确而导致的数据损失是可能的)?

double A = Time[1];

提前感谢!

 
Alexey Viktorov:

如果你在39小时内有1884个点,速度是每小时48个点。而且根本不需要将其转换为天数。

是的,这是我的假设。由于我把速度定为英寸(即整点),我想我会使用一个较大的周期,这样速度的零头就不会太重要,可以被 丢弃。所以我每天都有积分。嗯,这与人类的生物钟是一致的。累了,睡了,早上起来:"昨天的速度是多少?它看起来很一致,所以我为自己制定了一个标准。然后,当然,这是一个个人偏好的问题。


Nikolai Semko:

那么,距离也是用光年来衡量的。所以这不是一个问题。
让我们引入一个恒定的速度。例如,1 _Point 为一个1分钟的柱子,并将坐标系统带到两个轴上的价格

是的,同样得到了速度,只是单位是:每分钟点数。至于周末和洞,我采取了以下方式:图表上的蜡烛是时间间隔,没有的(天/小时)是不存在的。因为如果我们考虑到周末,而价格在那个时候保持不变,那么速度会毫无理由地明显下降。但话又说回来,这也是各人的事:)


Roni Iron:

如何正确地将数据时间转换为双倍数,以便编译器没有发誓(由于不正确的转换而造成的数据损失是可能的)。

double A = (double)Time[1];

为什么要用双倍数存储数据时间?如果你在同一个数组中存储不同类型的变量,并把它们带到这里和那里,可以考虑用一个结构数组来代替通常的数组。


struct My
   {
   datetime time;
   double price;  
   } my[];

int finish=0;
ArrayResize(my,finish+1);
my[finish].time=Time[1];
my[finish].price=Close[1];
 

非常感谢您!

这些结构只在mql 5中工作,还是已经在mql 4中工作?

 
是的,他们在四个方面起作用,用他们写作非常方便,很明显。
 
Roni Iron:

非常感谢您!

结构只在mql 5中工作还是已经在mql 4中工作?

不仅是结构工作,还有工会。