
等级: 新手上路
- 注册:
- 2025-7-24
- 曾用名:
|
各位老师,想请问一下是不是公式编写的不对。第一次用pel编后台程序,目前编译正确但无法运行、且回测后所有数据都为0,我推测是不是有些函数的使用不恰当,比如我不太了解使用了DYNAINFO2()函数是不是就不能回测了;还是我的程序化条件没有设置好呢?
这是我比较核心想实现的动态调整:
//etf动态买卖的四个条件
//情况1:卖1量 < 买1量50% → 撤卖单并改卖2价
//情况2:卖1量 > 买1量 → 撤卖单改卖1价
//情况3:买1量 < 卖1量50% → 撤买单并改买2价
//情况4:买1量 > 卖1量 → 撤买单改买1价
非常希望老师可以指点,谢谢各位老师!
RUNMODE:1;
WARNING_DISABLE:9; // avoid WARNING
// 参数设置
TARGET:"513330";
init_capital:=1000000;
VARIABLE: LastBuyPrice = 0, LastSellPrice = 0;
//数据标识
{BUY1:=DYNAINFO2(28,TARGET);
BUY1_VOL:=DYNAINFO2(29,TARGET);
BUY2:=DYNAINFO2(30,TARGET);
SELL1:=DYNAINFO2(34,TARGET);
SELL1_VOL:= DYNAINFO2(35,TARGET);
SELL2:=DYNAINFO2(32,TARGET);// NO USE since the price keeps changing.}
//可用资金,每次买入时用一半的可用资金
avail_cash:TACCOUNT2(19,"18059801029");
buy_vol:= INTPART(0.5*AVAIL_CASH/DYNAINFO2(28,TARGET));//NO NEED to execute.
//当目前无买入委托时买1价开仓
Bcount:= TSUBMITID(1, '', '', 2, 1);// N=1(开多), S=2(未成交笔数), T=1(当前策略)
Bexist:= Bcount=0; //若买入委托=0则输出1,否则为0
IF THOLDING=0 AND Bexist AND TIME<144500 THEN BEGIN
TBUY(1,BUY_VOL,LMT,DYNAINFO2(28,TARGET));
LastBuyPrice := DYNAINFO2(28, TARGET);
DEBUGFILE('d:\trade.log', '[时间='&numtostr(TIME,0)&'' & '类型=初始买' & '价格='&numtostr(LastBuyPrice,2)&''
& '委托量='&numtostr(BUY_VOL,0)&']',0);
END
//目前无卖出委托时卖1价平仓
Ccount:= TSUBMITID(2, '', '', 2, 1); // N=2(平多), S=2(未成交笔数), T=1(当前策略)
Cexist:= CCOUNT=0; //若卖出委托=0则输出1,否则为0
IF THOLDING > 0 AND Cexist AND TIME < 145900 THEN BEGIN
TSELL(1 ,THOLDING, LMT, DYNAINFO2(34,TARGET));// NEED TO REWRITE. Logic is wrong here.
LastSellPrice := DYNAINFO2(34, TARGET);
DEBUGFILE('d:\trade.log', '[时间='&NUMTOSTR(TIME,0)&' 类型=初始卖'& ' 价格='&NUMTOSTR(LastSellPrice,2)&
' 委托量='&NUMTOSTR(THOLDING,0)&']',0);
END
//动态买卖的四个条件
//情况1:卖1量 < 买1量50% → 撤卖单并改卖2价
//情况2:卖1量 > 买1量 → 撤卖单改卖1价
//情况3:买1量 < 卖1量50% → 撤买单并改买2价
//情况4:买1量 > 卖1量 → 撤买单改买1价
COND1:= DYNAINFO2(35,TARGET) < DYNAINFO2(29, TARGET)*0.5;
COND2:= DYNAINFO2(35,TARGET) > DYNAINFO2(29, TARGET);
COND3:= DYNAINFO2(29,TARGET) < DYNAINFO2(35, TARGET)*0.5;
COND4:= DYNAINFO2(29,TARGET) > DYNAINFO2(35, TARGET);
IF COND1 AND LastSellPrice !=DYNAINFO2(32,TARGET) AND TIME <145900 THEN BEGIN
IF TCANCEL(THOLDING>0,0) = 0 THEN BEGIN
DEBUGFILE('d:\error.log', '时间=%t 撤卖单失败',TIME);
END
ELSE IF 1 THEN BEGIN
TCANCEL(THOLDING>0,0);
TSELL(THOLDING>0, THOLDING, LMT, DYNAINFO2(32,TARGET));
LastSellPrice := DYNAINFO2(32, TARGET);
//日志记录
DEBUGFILE('d:\trade.log', '[时间='&numtostr(TIME,0)&'' & '类型=卖调' & '原价='&numtostr(REF(LastSellPrice,1),2)&''
& '新价='&numtostr(LastSellPrice,2)&'' & '委托量='&numtostr(THOLDING,0)&']',0);
END
END
ELSE IF COND2 AND LastSellPrice !=DYNAINFO2(34,TARGET) AND TIME <145900 THEN BEGIN
IF TCANCEL(THOLDING>0,0) = 0 THEN BEGIN
DEBUGFILE('d:\error.log', '时间=%t 撤卖单失败',TIME);
END
ELSE IF 1 THEN BEGIN
TCANCEL(THOLDING>0,0);
TSELL(THOLDING>0, THOLDING, LMT, DYNAINFO2(34,TARGET));
LastSellPrice := DYNAINFO2(34, TARGET);
//日志记录
DEBUGFILE('d:\trade.log', '[时间='&numtostr(TIME,0)&'' & '类型=卖调' & '原价='&numtostr(REF(LastSellPrice,1),2)&''
& '新价='&numtostr(LastSellPrice,2)&'' & '委托量='&numtostr(THOLDING,0)&']',0);
END
END
IF COND3 AND LastBuyPrice !=DYNAINFO2(30,TARGET) AND TIME<144500 THEN BEGIN
IF TCANCEL(1,1)=0 THEN BEGIN
DEBUGFILE('d:\error.log', '时间=%t 撤买单失败',TIME);
END
ELSE IF 1 THEN BEGIN
TCANCEL(1,1);
AVAIL_CASH:=TACCOUNT2(19,"18059801029");
BUY_VOL:= INTPART(0.5*AVAIL_CASH/DYNAINFO2(30,TARGET));
TBUY(1,BUY_VOL, LMT, DYNAINFO2(30,TARGET));
LastBuyPrice := DYNAINFO2(30, TARGET);
//日志记录
DEBUGFILE('d:\trade.log', '[时间='&numtostr(TIME,0)&'' & '类型=买调' & '原价='&numtostr( REF(LastBuyPrice,1),2)&''
& '新价='&numtostr(LastBuyPrice,2)&'' & '新委托量='&numtostr(BUY_VOL,0)&']',0);
END
END
ELSE IF COND4 AND LastBuyPrice !=DYNAINFO2(28,TARGET) AND TIME<144500 THEN BEGIN
IF TIME >=144500 THEN BEGIN
TCANCEL(1,1);
END
IF TCANCEL(1,1)=0 THEN BEGIN
DEBUGFILE('d:\error.log', '时间=%t 撤买单失败',TIME);
END
ELSE IF 1 THEN BEGIN
TCANCEL(1,1);
AVAIL_CASH:=TACCOUNT2(19,"18059801029");
BUY_VOL:= INTPART(0.5*AVAIL_CASH/DYNAINFO2(28,TARGET));
TBUY(1,BUY_VOL, LMT, DYNAINFO2(28,TARGET));
LastBuyPrice := DYNAINFO2(28, TARGET);
//日志记录
DEBUGFILE('d:\trade.log', '[时间='&numtostr(TIME,0)&'' & '类型=买调' & '原价='&numtostr( REF(LastBuyPrice,1),2)&''
& '新价='&numtostr(LastBuyPrice,2)&'' & '新委托量='&numtostr(BUY_VOL,0)&']',0);
END
END
ELSE IF TIME>=144500 THEN BEGIN
TCANCEL(1,1);
END
//尾盘自动清仓
IF TIME > 145900 THEN BEGIN
TCANCEL(1,0);
TSELL(1, THOLDING, MKT);
END
|
|