mt4指标Heiken Ashi的计算方法与原理
时间: 2024-01-16 22:04:13 浏览: 35
Heiken Ashi是一种基于日本蜡烛图的价格平滑指标,其计算方法与原理如下:
1. 先计算出每个蜡烛的开盘价、最高价、最低价、收盘价的平均值,得到一个新的价格序列。
2. 根据新的价格序列计算出每个蜡烛的开盘价、最高价、最低价、收盘价,以及平均价的中值,得到一个新的蜡烛图。
3. 如果当前的蜡烛图是绿色(表示价格下跌),那么下一个蜡烛图的开盘价将会等于当前蜡烛图的收盘价。
4. 如果当前的蜡烛图是红色(表示价格上涨),那么下一个蜡烛图的开盘价将会等于当前蜡烛图的开盘价和收盘价的平均值。
5. 下一个蜡烛图的最高价将会等于当前蜡烛图的最高价和收盘价的平均值,最低价将会等于当前蜡烛图的最低价和收盘价的平均值,收盘价将会等于当前蜡烛图的开盘价、最高价、最低价、收盘价的平均值。
6. 重复上述步骤,直到得到完整的Heiken Ashi蜡烛图序列。
Heiken Ashi指标可以平滑价格波动,过滤掉价格噪音,提供更清晰的趋势信号。它也可以帮助交易者识别价格反转信号,提供更好的交易决策。
相关问题
MT4 求KD指标方法
在MT4中,KD指标也称为随机指标。以下是在MT4中计算KD指标的方法:
1. 打开MT4图表并选择要应用指标的货币对或其他金融产品。
2. 点击顶部工具栏上的“插入”选项,然后选择“指标”>“振荡器”>“随机指标”。
3. 在“随机指标”窗口中,您可以调整指标的参数。默认情况下,主要参数为14、3和3,其中14是计算随机指标的周期,3和3是计算D线的周期。
4. 点击“确定”按钮,随机指标将被添加到您的图表上。
5. 在图表上,您将看到两条线:K线和D线。K线表示当前价格相对于选定周期内的价格范围的随机程度,D线表示K线的平滑版本。
6. 根据KD指标的数值,您可以确定当前市场是否处于超买或超卖状态。如果K线和D线都在80以上,则市场可能处于超买状态,如果它们都在20以下,则可能处于超卖状态。
请注意,KD指标是一种振荡指标,可以帮助确定市场的短期趋势和超买/超卖的状态。但是,它并不是完美的指标,因此应该与其他技术分析工具一起使用来做出更准确的交易决策。
MT4 写KD指标的方法,举例
以下是在MT4中编写计算随机指标(KD指标)的示例代码:
```
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Lime
extern int KPeriod = 14;
extern int DPeriod = 3;
extern int Slowing = 3;
double KBuffer[];
double DBuffer[];
void calculateKDJ(int rates_total, int prev_calculated, double price[])
{
int limit;
double high, low, RSV, K, D;
if(prev_calculated == 0)
{
limit = KPeriod + DPeriod;
for(int i = limit; i >= 0; i--)
{
high = iHighest(NULL, 0, MODE_HIGH, KPeriod, i);
low = iLowest(NULL, 0, MODE_LOW, KPeriod, i);
RSV = (price[i] - low) / (high - low) * 100;
KBuffer[i] = RSV;
}
limit = KPeriod + DPeriod + Slowing - 2;
}
else
{
limit = prev_calculated - 1;
}
for(int i = limit; i < rates_total; i++)
{
high = iHighest(NULL, 0, MODE_HIGH, KPeriod, i);
low = iLowest(NULL, 0, MODE_LOW, KPeriod, i);
RSV = (price[i] - low) / (high - low) * 100;
K = (2 * KBuffer[i-1] + RSV) / (2 + 1);
D = (2 * DBuffer[i-1] + K) / (2 + 1);
KBuffer[i] = K;
DBuffer[i] = D;
}
}
int init()
{
SetIndexStyle(0, DRAW_LINE);
SetIndexBuffer(0, KBuffer);
SetIndexLabel(0, "K");
SetIndexStyle(1, DRAW_LINE);
SetIndexBuffer(1, DBuffer);
SetIndexLabel(1, "D");
return(0);
}
int start()
{
int limit;
double price[];
ArrayResize(price, Bars);
limit = Bars - 1 - IndicatorCounted();
if(limit > KPeriod + DPeriod + Slowing)
{
limit = KPeriod + DPeriod + Slowing;
}
if(limit > 0)
{
for(int i = 0; i < limit; i++)
{
price[i] = iClose(NULL, 0, i);
}
calculateKDJ(limit, 0, price);
}
return(0);
}
```
在这个示例中,我们定义了三个参数:KPeriod、DPeriod和Slowing,它们分别对应KD指标中的周期、D线的周期和减速因子。我们还定义了两个指标缓冲区:KBuffer和DBuffer,它们用于存储计算出的K线和D线的值。
在init()函数中,我们设置了指标的样式、缓冲区和标签。在start()函数中,我们获取当前价格并调用calculateKDJ()函数来计算K线和D线的值。calculateKDJ()函数使用iHighest()和iLowest()函数来获取指定周期内的最高价和最低价,并计算出RSV值。然后,它使用KBuffer和DBuffer中的上一个值来计算当前的K线和D线的值,并将它们存储在缓冲区中。
请注意,这只是一个简单的示例,如果您要使用它来进行交易,请务必进行测试和优化。