以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  开仓类型识别  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=68758)

--  作者:dafenqiu
--  发布时间:2014/8/14 15:54:42
--  开仓类型识别
比如说我有很多种开仓类型,我平仓之后怎么让程序知道我上次的开仓类型?
--  作者:FexTel
--  发布时间:2014/8/14 16:00:45
--  
1,您的开仓类型指的是多空类型还是什么?
--  作者:dafenqiu
--  发布时间:2014/8/14 17:08:16
--  
你好,比如说我有很多种开仓信号分为第一类,第二类,第三类;
相应的我平仓的方式也是方式一,方式二,方式三;
而且是一一对应的,我想知道,我以第二类方式开的仓,只能用方式二平掉,而方式一和三对产生信号不能平掉第二类开的仓
这样怎么做?

--  作者:yukizzc
--  发布时间:2014/8/14 17:14:24
--  

定义三个全局变量,variable:num1=0,num2=0,num3=0;

if cond1 then

begin

buy();

num1:=1;

end

 

if 平多1 and num1=1 then

begin

sell();

num1=0;

end


--  作者:dafenqiu
--  发布时间:2014/8/14 17:19:35
--  
谢谢,我试一下
--  作者:dafenqiu
--  发布时间:2014/8/18 15:35:35
--  
 您好:这样开仓可以,
我想根据前面的平仓类型选择下面的开仓方式是不是反过来就可以了?
variable:pc1=0;

 if holding<0 then begin
   sellshort(con1,1,market);
   pc1:=0;
end 

if pc1:=0 and con3 then begin
  buyshort()
end 

这是否表示前面我是pc1信号平仓的,如果前面一笔是pc1平仓类型 则我进行下面的开仓操作?
为什么我测试有问题?

--  作者:yukizzc
--  发布时间:2014/8/18 15:47:11
--  
你测试时什么问题,具体说明下
--  作者:dafenqiu
--  发布时间:2014/8/18 15:53:26
--  
问题出在pc1=1 只有在我平仓那一时刻为1,下一根k线又变为0了 就是这个全局变量不持续啊
--  作者:yukizzc
--  发布时间:2014/8/18 16:06:05
--  

不会的,你完整代码发下。

应该是重新给pc1赋值为0的条件成立了才会变为0


--  作者:dafenqiu
--  发布时间:2014/9/1 13:59:15
--  
您好:我试了还是不行,都是止损退出,分类信号都不起作用,帮忙看一下怎么回事?谢谢你啦!
INPUT:P(28,20,30,1),S(9,1,15,2),M(9,1,20,2);
VARIABLE:kd1n=0,kd2n=0,kd3n=0;

DIFF := EMA(CLOSE,S) - EMA(CLOSE,P);
DEA  := EMA(DIFF,M);
MACD1 := 2*(DIFF-DEA);
CONDJ:=CROSS(DIFF,DEA);
CONDS:=CROSS(DEA,DIFF);

UPCROSS:=MACD1>0 AND REF(MACD1<0,1);
DWCROSS:=MACD1<0 AND REF(MACD1>0,1);
NN1:=BARSLAST(UPCROSS);//上次条件成立出现红柱位置
NN2:=REF(BARSLAST(UPCROSS),NN1+1);//上上次
NN3:=REF(BARSLAST(UPCROSS),NN1+NN2+1+1);
MM1:=BARSLAST(DWCROSS);//上次出现绿柱位置
MM2:=REF(BARSLAST(DWCROSS),NN1+1);//上上次
MM3:=REF(BARSLAST(DWCROSS),NN1+NN2+1+1);

r1:=REF(HHV(macd1,nn1+1),mm1+1);//前一个macd红柱的最高值
DIFFK1:=HHV(DIFF,NN1);//当前diff高值
DIFFK2:=REF(HHV(DIFF,NN1+1),MM1+1);//前一个diff的最高值
DIFFK3:=REF(HHV(DIFF,NN1+1),NN1+NN2+1+1);//再前一个的diff高值

pk1:=hhv(high,nn1);
pk2:=ref(hhv(high,nn1+1),mm1+1);
pk3:=ref(hhv(high,nn3),nn1+1+nn2+1);

hong1:=SUM(ABS(MACD1),NN1);//当前红柱面积
hong12:=sum(abs(macd1),mm1);
hong2:=SUM(ABS(MACD1),NN2+NN1+1)-hong12;//在前一个红柱面积

RP2:=REF(LLV(LOW,MM1+1),NN1+1);//前一个绿柱对应的价格低点
DIFFD1:=LLV(DIFF,MM1);
DIFFD2:=REF(LLV(DIFF,MM1+1),NN1+1);//前一个的diff低点
DIFFD3:=REF(LLV(DIFF,MM1+1),NN1+NN2+1+1);//再前一个diff低点

pd1:=llv(low,mm1);
pd2:=ref(llv(low,mm1+1),nn1+1);
pd3:=ref(llv(low,mm3),nn1+1);

lv1:=sum(abs(macd1),mm1);//绿柱面积
lv12:=sum(abs(macd1),nn1+1);
lv2:=sum(abs(macd1),nn1+1+mm2)-lv12;//前一个绿柱面积


h20:=ref(hhv(high,20),1);

//开多条件
kd1:= macd1<0 and pd1<pd2 and 
(diff>ref(diff,1) and diffd1>diffd2) and 
macd1>ref(macd1,1) and
ref(close,15)>ref(close,30);//DIFF没创新低

kd2:=macd1<0 and pd1<pd2 and 
diff>ref(diff,1) and
(macd1>ref(macd1,1) and 2*lv1<lv2);//绿柱面积减小

kd3:=last(abs(macd1)<0.5,10,1) and last(abs(close-open)/close<0.001,15,5)
and (high-low)/close>0.0015 and close>open;


//平多条件
l20:=ref(llv(low,20),1);
dfx:=ref(high,1)>high and ref(high,1)>ref(high,2) and close<=open;//顶分型;

kk1:=macd1>0 and  pk1>pk2 and 
 diff<diffk1 and diffk1<diffk2 and diff<ref(diff,1);



if holding>0 then begin

    if close-enterprice<-5 then begin
        止损1:sell(close<l20,0,market); 
        kd1n:=0;
        kd2n:=0;
        kd3n:=0;      
    end
    
    if kd1n=1 then BEGIN
       平多1:sell(kk1,0,market);
       kd1n:=0;
    end  
    
    if kd2n=1 then BEGIN
       平多2:sell(dfx,0,market);
       kd2n:=0;
    end
    
    if kd3n=1 then begin
       平多3:sell(kk1,0,market);
       kd3n:=0;
    end         
end


if holding=0 then BEGIN
   if kd1 then BEGIN
      开多1:buy(1,1,market);
      kd1n:=1;
    end
    
    if kd2 then BEGIN
       开多2:buy(1,1,market);
       kd2n:=1;
    end 
    
    if kd3 then begin
       开多3:buy(1,1,market);
       kd3n:=1;
    end
end