仁心慧能 发表于 2012-9-18 20:55:32

金魔方智能交易攻略(7)-网格交易和鞅加仓策略

金魔方智能交易攻略(7)-网格交易和鞅加仓策略作者:仁心慧能
网格交易法在振荡行情中用得较多,设想一个最简单的网格交易策略,公式如下:
//-------金魔方智能交易公式--------------
//例7_1 简单网格交易策略
//用于分钟周期
{策略:
1.日内交易,预计行情震荡偏多
2.起始价位下从第1笔开仓起每隔若干价差(网格间距)分批布多单
3.每笔买入以网格间距止盈
4.日内交易,收市前清仓
}
input:
  起始价位(2250), 网格总数(10), 网格间距(3);
variable:
  BuyName(''), SellName('');
AllowSameEntries(网格总数); //允许连续买入次数
if MarketPosition = 0 and Not(SessionLastBar) then begin
    Buy('', 1, 起始价位-网格间距,0,OT_LIMIT,OB_NEXTBAR, '买1');
end
else if MarketPosition = 1 then begin
  if Not(SessionLastBar) then begin
    for n=CurrentEntries to 网格总数-1 do begin
      BuyName := '买'+NumToStr(n+1,0);
      Buy('', 1, EntryPrice-n*网格间距,0,OT_LIMIT,OB_NEXTBAR, BuyName);
    end
  end  for n=CurrentEntries downto 1 do begin
    BuyName := '买'+NumToStr(n,0);
    SellName := '卖'+NumToStr(n,0);
    Sell ('', 1, EntryPrice-(n-2)*网格间距,0,OT_LIMIT,OB_NEXTBAR, SellName) from BuyName;
  end
end
SetExitOnClose;
{
注解:
1.variable: BuyName('')将BuyName声明为字符串变量
2.若持仓中已有同名仓位,不会连续开仓
3.CurrentEntries为当前持仓的开仓次数
4.盈利目标位与网格间距相同
}
如图所示:
可见,在振荡行情下,这样的策略可以频繁地小赚。


网格交易还可配合鞅(Martingale)加仓策略,初次买入后,若价格下跌,则分批加仓买入,当价格稍有反弹,整个仓位即可盈利出场。公式如下:
//-------金魔方智能交易公式--------------
//例7_2 网格交易鞅加仓策略
//用于分钟周期
{策略:
1.找个有利位置买入开仓,例如CCI指标小于-200;
2.若价格相对上次开仓价格下跌了某个价差,根据加仓系数进行马丁格尔加仓;
3.整个仓位按指定金额止盈;
4.对整个仓位按指定金额止损,控制风险。
}
input:
  网格总数(10), 网格间距(6),
  初次单量(10), 加仓系数(1.2),
  盈利点数(6), 止损金额(20000);
variable:
  BuyName('');
AllowSameEntries(网格总数); //允许连续买入次数

//计算CCI指标
TYP := (H + L + C)/3;
CCI1:= (TYP-MA(TYP,14))/(0.015*AveDev(TYP,14));

BuyName := '买1';
if CCI1 < -200 and MarketPosition = 0 then
  Buy('', 初次单量,0,0,OT_Market,OB_NEXTBAR, BuyName);
  
if MarketPosition = 1 then begin
  for n=2 to 网格总数 do begin
    BuyName := '买'+NumToStr(n,0);
    Buy('', Round(初次单量*Pow(1.2,n-1)), LASTENTRYPRICE-网格间距*(n-1),0,OT_LIMIT,OB_NEXTBAR, BuyName);
  end
end
SetStopPosition;
SetProfitTarget(盈利点数*BigPointValue*初次单量);
SetStopLoss (止损金额);
{
注解:
1.SetStopPosition设定止盈止损金额以整个仓位计算,可以省略
}

如图所示:


右键【查看测评报告】,其盈亏曲线如下:


以上2个例子的网格交易是越跌越买的,也可反向操作,越涨越买,再配合仓位控制、多空双向交易,有很多玩法,请各位试试。

之前的交易策略都是基于K线的,金魔方能实现点数图(OX图)的交易策略吗? 且听下回分解!

andersluo 发表于 2012-9-18 23:23:38

写得非常好!!!

