开拓者期货期权程序化系统交易论坛
标题:
双均线交易系统--请版主帮忙
[打印本页]
作者:
bigfrog
时间:
2008-11-25 22:09:11
标题:
双均线交易系统--请版主帮忙
根据小期的方法,本人写的双均线交易系统
其思路为:
2条均线以上开多仓
价格回落到2均线中间锁仓
下到2均线以下平多,加空仓
空单方法一样。
代码如下
-----------------------------------------------------------------------
Params
Numeric MA1(21);
Numeric MA2(34);
Numeric lots(10);//仓位
Vars
Numeric shortMA;
Numeric longMA;
Numeric lotbuy(0) ; //多头仓位
Numeric lotsell(0); //空头仓位
Numeric LB(0);//取回多头仓位
Numeric LS(0);//取回空头仓位
Begin
shortMA=AverageFC(close,MA1);
longMA=AverageFC(close,MA2);
If (MarketPosition==0) //没仓时候的操作
{
If(Close>shortMA And Close>longMA)
{
Buy(lots,close,true);
Commentary("原来持仓"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
lotbuy=lots;
lotsell=0;
SetGlobalVar(0,lotbuy);//保存开多数量
SetGlobalVar(1,lotsell);//保存开空数量
Commentary("后来的仓为"+"多仓为:"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
Return;
}
If(close<shortMA And Close<longMA)
{
SellShort(lots,close,true);
Commentary("原来持仓"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
lotbuy=0;
lotsell=lots;
SetGlobalVar(0,lotbuy);//保存开多数量
SetGlobalVar(1,lotsell);//保存开空数量
Commentary("后来的仓为"+"多仓为:"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
Return;
}
}
Else{
lotbuy=GetGlobalVar(0);
lotsell=GetGlobalVar(1);
If (Close<shortMA And Close>longMA And lotbuy==lots and lotsell==0) //进入21,34之间,拿多的,加同等的空
{
SellShort(lots,close,True);
Commentary("原来持仓"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
lotsell=lots;
SetGlobalVar(1,lotsell);
Commentary("后来的仓为"+"多仓为:"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
Return;
}
lotbuy=GetGlobalVar(0);
lotsell=GetGlobalVar(1);
If (Close>shortMA And Close<longMA And lotbuy==0 and lotsell==lots)// 进入21,34之间,拿空的,加同等的多
{
Buy(lots,close,true);
Commentary("原来持仓"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
lotbuy=lots;
SetGlobalVar(0,lotbuy);
Commentary("后来的仓为"+"多仓为:"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
Return;
}
lotbuy=GetGlobalVar(0);
lotsell=GetGlobalVar(1);
If(Close>shortMA And Close>longMA And lotbuy==lots And lotsell==lots)//当锁仓的时候,向上破21、34时,平空加多
{
Buy(lots,close,true);
BuyToCover(lots,close,true);
Commentary("原来持仓"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
lotbuy=2*lots;
lotsell=0;
SetGlobalVar(0,lotbuy);
SetGlobalVar(1,lotsell);
Commentary("后来的仓为"+"多仓为:"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
Return;
}
lotbuy=GetGlobalVar(0);
lotsell=GetGlobalVar(1);
If(Close<shortMA And Close<longMA And lotbuy==lots And lotsell==lots)//当锁仓的时候,向下破21、34时,平多加空
{
Sell(lots,close,true);
SellShort(lots,close,true);
Commentary("原来持仓"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
lotbuy=0;
lotsell=2*lots;
SetGlobalVar(0,lotbuy);
SetGlobalVar(1,lotsell);
Commentary("后来的仓为"+"多仓为:"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
Return;
}
lotbuy=GetGlobalVar(0);
lotsell=GetGlobalVar(1);
If (Close<shortMA And Close>longMA And lotbuy==2*lots and lotsell==0) //重新回到21,34之间,拿多的,平半多,加同等的空
{
Sell(lots,close,true);
SellShort(lots,close,True);
Commentary("原来持仓"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
lotbuy=lots;
lotsell=lots;
SetGlobalVar(0,lotbuy);
SetGlobalVar(1,lotsell);
Commentary("后来的仓为"+"多仓为:"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
Return;
}
lotbuy=GetGlobalVar(0);
lotsell=GetGlobalVar(1);
If (Close>shortMA And Close<longMA And lotbuy==0 and lotsell==2*lots)// 重新回到21,34之间,拿空的,平半空,加同等的多
{
BuyToCover(lots,close,true);
Buy(lots,close,true);
Commentary("原来持仓"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
lotbuy=lots;
lotsell=lots;
SetGlobalVar(0,lotbuy);
SetGlobalVar(1,lotsell);
Commentary("后来的仓为"+"多仓为:"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
Return;
}
lotbuy=GetGlobalVar(0);
lotsell=GetGlobalVar(1);
If (Close>shortMA And Close>longMA And lotbuy==0 and lotsell==2*lots)// 在21,34之下直接上21、34,拿空的,平2空,加2多
{
BuyToCover(2*lots,close,true);
Buy(2*lots,close,true);
Commentary("原来持仓"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
lotbuy=2*lots;
lotsell=0;
SetGlobalVar(0,lotbuy);
SetGlobalVar(1,lotsell);
Commentary("后来的仓为"+"多仓为:"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
Return;
}
lotbuy=GetGlobalVar(0);
lotsell=GetGlobalVar(1);
If (Close<shortMA And Close<longMA And lotbuy==2*lots and lotsell==0)// 在21,34之上直接下21、34,拿多的,平2多,加2空
{
Sell(2*lots,close,true);
SellShort(2*lots,close,true);
Commentary("原来持仓"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
lotbuy=0;
lotsell=2*lots;
SetGlobalVar(0,lotbuy);
SetGlobalVar(1,lotsell);
Commentary("后来的仓为"+"多仓为:"+Text(lotbuy)+" 空仓为:"+Text(lotsell));
Return;
}
}
End
---------------------------------------------------------------------------------------------------------------------
但我发现明显不对
因为本人不是程序员出身
请版主帮我看看
问题在哪里
谢谢
作者:
nopain
时间:
2008-11-26 09:53:21
为什么要锁仓,直接平掉仓位不是更方便?
作者:
hnhyjxwy
时间:
2008-11-26 10:16:39
锁仓即降低资金使用效率,又增加交易成本,没有任何意义。
作者:
bigfrog
时间:
2008-11-26 11:38:40
原帖由
nopain
于 2008-11-26 09:53 发表
为什么要锁仓,直接平掉仓位不是更方便?
锁仓只是一种思路方法
nopain 大能不能帮忙改一下
程序问题很大
没办法实现我要的功能
谢谢
作者:
nopain
时间:
2008-11-26 13:29:48
TB不能实现锁仓。
作者:
bigfrog
时间:
2008-11-26 17:01:57
原帖由
nopain
于 2008-11-26 13:29 发表
TB不能实现锁仓。
在持多的时候
开同样多的空
这种理解方式不是锁仓?
作者:
bigfrog
时间:
2008-11-26 17:18:01
系统的好坏暂且不说
我只想通过程序的功能实现这种方法
在我看来
方法只最重要的
这种锁仓的方法
肉眼观察是极其保守的盈利做法
我愿意和大家交流思想
且愿意全盘托出,大家一起进步
作者:
ygm
时间:
2008-11-26 18:11:12
对 学习中...
作者:
bigfrog
时间:
2008-11-26 22:36:07
难道真的没有人帮忙?
作者:
孤舟骑浪
时间:
2008-11-27 07:56:19
把锁仓的部分另做一个方向相反的系统就可以了。
欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/)
Powered by Discuz! X2