2007-7-21 20:13
nopain
一个简单交易系统的自动交易测试
该交易系统很简单,主要是为了测试自动交易的真实效果。
基本交易规则如下:
[b]开仓条件:[/b]
1、当前无持仓;
2、当前Bar的收盘价>上一个Bar收盘价,即开多仓,反之,则开空仓。
[b]反转条件:[/b]
1、盈利达到设定的点数即平仓,并马上反转。
[b]止损条件:[/b]
1、亏损大于设定的点数即平仓,止损平仓之后并马上反转。
[b]平仓条件:[/b]
1、到收市前,即全部平仓。
本交易系统有三个参数,lots为交易数量,WinDots为获利的点数,LossDots为止损的点数。所谓1个点是指应用商品的最小变动单位,本次测试的ru0709最小变动单位为5。
本次测试所选取的参数为(1,5,3),根据公式里的写法,以买入举例:当价格>25(5*5)时即反转,考虑到最小变动为5,即卖出条件为价格等于买入价格+30。条件建仓时,选择了延迟1个Tick发送,因此会到下一个Tick才以上一Tick的Close价发送委托,如Close价和开盘价不相同,以开盘价发送。当价格<=15时,即止损(即时发送,无延迟),并反转建仓。
[code]
Params
Numeric lots(1);
Numeric WinDots(5);
Numeric LossDots(3);
Vars
Numeric MinMovePrice;
Numeric preMP;
Numeric curMP;
Begin
MinMovePrice = MinMove * PriceScale;
preMP = MarketPosition;
If(Time > 0.145930 && Time < 0.150030 ) // 收盘平仓
{
If(preMP == 1)
{
Sell;
return;
}else if(preMP == -1)
{
BuyToCover;
return;
}
return;
}
If(preMP == 0)
{
If(Close > Close[1])
{
Buy(lots,high,true);
}Else If(Close < Close[1])
{
SellShort(lots,low,true);
}
}Else If(preMP == 1) // long
{
If (Close > AvgEntryPrice() + MinMovePrice *WinDots ) // 获利反转
{
SellShort(lots,low,true);
}
}else If(preMP == -1) // short
{
If (Close < AvgEntryPrice() - MinMovePrice *WinDots ) // 获利反转
{
Buy(lots,high,true);
}
}
SetStopLoss(1, ContractUnit *BigPointValue *LossDots*MinMovePrice, true); // 止损平仓
CurMP = MarketPosition;
If (preMP == 1 && curMP == 0) // 止损之后反转,多反空
{
SellShort(lots,low);
}else if(preMP==-1 && curMP==0) // 止损之后反转,空反多
{
Buy(lots,high);
}
End
[/code]
[[i] 本帖最后由 nopain 于 2007-10-18 20:28 编辑 [/i]]
2007-7-21 20:32
ATL
好。
TBL中{ and } 这两个玩意没有就好了。
2007-7-21 23:34
skywalker
[quote]原帖由 [i]ATL[/i] 于 2007-7-21 20:32 发表 [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=73&ptid=29][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url]
好。
TBL中{ and } 这两个玩意没有就好了。 [/quote]
没有{},你就写不出复合语句;没有复合语句,你就无法实现大型、复杂的策略了。
2007-7-30 17:09
大一
上面的例子中:
preMP = MarketPosition;
CurMP = MarketPosition;
这两个变量怎么定义同样的内容 ?
2007-7-30 18:14
nopain
[quote]原帖由 [i]大一[/i] 于 2007-7-30 17:09 发表 [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=393&ptid=29][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url]
上面的例子中:
preMP = MarketPosition;
CurMP = MarketPosition;
这两个变量怎么定义同样的内容 ? [/quote]
一个是执行交易操作前的持仓状态,一个是执行交易后。
就相当于,一个是早上开盘前的持仓状态,一个是收盘后的。。。
2007-7-30 20:31
大一
能否讲解一下下面函数的含义 ?
假设以橡胶为例子:
MinMove 当前公式应用商品的最小变动量 (这个是不是 5 ?)
PriceScale 当前公式应用商品的计数单位 (这个不知道是什么意思)
ContractUnit 当前公式应用商品的每张合约包含的基本单位数量 (这个是不是也是5?)
BigPointValue 当前公式应用商品数据的一个整数点的价值 (这个是5还是25 ?)
2007-7-30 21:06
nopain
[quote]原帖由 [i]大一[/i] 于 2007-7-30 20:31 发表 [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=397&ptid=29][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url]
能否讲解一下下面函数的含义 ?
假设以橡胶为例子:
MinMove 当前公式应用商品的最小变动量 (这个是不是 5 ?)
PriceScale 当前公式应用商品的计数单位 (这个不知道是什么意思)
ContractUnit 当前公式应用商品的每 ... [/quote]
MinMove = 5; 橡胶最小变动值为5个整数点。
PriceScale = 1; 橡胶的计数单位为1,没有小数,沪深300股指期货的PriceScale为0.01。
ContractUnit = 5; 橡胶的合约单位为5,即5吨每手,沪深300股指期货的ContractUnit为1;
BigPointValue = 1; 橡胶的每点价值为1,即每个整数点价值1元。沪深300股指期货的BigPointValue 为300;
2007-7-30 22:27
大一
非常感谢,你解释的非常清楚!:handshake
2007-8-12 11:34
stevehans
有意思,我的模拟账户还不能用啊。真想试一下。
2007-8-12 14:53
stevehans
我把上面的源码复制到指标里了。又点了插入交易指令,是不是明天开盘,就能够自动交易了。还有能不能对以前的数据作一个收益测试,怎么操作阿。
2007-8-12 16:43
nopain
[quote]原帖由 [i]stevehans[/i] 于 2007-8-12 14:53 发表 [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=623&ptid=29][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url]
我把上面的源码复制到指标里了。又点了插入交易指令,是不是明天开盘,就能够自动交易了。还有能不能对以前的数据作一个收益测试,怎么操作阿。 ... [/quote]
您应该新建一个交易指令,把上面的代码copy过去,编译保存,然后插入图表中,并在交易指令设置界面中选中模拟账户并启动自动交易。
关于测试交易指令,请查看帮助文件!
2007-8-24 20:14
zscad
斑竹期货高手
我下载交易软件,向你学习
2007-8-27 17:06
guidaon
MinMovePrice = MinMove * PriceScale;
preMP = MarketPosition;
If(Time > 0.145930 && Time < 0.150030 && preMP!=0) // 收盘平仓
{
If(preMP == 1)
{
Sell;
}else if(preMP == -1)
{
BuyToCover;
}
}
学习
2007-8-28 08:33
mht88
请教楼主,当交易数量改为10手的时候Numeric lots(10),相同测试期间,1手交易了39次,而10手却交易了500多次,不知是什么原因,请楼主指教,谢谢!
2007-8-28 14:37
nopain
[quote]原帖由 [i]mht88[/i] 于 2007-8-28 08:33 发表 [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=1525&ptid=29][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url]
请教楼主,当交易数量改为10手的时候Numeric lots(10),相同测试期间,1手交易了39次,而10手却交易了500多次,不知是什么原因,请楼主指教,谢谢! [/quote]
请问您说的交易39次和500次是测试报表里面还是真实交易,能不能把其他设置信息(商品,周期,时间范围等)都列出来,方便进行测试及跟踪。
2007-8-28 16:08
mht88
只是测试报表里交易次数是不同的,用模拟帐户交易,不能自动成交,信号出现后总是提示"持仓不足,该交易操作被取消".
如果手动交易一次,有持仓了,下面的操作才会进行下去.
2007-8-28 16:12
mht88
[quote]原帖由 [i]nopain[/i] 于 2007-8-28 14:37 发表 [url=http://www.tradeblazer.net/forum/redirect.php?goto=findpost&pid=1533&ptid=29][img]http://www.tradeblazer.net/forum/images/common/back.gif[/img][/url]
请问您说的交易39次和500次是测试报表里面还是真实交易,能不能把其他设置信息(商品,周期,时间范围等)都列出来,方便进行测试及跟踪。 [/quote]
我只设置了一个品种,ru0711,测试没有其他品种的成交,全是一个品种的,但为什么一手和十手的交易次数却不一样.
2007-8-28 16:23
mht88
模拟账户是五十万的,所以我想一次做十手,就改成Numeric lots(10),没想到出现这样的情况.
2007-8-28 16:36
mht88
楼主在"一个文华交易系统的移植例子"里的系统, 我试了一下,将交易数量改为十手,没出现问题.
2007-8-28 16:41
nopain
检查了一下,发现是SetStopLoss函数处理平仓的时候有个Bug!谢谢您的测试~:)
已经修改好了,您先暂时用着吧!等几天就升级了
页:
[1]
2
3
4
5
Powered by Discuz! Archiver 5.5.0
© 2001-2006 Comsenz Inc.