- 精华
- 1
- 在线时间
- 964 小时
- UID
- 727
- 积分
- 3770
- 帖子
- 537
- 阅读权限
- 80
- 注册时间
- 2007-11-11
- 最后登录
- 2015-4-8
- 精华
- 1
- UID
- 727
- 积分
- 3770
- 帖子
- 537
- 主题
- 55
- 阅读权限
- 80
- 注册时间
- 2007-11-11
- 最后登录
- 2015-4-8
|
问题基本弄清,一因为没有平仓指令,那么整个样本内就只当作一次还没有完成的交易(完整的一次交易最少包括一次开,一次平),你在交易设置中的可连续开次数(假如默认为5次),已在回测时被使用完了,所以,要设计一个交易系统,必须起码有一个开仓,一个平仓;第二,程序中没有加入每根BAR限开一次的代码,那么就存在了同一根BAR可能被开仓几次的可能,更尽早使用完了设置的次数.下面我用每日开盘价作参考,每日收盘平仓,交易设置中可连续开的次数设为10次.自己再琢磨修改吧.不要回测讯号是危险的,有回测更易发现问题所在.就此不回复了,今天的电脑速度太慢,编译一次都要20分钟,所以做不成工了.你的思路把它颠倒做还可以,自己看着办吧.
- //------------------------------------------------------------------------
- // 简称: Addsellposition
- // 名称: Addsellposition
- // 类别: 交易指令
- // 类型: 空头建仓
- // 输出:
- //------------------------------------------------------------------------
- //只用当日的开盘价作参考点吧,收盘平仓。
- params
- numeric updots(5);
- vars
- numeric i;
- boolseries btoday(false);
- boolseries bsellentry(false);
- numericseries openprice;
- begin
- if(time>=0.0900 and time<0.1457)
- {
- if(btoday[1]==false)
- {
- btoday=true;
- openprice=open;
- }Else
- {
- btoday=btoday[1];
- openprice=open[1];
- }
- for i=1 to 10
- {
- if(high>=openprice+i*updots*minmove*pricescale and high<=openprice+(i+1)*updots*minmove*pricescale and and bsellentry==false and abs(currentcontracts())<i)
- {
- sellshort(1,high);
- commentary("此时已开"+text(i)+"手。");
- bsellentry=true;
- }
- }
- }
- if(time>=0.1457)
- {
- if(marketposition==-1)
- {
- buytocover;
- }
- }
- end
复制代码 |
|