开拓者期货期权程序化系统交易论坛
标题:
初学,试着写个均线系统又修改了下,附测试结果
[打印本页]
作者:
louhai3
时间:
2009-4-24 14:06:20
标题:
初学,试着写个均线系统又修改了下,附测试结果
我刚接触TB想自己练练手,所以写个系统,希望能得到老师指导
随便定了个交易系统,纯粹练习用
开仓条件
1.当前无持仓
,
a.10日均线上穿20日均线,现价开多仓,
b.20日均线上穿10日均线,现价开空仓。
2.当前持多仓
a.20日均线上穿10日均线,平仓并反转
3.当前持空仓
a.10日均线上穿20日均线,平仓并反转
4.持仓数量
a.为总资金的10%
5.没有止损
先收集点函数
Average求平均函数
上穿用crossover
buy 多头建仓
sellshort空头建仓
MarketPosition获得当前持仓状态
CurrentCapital()获得当前可用资金
IntPart取整数
ContractUnit每张合约的基本单位数
[
本帖最后由 louhai3 于 2009-4-27 13:21 编辑
]
作者:
louhai3
时间:
2009-4-24 15:03:38
先写个中文的,看看通不通逻辑
参数
数值型 均线a(10);
数值型 均线b(20);
变量
等下再补
Begin
If(无仓)
{
If(10日均线上穿20日均线)
{
Buy();
}Else If(20日均线上穿10日均线)
{
SellShort();
}
}Else IF(已有多仓)
{
If(20日均线上穿10日均线)
{
SellShort();
}
}else IF(已有空仓)
{
If(10日均线上穿20日均线)
{
Buy();
}
}
End
[
本帖最后由 louhai3 于 2009-4-24 15:25 编辑
]
作者:
louhai3
时间:
2009-4-24 16:10:55
Params
Numeric TenLength(10);
Numeric TtyLength(20);
Vars
Numeric TenAverage;
Numeric TtyAverage;
Numeric TradeUnits;
Numeric Trademoney;
Numeric Contractprice;
Begin
TenAverage = Average(Close,TenLength);
TtyAverage = Average(Close,TtyLength);
Trademoney = 0.1*CurrentCapital();
Contractprice = ContractUnit*Close;
TradeUnits = IntPart(Trademoney/Contractprice);
[
本帖最后由 louhai3 于 2009-4-24 16:45 编辑
]
作者:
louhai3
时间:
2009-4-24 17:07:53
10日均线上穿20均线
crossover(TenAverage,TtyAverage)
20日均线上穿10均线
crossover(TtyAverage,TenAverage)
作者:
louhai3
时间:
2009-4-24 17:16:57
把所有代入后结果如下:
Params
Numeric TenLength(10); //短期均线参数
Numeric TtyLength(20); //长期均线参数
Vars
Numeric TenAverage; //短期均线
Numeric TtyAverage; //长期均线
Numeric TradeUnits; //可交易的合约数量
Numeric Trademoney; //允许交易的金额
Numeric Contractprice; //单张合约金额
Begin
TenAverage = Average(Close,TenLength);
TtyAverage = Average(Close,TtyLength);
If(MarketPosition == 0) //无仓位
{
Trademoney = 0.1*CurrentCapital();
Contractprice = ContractUnit*Close;
TradeUnits = IntPart(Trademoney/Contractprice);
If(crossover(TenAverage,TtyAverage)) //10日均线上穿20日均线
{
Buy(TradeUnits,Close); //开多仓
}Else If(crossover(TtyAverage,TenAverage)) //20日均线上穿10日均线
{
SellShort(TradeUnits,Close); //开空仓
}
}Else IF(MarketPosition == 1) //有多仓
{
If(crossover(TtyAverage,TenAverage)) //20日均线上穿10日均线
{
SellShort(TradeUnits,Close); //平多仓,并反转
}
}else IF(MarketPosition == -1) //有空仓
{
If(crossover(TenAverage,TtyAverage)) //平空仓,并反转
{
Buy(TradeUnits,Close); //平空仓,并反转
}
}
End
[
本帖最后由 louhai3 于 2009-4-24 18:01 编辑
]
作者:
louhai3
时间:
2009-4-24 18:00:16
好像写完了,也看不出毛病,等老师看看吧
还有要不要加 return;
先谢了
作者:
louhai3
时间:
2009-4-24 22:13:25
试了一下,不能通过
要改成如下才能通过
Params
Numeric TenLength(10); //短期均线参数
Numeric TtyLength(20); //长期均线参数
Vars
Numeric TenAverage; //短期均线
Numeric TtyAverage; //长期均线
Numeric TradeUnits; //可交易的合约数量
Numeric Trademoney; //允许交易的金额
Numeric Contractprice; //单张合约金额
Begin
If(MarketPosition == 0) //无仓位
{
Trademoney = 0.1*CurrentCapital();
Contractprice = ContractUnit*Close;
TradeUnits = IntPart(Trademoney/Contractprice);
If(crossover(Average(Close,TenLength),Average(Close,TtyLength))) //10日均线上穿20日均线
{
Buy(TradeUnits,Close); //开多仓
}Else If(crossover(Average(Close,TtyLength),Average(Close,TenLength))) //20日均线上穿10日均线
{
SellShort(TradeUnits,Close); //开空仓
}
}Else IF(MarketPosition == 1) //有多仓
{
If(crossover(Average(Close,TtyLength),Average(Close,TenLength))) //20日均线上穿10日均线
{
SellShort(TradeUnits,Close); //平多仓,并反转
}
}else IF(MarketPosition == -1) //有空仓
{
If(crossover(Average(Close,TenLength),Average(Close,TtyLength))) //10日均线上穿20日均线
{
Buy(TradeUnits,Close); //平空仓,并反转
}
}
End
知道了
可能Numeric TenAverage; //短期均线
Numeric TtyAverage; //长期均线
要设成序列型的
[
本帖最后由 louhai3 于 2009-4-24 22:15 编辑
]
作者:
九九归一
时间:
2009-4-25 14:19:02
挺有条理...............
作者:
李晓东
时间:
2009-4-25 20:45:33
contractunit那句是不是错了?虽然通过了,但是在合约上测试有开仓么?
作者:
louhai3
时间:
2009-4-27 13:22:02
Params
Numeric TenLength(10); //短期均线参数
Numeric TtyLength(20); //长期均线参数
Vars
NumericSeries TenAverage; //短期均线
NumericSeries TtyAverage; //长期均线
Numeric TradeUnits; //可交易的合约数量
Numeric Trademoney; //允许交易的金额
Numeric Contractprice; //单张合约金额
Numeric preBuyprice;
Numeric preSellprice;
Numeric Winmoney;
Begin
TenAverage = Average(Close,TenLength);
TtyAverage = Average(Close,TtyLength);
If(MarketPosition == 0) //无仓位
{
Trademoney = 0.1*CurrentCapital();
Contractprice = ContractUnit*Close;
TradeUnits = IntPart(Trademoney/Contractprice);
If(crossover(TenAverage,TtyAverage)) //10日均线上穿20日均线
{
Buy(TradeUnits,Close); //开多仓
SetGlobalVar(0,Close);
}Else If(crossover(TtyAverage,TenAverage)) //20日均线上穿10日均线
{
SellShort(TradeUnits,Close); //开空仓
SetGlobalVar(1,Close);
}
}Else IF(MarketPosition == 1) //有多仓
{
If(crossover(TtyAverage,TenAverage)) //20日均线上穿10日均线
{
preBuyprice=GetGlobalVar(0);
IF(close==preBuyprice)
{
SellShort(TradeUnits,Close); //平多仓,并反转
}else
{
sell(TradeUnits,Close);//单平多仓
Winmoney=TradeUnits*close*ContractUnit;
Trademoney = 0.1*(CurrentCapital()+Winmoney);
Contractprice = ContractUnit*Close;
TradeUnits = IntPart(Trademoney/Contractprice);
SellShort(TradeUnits,Close);
}
}
}else IF(MarketPosition == -1) //有空仓
{
If(crossover(TenAverage,TtyAverage))
{
preSellprice=GetGlobalVar(1);
IF(close==preSellprice)
{
Buy(TradeUnits,Close); //平空仓,并反转
}else
{
BuyToCover(TradeUnits,Close);//单平空仓
Winmoney=TradeUnits*close*ContractUnit;
Trademoney = 0.1*(CurrentCapital()+Winmoney);
Contractprice = ContractUnit*Close;
TradeUnits = IntPart(Trademoney/Contractprice);
Buy(TradeUnits,Close);
}
}
}
End
[
本帖最后由 louhai3 于 2009-4-27 13:24 编辑
]
作者:
louhai3
时间:
2009-4-27 13:23:28
最主要前面,平仓反手后的仓位,没有根据盈亏调整,试着修改,不知对错
作者:
louhai3
时间:
2009-4-27 13:36:13
居然是盈利的
作者:
李晓东
时间:
2009-4-28 04:46:21
这貌似不是10%开仓。
作者:
louhai3
时间:
2009-4-28 10:10:19
标题:
回复 #13 李晓东 的帖子
是啊,搞不定这个
作者:
李晓东
时间:
2009-4-28 23:09:37
我认为你的开仓比例要大于50%
作者:
Z188888
时间:
2009-11-16 16:06:56
我弄过来怎么只有前面有信号
作者:
aocool
时间:
2009-11-16 16:59:29
原帖由
Z188888
于 2009-11-16 16:06 发表
我弄过来怎么只有前面有信号
是不是做反已经赔光了?
作者:
hxbhz
时间:
2009-12-27 14:54:31
嗯,学习了,
作者:
yangtse010
时间:
2009-12-28 21:59:34
标题:
吃不多到葡萄说葡萄酸啊
吃不多到葡萄说葡萄酸啊
作者:
saintwhitelion
时间:
2010-3-28 21:01:02
请问楼主这个东西是针对多少分钟K线图的均线?日线?60分?我如果在15分K线图能用么?就用15分K线图的均线数据?
欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/)
Powered by Discuz! X2