乐于分享
好东西不私藏

主流程序化交易软件的代码模板(二)MACD指标

主流程序化交易软件的代码模板(二)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;

备注:期市有风险,入市需谨慎以上代码演示内容来源于各软件官网资料的整理,实际功能、使用效果可能因软件版本、硬件环境、网络条件等因素存在差异,最新规则请以各软件官网公告为准。期货公司不参与上述软件的开发、维护及策略效果验证,亦不对其准确性、完整性、适用性及盈利性作任何明示或暗示的保证。市场环境、波动特征、流动性等因素均可能发生显著变化,导致策略失效或产生较大亏损。程序化交易依赖网络、硬件、软件环境及数据源等多项技术条件,可能出现延迟、中断、错误信号、重复发单或未成交等情况,进而造成意外损失。不同软件在函数定义、信号触发时机、K线计算方式、撮合规则等方面存在差异,同一策略在不同平台上的执行结果可能不同。参数设置(如均线周期)亦可能对策略表现产生重大影响,不当的参数选择会放大风险。以上码演示内容不构成任何交易建议,使用者应当根据自身的风险承受能力、投资经验及财务状况,独立作出交易决策并承担全部交易风险。

(如需就文中量化与程序化交易相关内容进行探讨,可扫码联系获取更多有关投资料)

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