以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://www.weistock.com/bbs/list.asp?boardid=4)
----  同一个品种多个模型 合并下单  (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=89699)

--  作者:tsycd
--  发布时间:2016/1/12 9:33:41
--  同一个品种多个模型 合并下单
老师好
我们在同一个内盘品种下有三个模型在跟踪,能不能 合并三个模型的信号统一下单,比如是两多一空,就只合并下一个多单?

谢谢

--  作者:jinzhe
--  发布时间:2016/1/12 9:47:07
--  
那需要做引用了,用户把3个代码贴出来,我写引用格式
--  作者:tsycd
--  发布时间:2016/1/12 9:52:11
--  
但是他们是运行在不同的时间周期下的,可以吗?

能不能像盈透那样直接合并下单?



--  作者:jinzhe
--  发布时间:2016/1/12 10:00:40
--  

不同周期的就比较难了,因为信号的原因会造成重复下单

不能像盈透那样


--  作者:tsycd
--  发布时间:2016/1/21 15:41:14
--  
模型A

input:LOTS(1,1,30,1);
GLOBALVARIABLE:HOLD:=drawnull;
VARIABLE:CW:=0;
variable:n=0;
向上波动率:=(((HIGH - REF(CLOSE,1)) / REF(CLOSE,1)) * 100);
AA1:=SMA(向上波动率,1,1);
向下波动率:=(((LOW - REF(CLOSE,1)) / REF(CLOSE,1)) * 100);
AA:=SMA(向下波动率,1,1);
DAYOPEN1:=VALUEWHEN((AA1 > REF(AA1,1)),OPEN);
DAYOPEN:=VALUEWHEN((AA > REF(AA,1)),OPEN);
交易时间D:=((TIME >91500) AND (TIME <92000)) OR ((TIME >93100) AND (TIME <112900)) OR ((TIME >130000) AND (TIME <132100)) OR ((TIME >133000) AND (TIME <151300));
交易时间K:=((TIME >91500) AND (TIME < 91900)) OR ((TIME >92700) AND (TIME <112900)) OR ((TIME >130000) AND (TIME <133000)) OR ((TIME >133000) AND (TIME <151300));
开多平空:=(DAYOPEN * (1 + (0.3 / 208)));
开空平多:=(DAYOPEN1 * (1 - (0.23 /208)));
K:=VALUEWHEN((OPEN > REF(LOW,1)),TRMA(开多平空,62));
K1:=VALUEWHEN((OPEN < REF(HIGH,1)),TRMA(开空平多,44));
K2:=EMA(HIGH,6);
K3:=EMA(LOW,6);
K4:=(K1 > K3);
K5:=(K2 > K);
K6:=FILTER(CROSS(HIGH,开多平空),1);
K7:=FILTER(CROSS(开空平多,LOW),1);
BO:=((HOLDING > 0) AND (ENTERBARS > 1));
SO:=((HOLDING < 0) AND (ENTERBARS > 1));
TP:=IF(BO,HHV(CLOSE,ENTERBARS),IF(SO,LLV(CLOSE,ENTERBARS),0));
OO:VALUEWHEN(DATE<>REF(DATE,1),O);//当日开盘价

IF ((K6 AND (HOLDING < 0))  AND K5) THEN
BEGIN
SELLSHORT((HOLDING < 0) ,HOLDING ,market),ignorecheckprice;//平空
END
IF ((K7 AND (HOLDING > 0))  AND K4) THEN
BEGIN
SELL((HOLDING > 0),HOLDING ,market),ignorecheckprice;//平多
END

IF (((K6 AND (HOLDING = 0)) AND 交易时间D) AND K5) THEN
BEGIN
BUY((HOLDING = 0), LOTS ,market),ignorecheckprice;//开多
n:=enterprice;
END
IF ((BO AND (CLOSE <= (TP * (1 - (0.0001 * 11))))) AND (HIGH >= (ENTERPRICE +  (OO*13/10000)))) THEN BEGIN  //多单止盈
SELL((HOLDING > 0),HOLDING,market),ignorecheckprice;
END
if c>n then n:=c; 
if n>enterprice and c<enterprice && TYPEBAR(1 ,1) >225  then 
BEGIN 
SELL((HOLDING > 0),HOLDING,market),ignorecheckprice;//平盘平多
END

IF ((ENTERPRICE - CLOSE) >(OO*20/10000)) THEN   //多单止损
BEGIN 
SELL((HOLDING > 0),HOLDING,market),ignorecheckprice;
END
BEGIN
SELL(((HOLDING > 0) AND (TIME > 151400)),HOLDING,market);
END

IF (((K7 AND (HOLDING = 0)) AND 交易时间K) AND K4) THEN
BEGIN
BUYSHORT((HOLDING = 0), LOTS,market),ignorecheckprice;//开空
n:=enterprice;
END
if c>n then n:=c; 
if n>enterprice and c<enterprice && TYPEBAR(1 ,3) >187 then 
BEGIN 
SELLSHORT((HOLDING < 0),HOLDING,market),ignorecheckprice;//平盘平空
END
IF ((CLOSE - ENTERPRICE) >(OO*30/10000)) THEN  //空单止损
BEGIN
SELLSHORT((HOLDING < 0),HOLDING,market),ignorecheckprice;
END
IF ((SO AND (CLOSE >= (TP * (1 + (0.0001 *6))))) AND (LOW <= (ENTERPRICE - (OO*15/10000)))) THEN   //空单止盈
BEGIN

