设为首页收藏本站

 找回密码
 注册
楼主: nopain
打印 上一主题 下一主题

关于回溯测试和自动交易同步的处理 [复制链接]

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
11#
发表于 2007-12-21 16:55:06 |只看该作者

提问题

有两个问题:
1、当前最后一个bar历史回溯中开仓条件满足,执行真实帐户的开仓操作,图上应该还没出现交易指令产生的买入标志,当新的bar出现时,刚才的bar是否还会重画历史回溯测试产生的开仓标志?如果重画,是不是程序按每tick都会从currentbar==0起再执行一次,如果是这样,一切都可以理解了。
2、A_SellPosition是一个正数还是负数?
TradeBlazer交流群33647992。

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
12#
发表于 2007-12-21 20:22:46 |只看该作者
  1. if(根据图表产生开仓条件)
  2. {
  3.    If(AccountDataExist and barstatus==2 and A_TotalPosition==0)
  4.      {
  5.         oneMargin = Q_Last*ContractUnit()*BigPointValue()*MarginRatio();
  6.         TotalEquity=A_FreeMargin;
  7.          lots = IntPart((TotalEquity*EntryRatio)/oneMargin);
  8.          myEntryprice=Q_AskPrice;
  9.          buy(lots,myEntryprice);
  10.     }Else
  11.     {       
  12.          oneMargin = low*ContractUnit()*BigPointValue()*MarginRatio();
  13.         TotalEquity = CurrentCapital()+ Abs(CurrentContracts())*oneMargin;
  14.          lots = IntPart((TotalEquity*EntryRatio)/oneMargin);
  15.          buy(lots,low);
  16.          setglobalvar(0,low);
  17.          commentary("此次开仓价为:"+text(low));
  18.    }
  19. }
复制代码

帮看一下上面的代码是否达到了同步的目的?开仓标志是否可以比实际帐户发出委托并成交后稍迟一点也出现在最后一根bar上?
TradeBlazer交流群33647992。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
13#
发表于 2007-12-21 22:21:59 |只看该作者
原帖由 孤舟骑浪 于 2007-12-21 16:55 发表
有两个问题:
1、当前最后一个bar历史回溯中开仓条件满足,执行真实帐户的开仓操作,图上应该还没出现交易指令产生的买入标志,当新的bar出现时,刚才的bar是否还会重画历史回溯测试产生的开仓标志?如果重画,是不是程序按每tick ...


1、对最后一个Bar上真实账户交易,如果用Buy,Sell等函数写的交易动作,会在图上产生讯号。当这个Bar变成倒数第二个Bar时,它仍然会被执行一次(不是从头开始算,只计算最后1个或2个Bar)。这个时候就会执行(BarStatus!=2)的分支,然后数量和价格也许会产生些许变化,但讯号应该还在。我们写代码时需要达到这样的效果,否则就会出现问题。
2、正数。
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
14#
发表于 2007-12-21 22:23:10 |只看该作者
原帖由 孤舟骑浪 于 2007-12-21 20:22 发表
if(根据图表产生开仓条件)
{
   If(AccountDataExist and barstatus==2 and A_TotalPosition==0)
     {
        oneMargin = Q_Last*ContractUnit()*BigPointValue()*MarginRatio();
        TotalEquity=A_FreeMar ...


不能这么写,最好在条件的最外层放BarStatus的判断。
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
15#
发表于 2007-12-22 09:26:55 |只看该作者
  1. if(根据图表产生开仓条件)
  2. {
  3.    If(barstatus==2)
  4.      {
  5.         oneMargin = Q_Last*ContractUnit()*BigPointValue()*MarginRatio();
  6.         TotalEquity=A_FreeMargin;
  7.          lots = IntPart((TotalEquity*EntryRatio)/oneMargin);
  8.          myEntryprice=Q_AskPrice;
  9.          buy(lots,myEntryprice);
  10.     }Else
  11.     {        
  12.          oneMargin = low*ContractUnit()*BigPointValue()*MarginRatio();
  13.         TotalEquity = CurrentCapital()+ Abs(CurrentContracts())*oneMargin;
  14.          lots = IntPart((TotalEquity*EntryRatio)/oneMargin);
  15.          buy(lots,low);
  16.          setglobalvar(0,low);
  17.          commentary("此次开仓价为:"+text(low));
  18.    }
  19. }
复制代码

根据nopain前面的实例,这段程序只要删掉一些条件内容就和实例差不多了,如上,应该可以了吧.
根据tradeblazer的描述,原来是当真实帐户产生交易时,在最后一个bar会产生开仓讯号并且开仓数量和真实帐户所开仓数一致,当开仓的bar变为倒数第二根bar时,倒数第二根bar会执行一次分枝条件,重新计算测试帐户的价格和开仓数量,并且重画开仓讯号,就是这样理解了.
TradeBlazer交流群33647992。

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
1
UID
727
积分
3770
帖子
537
主题
55
阅读权限
80
注册时间
2007-11-11
最后登录
2015-4-8
16#
发表于 2007-12-24 10:29:40 |只看该作者
现在是达到了测试和实盘同步了,只是首次开仓讯号的开仓数量与真实帐户并不同,变为倒数第二根后,才调整回正常的数值,不过已不伤大雅了.正在偷笑中
TradeBlazer交流群33647992。

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
377
积分
1827
帖子
222
主题
29
阅读权限
70
注册时间
2007-9-19
最后登录
2021-12-9
17#
发表于 2008-1-23 11:39:04 |只看该作者
我不能理解这句
exitPrice = Q_BidPrice; // 用当时的叫买价卖出
、、、
、、、
Sell(lots,exitPrice);


exitPrice 函数,获得最近平仓位置的平仓价格。那应该是已经平仓结束之后的取出平仓的值
exitPrice = Q_BidPrice; 这句看起来是把他当作一个变量进行赋值了。


exitPrice = Q_BidPrice; // 用当时的叫买价卖出
、、、
、、、
Sell(lots,exitPrice);
这样,好似看起来是,在没平仓之前 ,抢先给函数赋值。
我看着有点晕。
帮着解释一下吧。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
18#
发表于 2008-1-23 11:53:00 |只看该作者
不能用exitPrice作为变量吧。已经是系统函数了
应该是myExitprice吧。
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 6Rank: 6

精华
0
UID
377
积分
1827
帖子
222
主题
29
阅读权限
70
注册时间
2007-9-19
最后登录
2021-12-9
19#
发表于 2008-1-23 14:09:19 |只看该作者
是的啊,
我也觉得应该是这样的
谢了

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
314
积分
1160
帖子
247
主题
105
阅读权限
60
注册时间
2007-9-9
最后登录
2008-3-3
20#
发表于 2008-1-23 22:37:23 |只看该作者
好,很好,非常好,希望有一天能把这些问题,整理出来,编成CHM文件,或者编成一本书
欢迎加入交易开拓者QQ群:38529330,让我们一起交流,一起提高,一起赚钱吧。。。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-5 23:59

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部