设为首页收藏本站

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

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

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
跳转到指定楼层
1#
发表于 2007-9-13 22:20:57 |只看该作者 |倒序浏览
最近,总有一些朋友问到如何编写公式代码,来处理测试和自动交易的资金、持仓及成交价等信息不匹配的问题。此问题是自动交易一个普遍存在的问题,因此,单独开贴进行讨论。

首先,我们需要理清几个概念:

回溯测试:(Back-Testing),将交易系统应用到历史数据当中,产生相应的买卖动作,并根据这些买卖动作产生详细的测试报表。

自动交易:将回溯测试在最新数据(图表中最后一个Bar)下产生的买卖讯号,应用到指定的帐号中,进行实时自动交易。

根据上面的叙述,我们可以得知,回溯测试在图表中最后一个Bar的讯号反映到交易账户中即自动交易,但是实际运行中,很多情况下用户不会完全按照交易指令的指示进行交易。这样就会出现真实交易时,通过回归测试产生的交易数量及价格并不是我们期望的。这个时候就需要我们通过编写公式代码进行控制,达到预期的效果。(最完美的处理方式是尽量让测试资金,持仓和真实情况一致,这样就不需要进行任何同步操作,以下的信息也都可以忽略啦

在需要处理的情况下,可分为开仓和平仓两种情况,以下分别进行讨论。
已有 1 人评分威望 收起 理由
柳长街 + 198 老大辛苦了,加分鼓励

总评分: 威望 + 198   查看全部评分

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2007-9-13 22:23:10 |只看该作者

开仓的处理

开仓情况下,以多头买入为例:

在回溯测试中产生开仓买入的指令,然后将该指令应用到交易账户中,可能出现2种情况:
1、交易账户的资金和回溯测试的资金不匹配,此时我们应该按照交易帐户的资金量来进行开仓。
2、交易账户的持仓和回溯测试的持仓不匹配,此时我们应该考虑是进行仓位同步,还是忽略该买入操作。
大致的处理代码如下:
  1. If(BuyCondition) // 买入开仓条件满足
  2. {
  3.     lots = ...;       // 回溯测试计算出的交易数量
  4.     entryPrice = ...; // 回溯测试计算出的交易价格
  5.    
  6.     If(BarStatus == 2) // 当前Bar为最后的一个Bar
  7.     {
  8.         lots = (A_FreeMargin*0.2)/(Q_AskPrice*ContractsUnit*BigPointValue*MarginRatio); // 假定按照可用资金的20%开仓
  9.         lots = IntPart(lots);   // 取整
  10.         entryPrice = Q_AskPrice;        // 按当时的叫卖价买入
  11.         
  12.         If(CurrentContracts()!=A_TotalPosition()) // 回溯测试的仓位和真实仓位不一致
  13.         {
  14.             // 根据您的需要进行处理,A_TotalPosition是合计的仓位,可通过A_BuyPosition,A_SellPosition取出买卖持仓.
  15.         }              
  16.         Buy(lots,entryPrice);
  17.     }else
  18.     {
  19.         Buy(lots,entryPrice);   // 回溯测试的其他Bar直接买入
  20.     }
  21. }
复制代码

[ 本帖最后由 nopain 于 2007-9-14 10:36 编辑 ]

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
3#
发表于 2007-9-14 13:42:54 |只看该作者

平仓的处理

平仓的情况,以多头卖出为例:

在回溯测试中产生平仓买出的指令,然后将该指令应用到交易账户中,可能出现2种情况:
1、交易账户的持多仓不足,或者是持有空仓。这个时候我们可以是平掉不足的多仓,也可以选择忽略该平仓操作,还可以平掉空仓。
2、交易账户的持多仓比回溯测试要平的多,这个时候我们可以选择只平测试讯号产生的部分,也可以全部平掉。

大致的处理代码如下:
  1. If(SellCondition) // 卖出平仓条件满足
  2. {
  3.     lots = ...;      // 回溯测试计算出的交易数量
  4.     exitPrice = ...; // 回溯测试计算出的交易价格
  5.    
  6.     If(BarStatus == 2) // 当前Bar为最后的一个Bar
  7.     {      
  8.         exitPrice = Q_BidPrice; // 用当时的叫买价卖出
  9.         
  10.         If(CurrentContracts()!=A_TotalPosition()) // 回溯测试的仓位和真实仓位不一致
  11.         {
  12.             // 根据您的需要进行处理,A_TotalPosition是合计的仓位,可通过A_BuyPosition,A_SellPosition取出买卖持仓.
  13.         }
  14.         
  15.         If(A_BuyPosition >= lots)
  16.         {
  17.             Sell(lots,exitPrice);
  18.         }
  19.     }else
  20.     {
  21.         Sell(lots,exitPrice);   // 回溯测试的其他Bar直接卖出
  22.     }
  23. }
复制代码

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
1
UID
165
积分
55357
帖子
83
主题
11
阅读权限
200
注册时间
2007-8-22
最后登录
2011-2-11
4#
发表于 2007-9-14 15:15:56 |只看该作者
我最想知道的是怎样把买卖信号产生后在我的交易软件上实施成交,谢谢

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
5#
发表于 2007-9-14 15:26:30 |只看该作者
原帖由 柳长街 于 2007-9-14 15:15 发表
我最想知道的是怎样把买卖信号产生后在我的交易软件上实施成交,谢谢


你用交易开拓者做单不就可以啦!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
1
UID
165
积分
55357
帖子
83
主题
11
阅读权限
200
注册时间
2007-8-22
最后登录
2011-2-11
6#
发表于 2007-9-14 15:50:07 |只看该作者
原帖由 nopain 于 2007-9-14 15:26 发表


你用交易开拓者做单不就可以啦!



呵呵,不知道我在交易开拓者做单赚的钱你什么时候给我啊?给十分之一也行啊,其余的算是给您的回扣

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
7#
发表于 2007-9-14 16:05:15 |只看该作者
原帖由 柳长街 于 2007-9-14 15:50 发表



呵呵,不知道我在交易开拓者做单赚的钱你什么时候给我啊?给十分之一也行啊,其余的算是给您的回扣


早点用开拓者做实盘不就赚大发了

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
404
积分
1434
帖子
236
主题
74
阅读权限
60
注册时间
2007-9-23
最后登录
2014-7-25
8#
发表于 2007-9-27 19:05:41 |只看该作者
怎么进行回溯测试?

好像TB没有这个选项

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
9#
发表于 2007-9-27 21:21:03 |只看该作者
原帖由 skyline 于 2007-9-27 19:05 发表
怎么进行回溯测试?

好像TB没有这个选项


您的回溯测试是指什么?重放么,那是没有。
用模拟账户交易进行系统测试吧。

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
404
积分
1434
帖子
236
主题
74
阅读权限
60
注册时间
2007-9-23
最后登录
2014-7-25
10#
发表于 2007-9-28 16:04:40 |只看该作者
对的,我指重放。
像MTTrader那样

使用道具 举报

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

bottom

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

GMT+8, 2024-5-24 07:00

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部