- 精华
- 0
- 在线时间
- 365 小时
- UID
- 58206
- 积分
- 181
- 帖子
- 54
- 阅读权限
- 40
- 注册时间
- 2011-8-7
- 最后登录
- 2019-1-20
- 精华
- 0
- UID
- 58206
- 积分
- 181
- 帖子
- 54
- 主题
- 31
- 阅读权限
- 40
- 注册时间
- 2011-8-7
- 最后登录
- 2019-1-20
|
我一直苦于A、Q这类账户函数无法进行盘后测试,也就很难调试(盘中时间太短了)。但是TB4有一个很好的工具:数据回放,经试验,盘后用它可以仿照盘中的历史进行回放,而且开、平仓等也都有反映,只是由于账户交易服务器不参与工作,所以无法在账面上反映出来。我的想法是将每次开、平仓是的点位数记录下来,统计后就可得知此程序实际工作时的盈亏数据(当然与实盘相比还差一个滑差问题)。
开始时我用“FileAppend”函数记录每次的开、平仓数据,然后人工统计,这是没有问题了。但是每次人工统计毕竟太慢、太耗时,而且易错。所以就想将每次的开、平仓数据都自动进入累加器,让程序自动计算。但是由于我学业不精,始终未能成功。
但是我确信一定能成的,只是不知自己迷在哪里了。所以将其写出来,一则交流,一则请教。
所附原理程序是为套利程序设想的,请大家帮助我。如果成功,盘后调试程序就成功了一大半。另外一半就是自动优化问题了。非常感谢帮助我的朋友!
附原理程序:
arams
Vars
NumericSeries Data0Value(1);//设Date0Value为序列变量
NumericSeries Data1Value(1);//设Date1Value为序列变量
Numeric i;//增量计数器
Numeric j;//增量计数器
Begin
If (BarStatus == 0)
{
各种赋值
}
Else If(BarStatus == 2 )//进入实时交易
{
If(A-平仓条件成立)
{
Data0.A_SendOrder(Enum_Sell,Enum_Exit,Data0Lots,Data0.Q_BidPrice-OffsetPoint*MinMove*PriceScale);//Data0卖出平多
Data0Value=Data0Value[i]+(Data0.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
i=i+1;
Data1.A_SendOrder(Enum_Buy,Enum_Exit,Data1Lots,Data1.Q_AskPrice+OffsetPoint*MinMove*PriceScale);//Data1买入平空
Data1Value=Data1Value[j]-(Data1.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
j=j+1;
FileAppend("D:\\TotalTaoli.log","Data0平仓收益="+Text(Data0Value));
FileAppend("D:\\TotalTaoli.log","Data1平仓收益="+Text(Data1Value));
}
If(B-平仓条件成立)
{
Data0.A_SendOrder(Enum_Buy,Enum_Exit,Data0Lots,Data0.Q_AskPrice+OffsetPoint*MinMove*PriceScale);//Data0买入平空
Data0Value=Data0Value[i]-(Data0.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
i=i+1;
Data1.A_SendOrder(Enum_Sell,Enum_Exit,Data1Lots,Data1.Q_BidPrice-OffsetPoint*MinMove*PriceScale);//Data1卖出平多
Data1Value=Data1Value[j]+(Data1.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
j=j+1;
FileAppend("D:\\TotalTaoli.log","Data0平仓收益="+Text(Data0Value));
FileAppend("D:\\TotalTaoli.log","Data1平仓收益="+Text(Data1Value));
}
If(A-开仓条件成立)
{
Data0.A_SendOrder(Enum_Buy,Enum_Entry,Data0Lots,Data0.Q_AskPrice+OffsetPoint*MinMove*PriceScale);//Data0买多
Data0Value=Data0Value[i]-(Data0.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
i=i+1;
Data1.A_SendOrder(Enum_Sell,Enum_Entry,Data1Lots,Data1.Q_BidPrice-OffsetPoint*MinMove*PriceScale);//Data1买空
Data1Value=Data1Value[j]+(Data1.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
j=j+1;
FileAppend("D:\\TotalTaoli.log","Data0开仓="+Text(Data0Value));
FileAppend("D:\\TotalTaoli.log","Data1开仓="+Text(Data1Value));
}
If(B-开仓条件成立)
{
Data0.A_SendOrder(Enum_Sell,Enum_Entry,Data0Lots,Data0.Q_BidPrice-OffsetPoint*MinMove*PriceScale);//Date0买空
Data0Value=Data0Value[i]+(Data0.Q_BidPrice-OffsetPoint*MinMove*PriceScale);
i=i+1;
Data1.A_SendOrder(Enum_Buy,Enum_Entry,Data1Lots,Data1.Q_AskPrice+OffsetPoint*MinMove*PriceScale);//Data1买多
Data1Value=Data1Value[j]-(Data1.Q_AskPrice+OffsetPoint*MinMove*PriceScale);
j=j+1;
FileAppend("D:\\TotalTaoli.log","Data0开仓="+Text(Data0Value));
FileAppend("D:\\TotalTaoli.log","Data1开仓="+Text(Data1Value));
}
}
End |
|