麻烦大师帮我把这个公式改成金字塔的,使用if结构
文华代码如下
NNY:=**************
D:=********************
OOY:=*******************
LY:=******************
HY:=********************
H>=LY*1.04&&O<LY*1.04&&COUNTSIG(BK,NNY)<=3&&COUNTSIG(BK,D)<=0&&COUNTSIG(SK,D)<=0,BK;
L<=BKPRICE*0.98||L<=OOY*0.985&&BARSBK>=NNY||H>=BKPRICE*1.1||BKHIGH>=BKPRICE*1.015&&L<=BKPRICE+5*MINPRICE,SP;
L<=HY*0.96&&O>HY*0.96&&COUNTSIG(SK,NNY)<=3&&COUNTSIG(BK,D)<=0&&COUNTSIG(SK,D)<=0,SK;
H>=SKPRICE*1.02||H>=OOY*1.015&&BARSSK>=NNY||L<=SKPRICE*0.9||SKLOW<=SKPRICE*0.985&&H>=SKPRICE-5*MINPRICE,BP;
主要就把上方交易段落改成金字塔的 IF 结构
COUNTSIG这个函数在金字塔上实现有些矛盾。这个代码我本地先尝试下。可能需要点时间,你关注本帖回复就行了。
ct1:=0;
ct2:=0;
kd:H>=LY*1.04 and O<LY*1.04 and count(ct2=1 or ct1=0,D)<=0 and count(ct1=1,NNY)<=3;
if kd then
begin
buy(holding=0,1,market);
ct1:=1;
end
BKHIGH:hhv(h,ENTERBARS+1);
pd:L<=ENTERPRICE*0.98 or L<=OOY*0.985 and ENTERBARS+1>=NNY or H>=ENTERPRICE*1.1 or BKHIGH>=1.015*ENTERPRICE and L<=ENTERPRICE+5*MINDIFF;
if pd then sell(holding>0,holding,market);
kk:L<=HY*0.96 and O>HY*0.96 and count(ct2=1,NNY)<=3 and count(ct2=1 or ct1=0,D)<=0;//D周期内没有开多和开空,且NNY周期内开空不多于三次。
if kk then
begin
buyshort(holding=0,1,market);
ct2:=1;
end
SKLOW:llv(l,ENTERBARS+1);
pk:H>=ENTERPRICE*1.02 or H>=OOY*1.015 and ENTERBARS+1>=NNY or L<=ENTERPRICE*0.9 or SKLOW<=ENTERPRICE*0.985 and H>=ENTERPRICE-5*MINDIFF;
里面有些变量的定义你没有给出,这个你自行完成下。
完整的代码:
NNY:=BARSLAST(MONTH<>REF(MONTH,1))+1;
D:=BARSLAST(DATE<>REF(DATE,1))+1;
OOY:=VALUEWHEN(NNY=1&&D=1,O);
LY:=LLV(L,BARSLAST(MONTH<>REF(MONTH,1))+1);
HY:=HHV(H,BARSLAST(MONTH<>REF(MONTH,1))+1);
H>=LY*1.04&&O<LY*1.04&&COUNTSIG(BK,NNY)<=3&&COUNTSIG(BK,D)<=0&&COUNTSIG(SK,D)<=0,BK;
L<=BKPRICE*0.98||L<=OOY*0.985&&BARSBK>=NNY||H>=BKPRICE*1.1||BKHIGH>=BKPRICE*1.015&&L<=BKPRICE+5*MINPRICE,SP;
L<=HY*0.96&&O>HY*0.96&&COUNTSIG(SK,NNY)<=3&&COUNTSIG(BK,D)<=0&&COUNTSIG(SK,D)<=0,SK;
H>=SKPRICE*1.02||H>=OOY*1.015&&BARSSK>=NNY||L<=SKPRICE*0.9||SKLOW<=SKPRICE*0.985&&H>=SKPRICE-5*MINPRICE,BP;
TRADE_OTHER('AUTO');
SETSIGPRICETYPE(BK,TRACING_ORDER);
SETSIGPRICETYPE(SK,TRACING_ORDER);
SETSIGPRICETYPE(BP,TRACING_ORDER);
SETSIGPRICETYPE(SP,TRACING_ORDER);
SETMODRUNTYPE(0);
SETMOVEOPIPRICE(LIMIT_ORDER);
AUTOFILTER;
NNY:BARSLAST(MONTH<>REF(MONTH,1))+1;
D:BARSLAST(DATE<>REF(DATE,1))+1;
OOY:=VALUEWHEN(NNY=1&&D=1,O);
LY:=LLV(L,BARSLAST(MONTH<>REF(MONTH,1))+1);
HY:=HHV(H,BARSLAST(MONTH<>REF(MONTH,1))+1);
ct1:=0;
ct2:=0;
kd:H>=LY*1.04 and O<LY*1.04 and count(ct2=1 or ct1=1,D)<=0 and count(ct1=1,NNY)<=3;
if kd then
begin
buy(holding=0,1,market);
ct1:=1;
end
BKHIGH:=hhv(h,ENTERBARS+1);
pd:L<=ENTERPRICE*0.98 or L<=OOY*0.985 and ENTERBARS+1>=NNY or H>=ENTERPRICE*1.1 or BKHIGH>=1.015*ENTERPRICE and L<=ENTERPRICE+5*MINDIFF;
if pd then sell(holding>0,holding,market);
kk:L<=HY*0.96 and O>HY*0.96 and count(ct2=1,NNY)<=3 and count(ct2=1 or ct1=1,D)<=0;//D周期内没有开多和开空,且NNY周期内开空不多于三次。
if kk then
begin
buyshort(holding=0,1,market);
ct2:=1;
end
SKLOW:=llv(l,ENTERBARS+1);
pk:=H>=ENTERPRICE*1.02 or H>=OOY*1.015 and ENTERBARS+1>=NNY or L<=ENTERPRICE*0.9 or SKLOW<=ENTERPRICE*0.985 and H>=ENTERPRICE-5*MINDIFF;
if pk then sellshort(holding<0,holding,market);
现在看下呢。