主流程序化交易软件的代码模板(二)MACD指标
逻辑案例:
DIF 上穿 DEA→ 开多信号参考
DIF 下穿 DEA→ 平多信号参考
DEA 上穿 DIF→ 开空信号参考
DEA 下穿 DIF→ 平空信号参考
一、文华财经麦语言代码演示
// 标准MACD指标
// 短周期EMA=12,长周期EMA=26,DEA周期=9
INPUT:SHORT(12),LONG(26),M(9);
// 计算EMA
DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA:EMA(DIF,M);
MACD:2*(DIF-DEA),COLORSTICK;
// 绘制0轴
ZERO:0;
// MACD均线策略
INPUT:SHORT(12),LONG(26),M(9);
DIF:=EMA(C,SHORT)-EMA(C,LONG);
DEA:=EMA(DIF,M);
MACD:=2*(DIF-DEA);
// 信号
金叉:=CROSS(DIF,DEA);
死叉:=CROSSDOWN(DIF,DEA);
// 多单
IF金叉 AND HOLDING=0THEN BK(1);
IF死叉 AND HOLDING>0THEN SP(BKVOL);
// 空单
IF CROSS(DEA,DIF) AND HOLDING=0THEN SK(1);
IF CROSSDOWN(DEA,DIF) AND HOLDING<0THEN BP(SKVOL);
【注解】
DIF:快线
DEA:慢线
MACD:柱线(2*(DIF-DEA))
COLORSTICK:文华专用,自动画红绿柱
策略里用 HOLDING 判断持仓,不会重复开仓
二、通达信期货通代码演示
{标准MACD指标}
DIF:EMA(CLOSE,12)-EMA(CLOSE,26);
DEA:EMA(DIF,9);
MACD:2*(DIF-DEA),COLORSTICK;
{金叉死叉信号}
金叉:=CROSS(DIF,DEA);
死叉:=CROSS(DEA,DIF);
{标记箭头}
DRAWICON(金叉, L*0.98, 1);
DRAWICON(死叉, H*1.02, 2);
三、无限易程序化软件
无限易Python版代码演示
definitialize(context):
pass
defhandle_bar(context, bars):
import talib
import numpy as np
bar = bars[0]
closes = bar.close_array
# 计算MACD
dif, dea, macd_bar = talib.MACD(
closes,
fastperiod=12,
slowperiod=26,
signalperiod=9
)
# 取最新值
DIF = dif[-1]
DEA = dea[-1]
DIF_1 = dif[-2]
DEA_1 = dea[-2]
# 金叉死叉
金叉 = (DIF_1<DEA_1) and (DIF>DEA)
死叉 = (DIF_1>DEA_1) and (DIF<DEA)
# 持仓
long_pos = context.get_position_long()
short_pos = context.get_position_short()
# 多单
if金叉and long_pos == 0and short_pos == 0:
context.buy_open(volume=1)
if死叉and long_pos > 0:
context.sell_close(volume=long_pos)
# 空单
if (DEA_1<DIF_1)and(DEA>DIF) and long_pos == 0and short_pos == 0:
context.sell_open(volume=1)
if (DEA_1>DIF_1)and(DEA<DIF) and short_pos > 0:
context.buy_close(volume=short_pos)

无限易拖拽式可视化编辑器操作步骤
1、打开无限易 → 策略 → 新建“可视化策略” → 选择合约周期
2、拖入 MACD 指标节点(DIF、DEA)
右侧属性设置MACD 标准参数:
快线周期:12
慢线周期:26
信号线周期:9
3、拖入【交叉判断】节点(金叉/死叉)
CrossOver (DIF, DEA) → 开多
CrossUnder (DIF, DEA) → 平多
CrossOver (DEA, DIF) → 开空
CrossUnder (DEA, DIF) → 平空
4、拖入交易指令:
买开/ 卖平 / 卖开 / 买平
5、连线:
DIF上穿DEA + 空仓 → 买开
DIF下穿DEA + 持多 → 卖平
DEA上穿DIF + 空仓 → 卖开
DEA下穿DIF + 持空 → 买平
6、设置手数 1,启用持仓判断,避免重复开仓
四、金字塔代码演示
//金字塔 MACD 策略
DIF:EMA(C,12)-EMA(C,26);
DEA:EMA(DIF,9);
MACD:2*(DIF-DEA),COLORSTICK;
金叉:=CROSS(DIF,DEA);
死叉:=CROSSDOWN(DIF,DEA);
//多单
IF金叉 AND HOLDING=0THEN
BUY(1, C, MARKET);
IF死叉 AND HOLDING>0THEN
SELL(HOLDING, C, MARKET);
//空单
IF CROSS(DEA,DIF) AND HOLDING=0THEN
SHORT(1, C, MARKET);
IF CROSSDOWN(DEA,DIF) AND HOLDING<0THEN
COVER(ABS(HOLDING), C, MARKET);
五、交易开拓者(TB)代码演示
//TB MACD 策略
VAR: DIF(0), DEA(0), MACD(0);
Once Begin
DIF=0;
DEA=0;
MACD=0;
End;
DIF=XAverage(Close,12)-XAverage(Close,26);
DEA=XAverage(DIF,9);
MACD=2*(DIF-DEA);
If CrossOver(DIF,DEA) && (MarketPosition == 0)Then
Buy(1, Close);
If CrossUnder(DIF,DEA) && (MarketPosition == 1)Then
Sell(1, Close);
If CrossOver(DEA,DIF) && (MarketPosition == 0)Then
SellShort(1,Close);
IfCrossUnder(DEA,DIF) && (MarketPosition == -1)Then
BuyToCover(1,Close);
六、MC(MultiCharts) 代码演示
//MC MACD 策略
[IntrabarOrderGeneration = False]
Vars:
DIF(0), DEA(0), MACD(0);
DIF=XAverage(Close,12)-XAverage(Close,26);
DEA=XAverage(DIF,9);
MACD=2*(DIF-DEA);
Plot1(DIF,”DIF”);
Plot2(DEA,”DEA”);
Plot3(MACD,”MACD”);
//多单
If CrossOver(DIF,DEA) Then
Buy Next Bar At Market;
If CrossUnder(DIF,DEA) Then
Sell Next Bar At Market;
// 空单
If CrossOver(DEA,DIF) Then
Short Next Bar At Market;
If CrossUnder(DEA,DIF) Then
Cover Next Bar At Market;
(如需就文中量化与程序化交易相关内容进行探讨,可扫码联系获取更多有关投教资料)

期市有风险,入市需谨慎。页面信息仅供参考,不构成任何交易建议及保本保收益承诺,量化交易存在固有风险,无论使用何种软件均不保证交易盈利,过往策略回测业绩不代表未来实盘收益。期货开户需完成交易者分类,适配风险承受能力,交易者需根据自身的风险承受能力自主作出交易决策并承担交易风险。
夜雨聆风