以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  模型编写求助  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=13594)

--  作者:bravefist
--  发布时间:2012/8/10 15:43:08
--  模型编写求助
 

我的思路是

5日线10日线金叉,买入;第一次收盘价下穿5日线,减一半仓。第二次收盘价下穿5日线,全平。

5日线上拐(今5日线高于昨天5日线,昨天5日线低于前天5日线,5日线高于10日线),买入;第一次收盘价下穿5日线,减一半仓。第二次收盘价下穿5日线,全平。


这样的话,买入时就不能限制HOLDING=0,但是如果没有这个限制,因为并不是每笔交易都有一个单号(外汇MT4平台每笔都有一个单号),在执行平仓操作时,就容易平乱了。

应该如何编写呢?谢谢


--  作者:RogarZ
--  发布时间:2012/8/10 15:55:18
--  

按你的意思  是有2个开仓条件 然后分别运行 互补干扰
2种方式
1、你把思路写成2个模型 自己建一个框架  分别运行2个模型
2、用variable 设置2个参数 a=0 和 b=0

5日线10日线金叉 and a=0 开仓时a=1.    第一次收盘价下穿5日线 and  a=1   平半仓    全平后 恢复a的赋值  a=0

同理,5日线上拐 and  b=0开仓     第一次收盘价下穿5日线and  b=1  平半仓     全平后 恢复b的赋值  b=0

 


--  作者:rushtaotao
--  发布时间:2012/8/10 16:01:22
--  

ma5:ma(c,5);
ma10:ma(c,10);
variable:cx:=0;
cond:cross(c,ma5) ;
if cross(ma5,ma10) then  buy(1,2,market);
cc:holding/2;
bb:exitbars;
//if ma5>ref(ma5,1) and ref(ma5,1)<ref(ma5,2) and ma5>ma10 then buy(1,2,market);
if holding>0 and cond and cx=0 then
begin
   sell(1,holding/2,market);
   cx:=1;
end
dd:cx;
if holding>0 and cond and cx=1 and EXITBARS>0 then
begin
   sell(1,0,market);
   cx:=0;
end

 


--  作者:bravefist
--  发布时间:2012/8/13 9:18:17
--  

这里有一个很棘手的问题:上拐后开仓,很可能在没有平仓前,又发生上拐,需要再次开仓。如果设全局变量a和b,解决不了这个问题,应该怎么办呢?


--  作者:bravefist
--  发布时间:2012/8/13 10:50:42
--  
自己顶一下再,嘿嘿
--  作者:just
--  发布时间:2012/8/13 10:56:14
--  

你开仓语句 不要加入变量控制就不会有这个问题了。

例:

variable:aa=0;

if cond then buy(1,1,market);

不要写成

if cond and aa=0 then buy(1,1,market);


--  作者:bravefist
--  发布时间:2012/8/13 13:54:23
--  
如果只写

if cond then buy(1,1,market);

 

就回到我最初的模型了,如我在最上面说的,我现在要做的是允许在没有平仓的条件下,多次开仓,而且平仓时互不影响,应该怎么办呢?


--  作者:bravefist
--  发布时间:2012/8/13 15:19:34
--  
RogarZ帮我解决了上拐和上穿的冲突问题,但是上拐和上拐之间也会冲突,由于每笔单子没有单号,导致平仓的时候很混乱,请老师们指点啊。