等级: 免费版
- 注册:
- 2021-6-13
- 曾用名:
|
//中间变量
INPUT:M(60, 5, 300, 30), N(1.25, 0.1, 10, 0.1), SS(1.1, 1, 10000, 1), K1(0.5, 0.1, 1, 0.1), K2(0.75, 0.1, 1, 0.1);
VARIABLE:A:=0;//0表示仓位是在趋势模式下下单 1表示在震荡模式下下单
MID := MA(CLOSE, M);//布林中轨
UPPER: MID + N*STD(CLOSE, M);//布林上轨
LOWER: MID - N*STD(CLOSE, M);//布林下轨
今开:=CALLSTOCK(STKLABEL, VOPEN, 6, 0);
CMI:=ABS(CLOSE-REF(CLOSE, 29))/(HHV(HIGH, 30)-LLV(L, 30))*100;//0-100 取值越大,说明趋势越强,CMI<20震荡模式,反之为趋势
关键价:(HIGH+LOW+CLOSE)/3;//关键价的计算,国外常称作中枢价格(PIVOT POINT)
ATR10:=MA(TR, 10);
3日均低价:=MA(L, 3);
3日均高价:=MA(H, 3);
手数:=SS;
//交易条件
IF C>关键价 THEN BEGIN
超买币升多平空条件:=C>MAX(今开+K1*ATR10, 3日均低价);
超买币升空平多条件:=C<MIN(今开-K2*ATR10, 3日均高价);
END
IF C<关键价 THEN BEGIN
超卖币升多平空条件:=C>MAX(今开+K2*ATR10, 3日均低价);
超卖币升空平多条件:=C<MIN(今开-K1*ATR10, 3日均高价);
END
趋势升多条件:=C>UPPER;
趋势升空条件:=C<LOWER;
趋势升多条件:=C<MID;
趋势升空条件:=C>MID;
震荡升多平仓条件:=C<=ENTERPRISE-3*ATR10;
震荡升空平仓条件:=C>=ENTERPRISE+3*ATR10;
//交易系统
IF CMI<20 THEN BEGIN //震荡模式
IF C<关键价 THEN BEGIN
超买币升空:SELLSHORT(超买币升多平空条件 AND HOLDING<=0, 手数, MARKET);
超买币升多:SELL(超买币升空平多条件 AND HOLDING>=0, 手数, MARKET);
买币升多:BUY(超买币升多平空条件 AND HOLDING<=0, 手数, MARKET);
买币升空:BUYSHORT(超买币升空平多条件 AND HOLDING>=0, 手数, MARKET);
A:=1;
END
IF C>关键价 THEN BEGIN
超卖币升空:SELLSHORT(超卖币升多平空条件 AND HOLDING<=0, 手数, MARKET);
超卖币升多:SELL(超卖币升空平多条件 AND HOLDING>=0, 手数, MARKET);
卖币升多:BUY(超卖币升多平空条件 AND HOLDING<=0, 手数, MARKET);
卖币升空:BUYSHORT(超卖币升空平多条件 AND HOLDING>=0, 手数, MARKET);
A:=1;
END
END
IF CMI>=20 THEN BEGIN //趋势模式
IF A=1 THEN BEGIN //趋势模式下 原震荡模式下 仓位处理
震荡升多平仓:SELL(震荡升多平仓条件 AND HOLDING>0, 手数, MARKET);
震荡升空平仓:SELLSHORT(震荡升空平仓条件 AND HOLDING<0, 手数, MARKET);
A:=0;
END
IF A=0 THEN BEGIN
趋势升空:SELLSHORT(趋势升空条件 AND HOLDING<=0, 手数, MARKET);
趋势升多:SELL(趋势升多条件 AND HOLDING>=0, 手数, MARKET);
势升多:BUY(趋势升多条件 AND HOLDING<=0, 手数, MARKET);
势升空:BUYSHORT(趋势升空条件 AND HOLDING>=0, 手数, MARKET);
A:=0;
END
END
//注意先平后开原则
//建立空头进场条件
70 SHORT := L < T2OLO
75 //空头进场
IF SHORT AND POSITION=0 THEN BEGIN
MYENTRYPRICE := IF(OPEN>T2OLO-MINDIFF, OPEN, T2OLO-MINDIFF);
BUYSHORT(_DEBUG, POSNUM, LIMITR, MYENTRYPRICE);
POSITION := -1;
TURTLEUNITS := 1;
N := AVTR;
BUYORDERTHISBAR := 1;
END
85 //不要跳转,让程序检查同一根K线是否可以加仓
//GOTO CONTINUELINE;
90 //如果当前持有空头仓位的状态
IF POSITION=-1 AND BARPOS>T20 AND H>L THEN BEGIN
95 //空头加仓条件
WHILE (HIGH>MYENTRYPRICE+0.5*N) AND TURTLEUNITS<4 DO BEGIN
MYENTRYPRICE := IF(OPEN>MYENTRYPRICE+0.5*N, OPEN, MYENTRYPRICE+0.5*N);
MYEXITPRICE := CEILING(MYENTRYPRICE/MINDIFF)*MINDIFF;
SELL(_DEBUG, POSNUM, LIMITR, MYEXITPRICE);
TURTLEUNITS := TURTLEUNITS+1;
SELLORDERTHISBAR := 1;
END //WHILE
105 //建立多头离场条件
LONGX1 := (LOW < T1OLO);
110 IF LONGX1 AND BUYORDERTHISBAR=0 THEN BEGIN
MYEXITPRICE := IF(OPEN<T1OLO-MINDIFF, OPEN, T1OLO-MINDIFF);
SELL(_DEBUG, 0, LIMITR, MYEXITPRICE);
POSITION := 0;
TURTLEUNITS := 0;
END
115 //建立多头止损条件
LONGX2 := (LOW<MYENTRYPRICE-2*N);
120 IF LONGX2 AND POSITION=1 AND BUYORDERTHISBAR=0 THEN BEGIN
MYEXITPRICE := IF(OPEN<MYENTRYPRICE-2*N, OPEN, MYENTRYPRICE-2*N);
MYEXITPRICE := FLOOR(MYEXITPRICE/MINDIFF)*MINDIFF;
SELL(_DEBUG, 0, LIMITR, MYEXITPRICE);
POSITION := 0;
TURTLEUNITS := 0;
END
125 GOTO CONTINUELINE;
END //IF
//如果当前持有空头仓位的状态
130 IF POSITION = -1 AND BARPOS>T20 AND H>L THEN BEGIN
//空头加仓条件
WHILE (LOW<MYENTRYPRICE-0.5*N) AND TURTLEUNITS<4 DO BEGIN
MYENTRYPRICE := IF(OPEN>MYENTRYPRICE-0.5*N, OPEN, MYENTRYPRICE-0.5*N);
MYEXITPRICE := FLOOR(MYENTRYPRICE/MINDIFF)*MINDIFF;
BUYSHORT(_DEBUG, POSNUM, LIMITR, MYENTRYPRICE);
TURTLEUNITS := TURTLEUNITS+1;
BUYORDERTHISBAR := 1;
END //WHILE
145 //建立空头离场条件
SHORTX1 := H > T1OHI;
IF SHORTX1 AND BUYORDERTHISBAR=0 THEN BEGIN
MYEXITPRICE := IF(OPEN>T1OHI+MINDIFF, OPEN, T1OHI+MINDIFF);
SELLSHORT(_DEBUG, 0, LIMITR, MYEXITPRICE);
POSITION := 0;
TURTLEUNITS := 0;
END
155 //建立空头止损条件
SHORTX2 := HIGH > MYENTRYPRICE + 2*N;
IF SHORTX2 AND POSITION = -1 AND BUYORDERTHISBAR=0 THEN BEGIN
MYEXITPRICE := IF(OPEN>MYENTRYPRICE+2*N, OPEN, MYENTRYPRICE+2*N);
MYEXITPRICE := CEILING(MYEXITPRICE/MINDIFF)*MINDIFF;
SELLSHORT(_DEBUG, 0, LIMITR, MYEXITPRICE);
POSITION := 0;
TURTLEUNITS := 0;
END
165 END //IF
//显示账户状态
170 CONTINUELINE@ 资产: ASSET, LINETHICK0;
可用现金:CASH(0), LINETHICK0;
POS:HOLDING, LINETHICK0;
交易次数:TOTALDAYTRADE, LINETHICK0;
175 IF _DEBUGOUT>0 THEN BEGIN
DEBUGFILE2('C:\DEBUGFILE.TXT', 'BARPOS=%OF', BARPOS, NT);
DEBUGFILE2('C:\DEBUGFILE.TXT', 'T2OHI=%2F', T2OHI, NT);
DEBUGFILE2('C:\DEBUGFILE.TXT', 'N=%2F', N, NT);
DEBUGFILE2('C:\DEBUGFILE.TXT', 'CLOSE=%2F', C, NT);
DEBUGFILE2('C:\DEBUGFILE.TXT', 'POSITION=%OF', POSITION, NT);
DEBUGFILE2('C:\DEBUGFILE.TXT', 'TURTLEUNITS=%OF', TURTLEUNITS, NT);
DEBUGFILE2('C:\DEBUGFILE.TXT', 'MYENTRYPRICE=%OF', MYENTRYPRICE, NT);
DEBUGFILE2('C:\DEBUGFILE.TXT', 'MYEXITPRICE=%OF', MYEXITPRICE, NT);
185 END //IF
//声明参数
10 INPUT: T20(20, 15, 60, 1);
INPUT: T10(10, 10, 30, 1);
INPUT: ATRLEN(20, 15, 30, 1);
INPUT: POSNUM(1, 1, 20, 1);
//声明变量
15 NT := 1; //调试信息带时间戳
BUYORDERTHISBAR := 0; //当前BAR有过交易
VARIABLE : _DEBUG = 1; //是否输出前台交易指令
VARIABLE : _TDEBUG = 1; //是否输出后台交易指令
VARIABLE : _DEBUGOUT = 0; //是否输出后台交易的调试信息
VARIABLE : MYENTRYPRICE = 0; //开仓价格
VARIABLE : MYEXITPRICE = 0; //平仓价格
VARIABLE : TURTLEUNITS = 0; //交易单位
VARIABLE : POSITION = 0; //仓位状态
//0表示没有仓位,1表示持有多头,-1表示持有空头
VARIABLE : T2OHI = CLOSE; //20周期的高点
VARIABLE : T2OLO = CLOSE; //20周期的低点
VARIABLE : T1OHI = CLOSE; //10周期的高点
VARIABLE : T1OLO = CLOSE; //10周期的低点
//准备需要计算的变量
40 T2OHI := REF(HHV(H, T20), 1);
T2OLO := REF(LLV(L, T20), 1);
T1OHI := REF(HHV(H, T10), 1);
T1OLO := REF(LLV(L, T10), 1);
AVGTR := REF(MA(TR, ATRLEN), 1);
//开始执行时 初始化数据
45 IF BARPOS=1 THEN BEGIN
POSITION := 0;
END //IF
//如果当前是没有持仓的状态
50 IF POSITION=0 AND BARPOS>T20 AND H>L THEN BEGIN
//建立多头进场条件
LONG := H > T2OHI;
//多头进场
IF LONG THEN BEGIN
MYENTRYPRICE := IF(OPEN>T2OHI+MINDIFF, OPEN, T2OHI+MINDIFF);
BUY(_DEBUG, POSNUM, LIMITR, MYENTRYPRICE);
POSITION := 1;
TURTLEUNITS := 1;
N := AVGTR;
BUYORDERTHISBAR := 1;
END //IF
|
|