抖音里的一个朋友留言,希望帮他把以下逻辑写成MT4里可以用的MACD指标!现呈上。有需要的朋友也可以免费下载,如果你有自己的想发,也可以跟贴,留言你的逻辑博主看到了也可以免费给你写成指标或者EA交易系统!这样做的目的只有一个,我想打造一个交易圈技术交流的论坛!
DIFF:EMA(CLOSE,12)-EMA(CLOSE,26),COLORMAGENTA;
//短周期与长周期的收盘价的指数平滑移动平均值做差。
DEA:EMA(DIFF,9);
//DIFF的M个周期指数平滑移动平均 MACD:2*(DIFF-DEA),COLORSTICK; PARTLINE(DIFF>DEA,DIFF,COLORRED),LINETHICK1; PARTLINE(DIFF<DEA,DIFF,COLORGREEN),LINETHICK1;
MACD-ZUZU.zip
zip文件
12.0K
安装方法:https://www.rongcegw.cn/forum-post/781.html/
//+------------------------------------------------------------------+
//| MACD_ZUZU.mq4 |
//| Generated by MetaEditor |
//| |
//+------------------------------------------------------------------+
#property strict
// Indicator settings
#property indicator_separate_window
#property indicator_buffers 6
#property indicator_color1 clrNONE // DIFF线(不显示)
#property indicator_color2 clrLime // DEA线(显示为绿色)
#property indicator_color3 clrCyan // 0轴上方柱状图(青色)
#property indicator_color4 clrGreen // 0轴下方柱状图(绿色)
#property indicator_color5 clrGray // 0轴线
#property indicator_width2 1 // DEA线宽度
#property indicator_width3 2 // 柱状图宽度
#property indicator_width4 2
#property indicator_width5 1
// 指标缓冲区
double DIFFBuffer[];
double DEABuffer[];
double HistogramUpBuffer[];
double HistogramDownBuffer[];
double ZeroBuffer[];
// 输入参数
input int FastEMA = 12; // 快线EMA周期
input int SlowEMA = 26; // 慢线EMA周期
input int SignalSMA = 9; // 信号线周期
//+------------------------------------------------------------------+
//| 自定义指标初始化函数 |
//+------------------------------------------------------------------+
int OnInit()
{
// 绑定缓冲区
SetIndexBuffer(0, DIFFBuffer);
SetIndexBuffer(1, DEABuffer);
SetIndexBuffer(2, HistogramUpBuffer);
SetIndexBuffer(3, HistogramDownBuffer);
SetIndexBuffer(4, ZeroBuffer);
// 设置绘图样式
SetIndexStyle(0, DRAW_NONE); // 隐藏DIFF线
SetIndexStyle(1, DRAW_LINE); // 显示DEA线
SetIndexStyle(2, DRAW_HISTOGRAM); // 0轴上方柱状图(青色)
SetIndexStyle(3, DRAW_HISTOGRAM); // 0轴下方柱状图(绿色)
SetIndexStyle(4, DRAW_LINE); // 0轴线(灰色)
// 设置指标名称
IndicatorShortName("MACD_ZUZU");
//--- 获取指标窗口句柄 ---
long chartID = ChartID(); // 当前图表ID
int subWindow = ChartWindowFind(chartID, "MACD_ZUZU"); // 根据指标名称查找窗口句柄
//--- 创建标注 ---
ObjectCreate(chartID, "Label", OBJ_LABEL, subWindow, 0, 0);
ObjectSetString(chartID, "Label", OBJPROP_TEXT, "其他指标>>>www.rongcegw.cn");
ObjectSetInteger(chartID, "Label", OBJPROP_COLOR, clrGray);
ObjectSetInteger(chartID, "Label", OBJPROP_XDISTANCE, 300); // 距离右侧10像素
ObjectSetInteger(chartID, "Label", OBJPROP_YDISTANCE, 20); // 距离顶部20像素
ObjectSetInteger(chartID, "Label", OBJPROP_CORNER, CORNER_RIGHT_UPPER);
ObjectSetInteger(chartID, "Label", OBJPROP_FONTSIZE, 10);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 自定义指标反初始化函数 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
// 删除标注
ObjectDelete(0, "Label");
}
//+------------------------------------------------------------------+
//| 自定义指标迭代函数 |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
// 计算起始位置
int start = (prev_calculated == 0) ? 0 : prev_calculated - 1;
// 主计算循环
for(int i = start; i < rates_total; i++)
{
// 计算DIFF值(快线EMA - 慢线EMA)
double EMA12 = iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, i);
double EMA26 = iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, i);
DIFFBuffer[i] = EMA12 - EMA26;
// 计算DEA值(DIFF的EMA)
DEABuffer[i] = iMAOnArray(DIFFBuffer, 0, SignalSMA, 0, MODE_EMA, i);
// 计算柱状图
if(DIFFBuffer[i] > 0)
{
HistogramUpBuffer[i] = DIFFBuffer[i]; // 0轴上方用青色
HistogramDownBuffer[i] = 0;
}
else
{
HistogramUpBuffer[i] = 0;
HistogramDownBuffer[i] = DIFFBuffer[i]; // 0轴下方用绿色
}
// 固定0轴值
ZeroBuffer[i] = 0;
}
return(rates_total);
}
没有回复内容