以文本方式查看主题

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

--  作者:aback
--  发布时间:2012/11/18 9:52:54
--  holding的判断

想精细一下加仓的条件,

IF HOLDING=1 AND COND1 THEN BUY(1,1,MARKET);

IF HOLDING=2 AND COND2 THEN BUY(1,1,MARKET);

发现语句2好像不起作用,程序还是根据语句1来加第二仓的!有知道的吗?


--  作者:aback
--  发布时间:2012/11/18 11:30:33
--  

没人知道?

举个例子吧!

BUYCOND1:CROSS(MA(C,10),MA(C,30));
BUYCOND2:CROSS(MA(C,10),MA(C,20));
BUYCOND3:CROSS(MA(C,5),MA(C,10));


SELLCOND:CROSS(MA(C,30),MA(C,10));

 

IF HOLDING>0 AND SELLCOND THEN SELL(1,0,MARKET);

 

IF HOLDING=0 AND BUYCOND1 THEN BUY(1,1,MARKET);
IF HOLDING=1 AND BUYCOND2 THEN BUY(1,1,MARKET);
IF HOLDING=2 AND BUYCOND3 THEN BUY(1,1,MARKET);

 

DRAWICON(BUYCOND3 AND HOLDING=1,LOW,17);
DRAWICON(BUYCOND3 AND HOLDING=2,LOW,1);

 


此主题相关图片如下:111.jpg
按此在新窗口浏览图片

 

 

看最后两句,只有HOLDING持仓不同,结果在图上也有菱形图标显示,证明程序也能读HOLDING,但为何BUYCOND3不开仓呢?

 

 


--  作者:漫步金字塔
--  发布时间:2012/11/18 13:41:30
--  

你试试将那个CROSS(MA(C,5),MA(C,10))换成

ma(c,5)>ma(c,10) and ref(ma(c,5),1)<ref(ma(c,10),1).

因为有可能他们相隔很近,却没有穿过。


--  作者:aback
--  发布时间:2012/11/18 13:56:40
--  
以下是引用漫步金字塔在2012-11-18 13:41:30的发言:

你试试将那个CROSS(MA(C,5),MA(C,10))换成

ma(c,5)>ma(c,10) and ref(ma(c,5),1)<ref(ma(c,10),1).

因为有可能他们相隔很近,却没有穿过。

 

 

DRAWICON(BUYCOND3 AND HOLDING=1,LOW,17);
DRAWICON(BUYCOND3 AND HOLDING=2,LOW,1);

 

 

没穿过会有记号出来?


--  作者:amao2003
--  发布时间:2012/11/29 3:07:40
--  

客服看到了吗?


--  作者:jinzhe
--  发布时间:2012/11/29 9:17:12
--  
只做了一点修改,多用shift+q进行 调试
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20121129091644.png
图片点击可在新窗口打开查看

--  作者:jinzhe
--  发布时间:2012/11/29 9:18:47
--  自设套利合约的几个问题
shift+q来看看条件是否满足
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20121129091801.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20121129091839.png
图片点击可在新窗口打开查看

--  作者:fly
--  发布时间:2012/11/29 9:36:00
--  

没执行HOLDING=2的条件,是因为条件不满足.

改为以下,更方便图上查看

 

BUYCOND1:=CROSS(MA(C,10),MA(C,30));
BUYCOND2:=CROSS(MA(C,10),MA(C,20));
BUYCOND3:=CROSS(MA(C,5),MA(C,10));


SELLCOND:=CROSS(MA(C,30),MA(C,10));

 

IF HOLDING>0 AND SELLCOND THEN SELL(1,0,MARKET);

 

//以下代码在IF12合约2012年11月22日的1分钟K线上是有完整执行的

IF HOLDING=0 AND BUYCOND1 THEN 多1:BUY(1,1,MARKET);
IF HOLDING=1 AND BUYCOND2 THEN 多2:BUY(1,1,MARKET);
IF HOLDING=2 AND BUYCOND3 THEN 多3:BUY(1,1,MARKET);