开拓者期货期权程序化系统交易论坛

标题: 双均线交易系统--请版主帮忙 [打印本页]

作者: 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