如何在 MQL4 中自动计算 yesterday/prev 天的斐波那契水平?
How to automatically calculate fibonnacci levels from yesterday/prev day in MQL4?
如何计算 yesterday/previous 天的斐波纳奇水平。
这是我目前的进度:
int shift = iBarShift( NULL, PERIOD_D1, Time[0] ) + 1; // yesterday
HiPrice = iHigh( NULL, PERIOD_D1, shift);
LoPrice = iLow ( NULL, PERIOD_D1, shift);
StartTime = iTime( NULL, PERIOD_D1, shift);
if ( TimeDayOfWeek( StartTime ) == 0 /* Sunday */ )
{ // Add fridays high and low
HiPrice = MathMax( HiPrice, iHigh( NULL, PERIOD_D1, shift + 1 ) );
LoPrice = MathMin( LoPrice, iLow( NULL, PERIOD_D1, shift + 1 ) );
}
Range = HiPrice - LoPrice;
我想现在我应该拥有计算它所需的所有值。
我不确定现在如何计算不同的级别:
23.6 38.2 50.0 61.8 76.4 和 -23.6 -38.2 -50.0 -61.8 -76.4 -100
所有必要的斐波纳奇位均可以手动添加为数组 - 据我所知,这是最简单的方法。然后简单地遍历这样的数组和
+值为 ( high + array[i] / 100 * range )
、
低于 fibo 的值 - ( low - array[i] / 100 * range )
,
其中
array[] = { 23.6, 38.2, .. }
(只有正值就够了)
Fibonacci Levels 需要一个方向,所以在您上面的代码中,您将想要交换使用前一个柱的开盘价和收盘价,或者将一个方向强加到高点和低点。这将让您知道绘制扩展和回溯的方式。
这是我之前为此编写的函数 。此函数假设 price1
处于比 price2
更早的时间点,然后计算方向和水平,返回 FibLevel 结构。
struct FibLevel {
double retrace38;
double retrace50;
double retrace61;
double extension61;
double extension100;
double extension138;
double extension161;
};
void FibLevel(double price1, double price2,FibLevel &fiblevel)
{
double range = MathAbs(price1-price2);
fiblevel.retrace38 =(price1<price2)?price2-range*0.382:price1+range*0.382;
fiblevel.retrace50 =(price1<price2)?price2-range*0.500:price1+range*0.500;
fiblevel.retrace61 =(price1<price2)?price2-range*0.618:price1+range*0.618;
fiblevel.extension61 =(price1<price2)?price2+range*0.618:price1-range*0.618;
fiblevel.extension100=(price1<price2)?price2+range :price1-range;
fiblevel.extension138=(price1<price2)?price2+range*1.382:price1-range*1.382;
fiblevel.extension161=(price1<price2)?price2+range*1.618:price1-range*1.618;
}
如何计算 yesterday/previous 天的斐波纳奇水平。
这是我目前的进度:
int shift = iBarShift( NULL, PERIOD_D1, Time[0] ) + 1; // yesterday
HiPrice = iHigh( NULL, PERIOD_D1, shift);
LoPrice = iLow ( NULL, PERIOD_D1, shift);
StartTime = iTime( NULL, PERIOD_D1, shift);
if ( TimeDayOfWeek( StartTime ) == 0 /* Sunday */ )
{ // Add fridays high and low
HiPrice = MathMax( HiPrice, iHigh( NULL, PERIOD_D1, shift + 1 ) );
LoPrice = MathMin( LoPrice, iLow( NULL, PERIOD_D1, shift + 1 ) );
}
Range = HiPrice - LoPrice;
我想现在我应该拥有计算它所需的所有值。
我不确定现在如何计算不同的级别:
23.6 38.2 50.0 61.8 76.4 和 -23.6 -38.2 -50.0 -61.8 -76.4 -100
所有必要的斐波纳奇位均可以手动添加为数组 - 据我所知,这是最简单的方法。然后简单地遍历这样的数组和
+值为 ( high + array[i] / 100 * range )
、
低于 fibo 的值 - ( low - array[i] / 100 * range )
,
其中
array[] = { 23.6, 38.2, .. }
(只有正值就够了)
Fibonacci Levels 需要一个方向,所以在您上面的代码中,您将想要交换使用前一个柱的开盘价和收盘价,或者将一个方向强加到高点和低点。这将让您知道绘制扩展和回溯的方式。
这是我之前为此编写的函数 price1
处于比 price2
更早的时间点,然后计算方向和水平,返回 FibLevel 结构。
struct FibLevel {
double retrace38;
double retrace50;
double retrace61;
double extension61;
double extension100;
double extension138;
double extension161;
};
void FibLevel(double price1, double price2,FibLevel &fiblevel)
{
double range = MathAbs(price1-price2);
fiblevel.retrace38 =(price1<price2)?price2-range*0.382:price1+range*0.382;
fiblevel.retrace50 =(price1<price2)?price2-range*0.500:price1+range*0.500;
fiblevel.retrace61 =(price1<price2)?price2-range*0.618:price1+range*0.618;
fiblevel.extension61 =(price1<price2)?price2+range*0.618:price1-range*0.618;
fiblevel.extension100=(price1<price2)?price2+range :price1-range;
fiblevel.extension138=(price1<price2)?price2+range*1.382:price1-range*1.382;
fiblevel.extension161=(price1<price2)?price2+range*1.618:price1-range*1.618;
}