SELLSHORT((HOLDING < 0),HOLDING,market),ignorecheckprice;
END
BEGIN
SELLSHORT(((HOLDING < 0) AND (TIME > 151400)),HOLDING,market);
END
BEGIN
SELL(((HOLDING > 0) AND (TIME > 151400)),HOLDING,market);
END

IF (DATE <> REF(DATE,1)) THEN
BEGIN
YTDASSET:=ASSET;
END
日盈:(ASSET - YTDASSET),NODRAW,COLORRED;


{
KD:=;          //开多条件
PD:=;          //平多条件
KK:=;          //开空条件
PK:=;          //平空条件


平空:SELLSHORT(PK,1,THISCLOSE);                  //平空信号
开多:BUY(KD AND HOLDING=0,1,THISCLOSE);          //开多信号
平多:SELL(PD,1,THISCLOSE);                       //平多信号
开空:BUYSHORT(KK AND HOLDING=0,1,THISCLOSE);     //开空信号

}
{
信号语句排列规则——先平后开
“费率设置”按钮——用于合理设置模型“费率”,以便在图形上正确输出如下帐户信息:

持仓:holding,linethick0;
资产:asset,noaxis;
可用现金:cash(0),linethick0;
}





模型B
input:Y(1,1,100000000,1),TQ(3,3,60,1);
RSV:=(((CLOSE - LLV(LOW,2)) / (HHV(HIGH,2) - LLV(LOW,2))) * 100);
FASTK:=SMA(RSV,3,1);
MA1:=SMA(FASTK,6,1);
D:=SMA(MA1,5,1);
PT:=(REF(HIGH,1) - REF(LOW,1));
CDP:=(((REF(HIGH,1) + REF(LOW,1)) + REF(CLOSE,1)) / 3);
AH:=MA((CDP + PT),2);
AL:=MA((CDP - PT),2);
NH:=MA(((2 * CDP) - LOW),2);
NL:=MA(((2 * CDP) - HIGH),2);
NQ:=(AH + AL + NH + NL) / 4;
ABB:=(((TIME0 - TIMETOT0(DYNAINFO(207))) <= TQ) OR NOT(ISLASTBAR));
IF ABB then ;
IF ((HOLDING > 0) AND CROSS((HHV(NQ,6) * (1 - (2 * 0.001))),NQ)) THEN BEGIN
SELL((HOLDING > 0),Y,market);
END

IF ((HOLDING < 0) AND CROSS(NQ,(LLV(NQ,6) * (1 + (2 * 0.001))))) THEN BEGIN
SELLSHORT((HOLDING < 0),Y,MARKET);
END
IF ((((HOLDING = 0) AND CROSS(NQ,(LLV(NQ,6) * (1 + (2 * 0.001))))) AND (MA1 >= REF(MA1,1))) AND (TIME <= 150300)) THEN BEGIN
BUY((HOLDING = 0) ,Y,MARKET);
END
IF ((((HOLDING = 0) AND CROSS((HHV(NQ,6) * (1 - (2 * 0.001))),NQ)) AND (MA1 <= REF(MA1,1))) AND (TIME <= 150300)) THEN BEGIN
BUYSHORT((HOLDING = 0) ,Y,MARKET);
END
BO:=((HOLDING > 0) AND (ENTERBARS > 1));
SO:=((HOLDING < 0) AND (ENTERBARS > 1));
TP:=IF(BO,HHV(CLOSE,ENTERBARS),IF(SO,LLV(CLOSE,ENTERBARS),0));
IF ((BO AND (CLOSE <= (TP * (1 - ((0.0001 * 11) * 3))))) AND (HIGH >= (ENTERPRICE + 10))) THEN BEGIN
SELL((HOLDING > 0),Y,market);
END
IF ((SO AND (CLOSE >= (TP * (1 + ((0.0001 * 5) * 3))))) AND (LOW <= (ENTERPRICE - 12))) THEN BEGIN
SELLSHORT((HOLDING < 0),Y,MARKET);
END
BEGIN
SELLSHORT(((HOLDING < 0) AND (TIME > 151200)),HOLDING,market);
END
BEGIN
SELL(((HOLDING > 0) AND (TIME > 151200)),HOLDING,market);
END

IF (DATE <> REF(DATE,1)) THEN
BEGIN
YYTDASSET:=ASSET;
END
日盈:(ASSET - YYTDASSET),NODRAW,COLORRED;

--  作者:tsycd
--  发布时间:2016/1/21 15:42:25
--  
请老师帮忙把两个模型合并下单,谢谢

股指5分钟

--  作者:jinzhe
--  发布时间:2016/1/21 16:04:14
--  
稍等,这个需要时间
--  作者:jinzhe
--  发布时间:2016/1/21 16:19:43
--  
我发现上面的信号并非在同一根k线上产生的,这个要如何处理?
--  作者:jinzhe
--  发布时间:2016/1/21 16:20:46
--  
如果在一根k线上, 一个出开仓信号,一个出平仓信号,那么又要如何处理?
--  作者:tsycd
--  发布时间:2016/1/21 17:54:42
--  
可不可以用轮询方式,比如说30秒计算一次持仓,然后下单?

谢谢