我是做股票,这是文华源码: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;
//涉及到的参数你自行补充下定义就行了。
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编辑过]
有这个部分的处理的。
if C<AMA1 then sell(holding-DAYHOLDING>0,DAYHOLDING-holding,market);
这里就是判断老仓有没有。有的话,直接平老仓数量。