- 精华
- 0
- 在线时间
- 82 小时
- UID
- 2108
- 积分
- 245
- 帖子
- 39
- 阅读权限
- 40
- 注册时间
- 2008-8-8
- 最后登录
- 2016-3-28
- 精华
- 0
- UID
- 2108
- 积分
- 245
- 帖子
- 39
- 主题
- 4
- 阅读权限
- 40
- 注册时间
- 2008-8-8
- 最后登录
- 2016-3-28
|
根据小期的方法,本人写的双均线交易系统
其思路为:
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
---------------------------------------------------------------------------------------------------------------------
但我发现明显不对
因为本人不是程序员出身
请版主帮我看看
问题在哪里
谢谢 |
|