设为首页收藏本站

 找回密码
 注册
查看: 2234|回复: 1
打印 上一主题 下一主题

A、Q函数盘后测试的探讨 [复制链接]

Rank: 3Rank: 3

精华
0
UID
58206
积分
181
帖子
54
主题
31
阅读权限
40
注册时间
2011-8-7
最后登录
2019-1-20
跳转到指定楼层
1#
发表于 2012-9-13 12:24:33 |只看该作者 |倒序浏览
    我一直苦于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

Rank: 1

精华
0
UID
223118
积分
16
帖子
13
主题
3
阅读权限
10
注册时间
2015-11-13
最后登录
2018-7-17
2#
发表于 2016-9-6 17:20:18 |只看该作者
你好,请问SELL与A_Sendorder的运行原理差别是什么呢?没有资料能看明白,非常感谢!

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-22 08:39

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部