以文本方式查看主题

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

--  作者:aback
--  发布时间:2012/6/17 15:52:43
--  变量的问题

变量一直是我头疼的问题,写了个移动止损的例子,请高手看看错在哪里,谢谢!

我的想法是,开多后,每一次调整后的再次金叉,当根K线的开盘价即为止损价。

 

input:ma5(5,1,10,1);
input:ma15(15,1,30,1);
input:ma40(40,1,60,1);


variable:KD=0;
variable:KK=0;

 

//设置变量
IF HOLDING>0 AND CROSS(MA5,MA15) THEN KD:=OPEN;
KKD:KD;
IF HOLDING<0 AND CROSS(MA15,MA5) THEN KK:=OPEN;
KKK:KK;

 

//固定平仓规则
IF HOLDING>0 AND  CROSS(MA(C,30),MA(C,10)) THEN SELL(1,0,MARKET);
IF HOLDING<0 AND  CROSS(MA(C,10),MA(C,30)) THEN SELLSHORT(1,0,MARKET);

 

//移动平仓规则
IF HOLDING>0 AND  CLOSE<=KD THEN
BEGIN
 SELL(1,0,MARKET);
 KD:=0;
 END
 
IF HOLDING<0 AND  CLOSE>=KK THEN
BEGIN
 SELLSHORT(1,0,MARKET);
 KK:=0;
 END

 

//开仓规则
IF HOLDING=0 AND MA5>MA40 AND MA40>REF(MA40,1) THEN BUY(1,1,MARKET);
IF HOLDING=0 AND MA40<MA5 AND MA40<REF(MA40,1) THEN BUYSHORT(1,1,MARKET);

 

 

IF TIME=151500 THEN
BEGIN
KD=0;
KK=0;
END


--  作者:jinzhe
--  发布时间:2012/6/18 9:04:31
--  

在开仓规则那里添加上

kd:=open;

kk:=open;

 

注意多空仓不要搞反了

[此贴子已经被作者于2012-6-18 9:04:51编辑过]

--  作者:aback
--  发布时间:2012/6/18 10:12:12
--  
还是不对啊,图表显示不出来啊!
--  作者:just
--  发布时间:2012/6/18 10:14:53
--  

楼主去看看阿火秘笈http://www.weistock.com/bbs/dispbbs.asp?boardid=10&Id=9439

 


--  作者:aback
--  发布时间:2012/6/18 10:55:11
--  
早看过了,呵呵,这是看过后才写出来的。
[此贴子已经被作者于2012-6-18 10:56:04编辑过]

--  作者:just
--  发布时间:2012/6/18 10:59:23
--  

{
variable:hl=0,aa=0;

if cond and holding>0 and aa=0 then begin
   aa:=1;
   end
  //记录开仓
 
if h>hl and aa>0 then begin
  h:=hl;
 end
 //记录开仓后的最高价
 
if hl-h<5*mindiff and aa>0 then begin
 sell(1,1,market);
 aa:=0;
 hl:=0;
 end
  //最高价回落5个点移动止损离场并把变量初始化,表示移动止损完成。
  }

基础移动止损代码,楼主可以看看。


--  作者:aback
--  发布时间:2012/6/18 11:28:46
--  

开仓时记录变量,这个我会,可能这个很好判别。

我不是在开仓的时候记录变量,写的时候总是有冲突,虽然在图表上止损价格都能划线出来,但执行不了,会不会要用第二个变量辅助?

[此贴子已经被作者于2012-6-18 11:37:50编辑过]

--  作者:aback
--  发布时间:2012/6/18 13:00:30
--  

修改了下

 

ma5:=MA(C,5);
ma15:=MA(C,15);
ma40:=MA(C,40);


variable:KD=0;
variable:KK=0;

 

//设置变量
IF HOLDING>0 AND CROSS(MA5,MA15) THEN KD:=OPEN;
KKD:KD;
IF HOLDING<0 AND CROSS(MA15,MA5) THEN KK:=OPEN;
KKK:KK;

 

//固定平仓规则
IF HOLDING>0 AND  CROSS(MA(C,40),MA(C,15)) THEN SELL(1,0,MARKET);
IF HOLDING<0 AND  CROSS(MA(C,15),MA(C,40)) THEN SELLSHORT(1,0,MARKET);

 

//移动平仓规则
IF HOLDING>0 AND  CLOSE<=KD THEN
BEGIN
 SELL(1,0,MARKET);
 KD:=0;
 END
 
IF HOLDING<0 AND  CLOSE>=KK THEN
BEGIN
 SELLSHORT(1,0,MARKET);
 KD:=0;
 END
 

//开仓规则
IF HOLDING=0 AND MA5>MA40 AND MA40>REF(MA40,1) THEN
BEGIN
 BUY(1,1,MARKET);
  END
 
IF HOLDING=0 AND MA40<MA5 AND MA40<REF(MA40,1) THEN
BEGIN
 BUYSHORT(1,1,MARKET);
 END

 

IF TIME=151500 THEN

BEGIN
KD=0;
KK=0;
END


--  作者:just
--  发布时间:2012/6/18 13:17:10
--  
楼主的代码就是达到条件平仓吧,何来移动止损一说?
--  作者:aback
--  发布时间:2012/6/18 13:45:49
--  

 

移动止损---开多后的每次回调后的均线再次金叉,则记录当根K线的开盘价,此开盘价就是新的止赢价格 。

 

IF HOLDING>0 AND CROSS(MA5,MA15) THEN KD:=OPEN;
KKD:KD;
IF HOLDING<0 AND CROSS(MA15,MA5) THEN KK:=OPEN;
KKK:KK;

 

固定平仓规则----------正常的出场条件
IF HOLDING>0 AND CROSS(MA(C,40),MA(C,15)) THEN SELL(1,0,MARKET);
IF HOLDING<0 AND CROSS(MA(C,15),MA(C,40)) THEN SELLSHORT(1,0,MARKET);