但关于加仓策略,我想向你请教一种仓位管理的写法,仓位管理的想法如下:
第一次交易中,仓位是用了1手,如果这次交易被止损,或是平仓掉了,(注,是止损掉了或被迫平掉了,而不是因为止盈而平掉的)!
那么在下一次交易中,也就是第二次交易中加仓1+n手,这里的N可是从1手开始,也可以是从5手开始,n是某个范围内的数值,比如,N的最大值只能是10,当交易进行到10次之后,仓位加到了1+10次时,如果还是没有遇到止盈,还是被止损或平仓掉,那么,在下次开仓时,仓位重新从1手开始!
而交易中间过程中,只要有任意一次是因为遇到一个止盈而平仓的,那么在止盈平掉仓位后,下一次的交易仓位重新从1手开始,比如,第一次1手仓位的交易,就遇到止盈而平掉了,那第下次的交易仓位,还是从1手开始,如果9次的交易一直是被止损掉或强平掉的,总之不是止盈而平掉的,那么第10次的交易时,仓位可能已经加到10手了,这时遇上了一个止盈,遇上止盈完成交易后,下一次的交易就重新从1手仓开始。
这个仓位管理想法可能比较复杂,能否请仁心慧能抽空详细写写

仁心慧能 发表于 2012-9-19 10:02:44

“止损掉了或被迫平掉了”即这笔交易是亏损的?
“止盈而平掉的”即这笔交易是盈利的?
只要分得清这两种交易就能写

andersluo 发表于 2012-9-19 10:16:27

这笔交易不一定是亏损的,它有两种原因:
1,是被止损掉了,是损失的。
2,是方向正确了,但还没有走到止盈,中间行情突变,符合了反向开仓条件,而平仓,这个平仓是获利的,只 不过是获利的程度没有到达止盈的范围。

“止盈而平掉的”
这笔交易是必定盈利的,它是指完全走到了止盈位置上,因为止盈的原因而平仓的。

andersluo 发表于 2012-9-19 10:19:43

实质上,就是要区别出平仓,是否由止盈造成的,只要是因为止盈而造成的平仓,那么仓位管理就重新归O,重新从1手开始。

如果平仓不是由止盈造成的,那么就进入有限的加仓进程,一直加仓,直到加到最大仓位限制。当仓位加到最大限制时,仓位也重新归0,重新从1手开始。因为资金总是有限的,不可能无限加仓

仁心慧能 发表于 2012-9-19 13:48:04

//-------金魔方智能交易公式--------------
Input:                                         
  止盈价差(1000),
  止损价差(300),
  初始单量(1),
  加仓步长(1),
  最大单量(10);
  
variable: 下单量(1); //初始化下单量

MA1: MA(C,10);

if CrossOver(C,MA1) then begin
  if ExitName(1) = '止盈' OR ExitName(1) = '' then
    下单量 = 初始单量;
  else begin
    下单量 = 下单量 + 加仓步长;
    if (下单量 > 最大单量) then 下单量 = 初始单量;
  end
  Buy('',下单量);
end
if CrossUnder(C,MA1) then Sell;
if MarketPosition = 1 then begin
  Sell('',DEFAULT,EntryPrice+止盈价差,0,OT_LIMIT,OB_NEXTBAR,'止盈');
  Sell('',DEFAULT,EntryPrice-止损价差,0,OT_STOP,OB_NEXTBAR,'止损');
end
{
注解:
  ExitName(1)取得上一回持仓的最后一次平仓的标识名
}抱歉,在函数说明里没有ExitName函数,但实际可用
根据不同品种调整参数试试




仁心慧能 发表于 2012-9-19 13:58:13

andersluo 朋友,你这个仓位管理的实例不错,可以用在我的攻略系列文章里吗?

andersluo 发表于 2012-9-19 14:22:49

完全可以的,这也是我作为支持金魔方发展的一点贡献吧。你可以把这种仓位管理模式纳入你的系例文章中。

仁心慧能 发表于 2012-9-19 14:37:29

感谢!{:1_1:}

312gd 发表于 2012-10-1 14:26:44

不错,辛苦了!{:1_1:}
页: [1] 2 3 4
查看完整版本: 金魔方智能交易攻略(7)-网格交易和鞅加仓策略