 
等级: 超级版主
- 注册:
- 2021-5-18
- 曾用名:
|
INPUT:MA60(60,1,200,5), MA30(30,1,200,5), MA10(10,1,200,5), MA40(40,1,200,5); // 均线参数
INPUT:P(26,20,40,2), S(12,5,30,3), M(9,2,20,2); // MACD参数
INPUT:手数(1,1,10000,10); // 开仓手数参数
// 均线计算
MA5Line := MA(CLOSE, 5);
MA60Line := MA(CLOSE, MA60);
MA30Line := MA(CLOSE, MA30);
MA10Line := MA(CLOSE, MA10);
MA40Line := MA(CLOSE, MA40);
// MACD指标
DIFF := EMA(CLOSE,S) - EMA(CLOSE,P);
DEA := EMA(DIFF,M);
MACD := 2*(DIFF-DEA);
n1:=todaybar;
dm:=4-INTPART(LOG(C));
结算价:ROUNDS(IF(sum(vol,n1)=0,C,sum(C*vol,n1)/sum(vol,n1)),2+dm),colorred;
// 开多条件:价格大于60均线和分时线、MACD是红柱、5日均线向上倾斜
开多条件 := CLOSE > MA60Line AND CLOSE > 结算价 AND MACD > 0 AND ma(close,5) > ref(ma(close,5),1);
// 开空条件:价格低于30均线和当日开盘价、MACD是绿柱、10均线向下倾斜
开空条件 := CLOSE < MA30Line AND CLOSE < ref(open,todaybar) AND MACD < 0 AND ma(close,10) < ref(ma(close,10),1);
// 平多条件:价格从上向下穿过分时线时并且是多头持仓状态
平多条件 := CROSS(close,结算价) AND HOLDING > 0;
// 平空条件:价格由下往上穿过分时线时并且是空头持仓状态
平空条件 := CROSS(结算价, close) AND HOLDING < 0;
// 下单模块
if 开多条件 and HOLDING = 0 then BUY(1,手数, marketr); // 开多
if 开空条件 and HOLDING = 0 then BUYSHORT(1,手数, marketr); // 开空
if 平多条件 then SELL(1,HOLDING,marketr); // 平多
if 平空条件 then SELLSHORT(1,HOLDING,marketr); // 平空
// 均线交叉平多单同时开多单
均线金叉条件 := CROSS(MA5Line, MA30Line);
if 均线金叉条件 then begin
平空: SELLSHORT(1,HOLDING,marketr);
开多: BUY(holding=0,手数, marketr);
end
// 均线交叉平多单同时开空单
均线死叉条件 := CROSS(MA5Line, MA40Line);
if 均线死叉条件 then begin
平多: SELL(1,HOLDING,marketr);
开空: BUYSHORT(holding=0,手数, marketr);
end
// 止损平仓:买开后,从买入价回落20个点
止损平多条件 := CLOSE < enterprice - 20*mindiff;
if 止损平多条件 and HOLDING > 0 then SELL(1,HOLDING,marketr);
// 止损平仓:卖开后,从卖出价上涨10个点
止损平空条件 := CLOSE > enterprice + 10*mindiff;
if 止损平空条件 and HOLDING < 0 then sellSHORT(1,HOLDING,marketr);
// 止损平仓:开仓多单后,价格跌破开仓的这根K线的最低点
止损平多条件2 := CLOSE < REF(LOW,enterbars) AND HOLDING > 0;
if 止损平多条件2 and HOLDING > 0 then SELL(1,HOLDING,marketr);
// 止损平仓:开仓空单后,价格涨破开仓的这根K线的最高点
止损平空条件2 := CLOSE > REF(HIGH,enterbars) AND HOLDING < 0;
if 止损平空条件2 and HOLDING <=0 0 then sellshort(1,HOLDING,marketr);
// 每天22:55分和14:55分平仓
IF time=225500 or time=145500 THEN BEGIN
SELL(1,HOLDING,marketr);
SELLSHORT(1,HOLDING,marketr);
END
|
|