以文本方式查看主题

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

--  作者:张哥@北京
--  发布时间:2021/1/6 10:45:40
--  策略编译成金字塔
我是做股票,这是文华源码:npqt是参数,能否把这个变成金字塔语言:

DIR:=ABS(C-REF(C,N));
VIR:=SUM(ABS(C-REF(C,1)),N);
ER:=DIR/VIR,NODRAW;
CS:=ER*(2/(P+1)-2/(Q+1))+2/(Q+1);
CQ:CS*CS,NODRAW;
AMA1:DMA(C,CQ),COLORWHITE;
MAMA1:MA(AMA1,T),DOT,COLORYELLOW;
M:=8;
ER100:200*ER; 
AMAER:200*ABS(AMA1-REF(AMA1,M))/SUM(ABS(AMA1-REF(AMA1,1)),N),COLORGREEN;
SIG:ER100>100 && AMAER>100;
SIG && AMA1>REF(AMA1,1) ,BK;
SIG && AMA1<REF(AMA1,1) ,SK;
C<AMA1,SP;
C>AMA1,BP;
SETALLSIGPRICETYPE(CMPETITV_ORDER);
MY:=20000;
C>0,T_PLUS(ROUND(MY/(C*MARGIN*UNIT),0));
AUTOFILTER;

--  作者:FireScript
--  发布时间:2021/1/6 11:18:25
--  
//涉及到的参数你自行补充下定义就行了。
MY:=20000;


bzj:Close*100;//因为你是股票,所以期货的保证金这种就不需要算了
ss:Intpart(MY/(bzj));//指定资金量的可开仓的手数


DIR:=ABS(C-REF(C,N));
VIR:=SUM(ABS(C-REF(C,1)),N);
ER:=DIR/VIR,NODRAW;
CS:=ER*(2/(P+1)-2/(Q+1))+2/(Q+1);
CQ:CS*CS,NODRAW;
AMA1:DMA(C,CQ),COLORWHITE;
MAMA1:MA(AMA1,T),DOT,COLORYELLOW;
M:=8;
ER100:200*ER;
AMAER:200*ABS(AMA1-REF(AMA1,M))/SUM(ABS(AMA1-REF(AMA1,1)),N),COLORGREEN;
SIG:ER100>100 && AMAER>100;

//是股票的话,开空相关的就删除了,没必要保留了。
if SIG && AMA1>REF(AMA1,1) then buy(1,ss,market);//满足就开仓
if C<AMA1 then sell(holding-DAYHOLDING>0,holding,market);

//SETALLSIGPRICETYPE(CMPETITV_ORDER);这个超价不知道具体不逻辑是怎样的,你最好提供下这个的说明。



[此贴子已经被作者于2021/1/6 11:20:29编辑过]

--  作者:张哥@北京
--  发布时间:2021/1/6 11:41:08
--  

多谢多谢

因为股票是T+1,是否能把T+1的处理模式再加上

--  作者:FireScript
--  发布时间:2021/1/6 14:18:38
--  
 有这个部分的处理的。

if C<AMA1 then sell(holding-DAYHOLDING>0,DAYHOLDING-holding,market);

这里就是判断老仓有没有。有的话,直接平老仓数量。