编程思路破译 基准值赋值:5 投入金额赋值:15 KS赋值:收盘价的有效数据周期数+1 NF赋值: 年份 NFB赋值: NF关于2的模 HD赋值:如果1日前的NF不等于NF,返回1,否则返回0 KS1赋值:如果统计KS日中满足HD=1的天数=0,返回KS,否则返回HD累加至1的天数 K2A赋值: 如果KS1关于2的模=1ORKS1=1,返回1,否则返回0 K2H赋值: K2A累加至1的天数日内最高价的最高值 K2L赋值: K2A累加至1的天数日内最低价的最低值 K2RSV赋值: (收盘价-K2A累加至9的天数日内最低价的最低值)/(K2A累加至9的天数日内最高价的最高值-K2A累加至9的天数日内最低价的最低值)*100 K2FK赋值:(K2A累加至1的天数日前的K2RSV+2*K2A累加至2的天数日前的K2RSV)/3 K2K赋值:(K2RSV+2*K2FK)/3 K2FD赋值:(K2A累加至1的天数日前的K2K+2*K2A累加至2的天数日前的K2K)/3 K2D赋值:(K2K+2*K2FD)/3 K2KD赋值: 100*(K2K+K2D*2)/3的整数部分/100 K2KDQ赋值: K2A累加至1的天数日前的K2KD K4A赋值: 如果KS1关于4的模=1ORKS1=1,返回1,否则返回0 K4H赋值: K4A累加至1的天数日内最高价的最高值 K4L赋值: K4A累加至1的天数日内最低价的最低值 K4RSV赋值: (收盘价-K4A累加至9的天数日内最低价的最低值)/(K4A累加至9的天数日内最高价的最高值-K4A累加至9的天数日内最低价的最低值)*100 K4FK赋值:(K4A累加至1的天数日前的K4RSV+2*K4A累加至2的天数日前的K4RSV)/3 K4K赋值:(K4RSV+2*K4FK)/3 K4FD赋值:(K4A累加至1的天数日前的K4K+2*K4A累加至2的天数日前的K4K)/3 K4D赋值:(K4K+2*K4FD)/3 K4KD赋值: 100*(K4K+K4D*2)/3的整数部分/100 K4KDQ赋值: K4A累加至1的天数日前的K4KD K8A赋值: 如果KS1关于8的模=1ORKS1=1,返回1,否则返回0 K8H赋值: K8A累加至1的天数日内最高价的最高值 K8L赋值: K8A累加至1的天数日内最低价的最低值 K8RSV赋值: (收盘价-K8A累加至9的天数日内最低价的最低值)/(K8A累加至9的天数日内最高价的最高值-K8A累加至9的天数日内最低价的最低值)*100 K8FK赋值:(K8A累加至1的天数日前的K8RSV+2*K8A累加至2的天数日前的K8RSV)/3 K8K赋值:(K8RSV+2*K8FK)/3 K8FD赋值:(K8A累加至1的天数日前的K8K+2*K8A累加至2的天数日前的K8K)/3 K8D赋值:(K8K+2*K8FD)/3 K8KD赋值: 100*(K8K+K8D*2)/3的整数部分/100 K8KDQ赋值: K8A累加至1的天数日前的K8KD JQ1A赋值:如果K2KDQ<=20,返回1,否则返回0 JQ1B赋值:如果K4KDQ<=20,返回1,否则返回0 JQ1C赋值:如果K8KDQ<=20,返回1,否则返回0 JQ1D赋值:如果(JQ1A+JQ1B+JQ1C)>=2,返回1,否则返回0 JX1赋值:收盘价的基准值日简单移动平均*100的整数部分/100 JX2赋值:收盘价的基准值*2日简单移动平均*100的整数部分/100 JX3赋值:收盘价的基准值*4日简单移动平均*100的整数部分/100 JA2A赋值:如果JX1<JX2ANDJX2<JX3,返回1,否则返回0 JA2B赋值:如果1日前的JA2A=1ANDJA2A=0,返回1,否则返回0 JA3A赋值:如果JX1>JX2ANDJX2>JX3,返回1,否则返回0 JA3B赋值:如果1日前的JA3A=0ANDJA3A=1,返回1,否则返回0 JX1A赋值:收盘价的基准值日指数移动平均 JX2A赋值:收盘价的基准值*2日指数移动平均 JX3A赋值:收盘价的基准值*4日指数移动平均 JX4A赋值:如果基准值/2的小数部分>=0.5,返回基准值/2的整数部分+1,否则返回基准值/2的整数部分 YA赋值:(JX1A-JX2A)*1000的整数部分 LA赋值:YA的JX4A日指数移动平均的整数部分 YB赋值:(JX1A-JX3A)*1000的整数部分 LB赋值:YB的JX4A日指数移动平均的整数部分 JG1A赋值:如果YA>LA,返回1,否则返回0 JG1B赋值:如果统计JG1A累加至1的天数日中满足YA<LA的天数=0,返回1,否则返回0 JG1C赋值:如果1日前的JG1B=0ANDJG1B=1,返回1,否则返回0 JG1D赋值:如果1日前的JG1B=1ANDJG1B=0,返回1,否则返回0 JG2A赋值:如果YB>LB,返回1,否则返回0 JG2B赋值:如果统计JG1A累加至1的天数日中满足YB<LB的天数=0,返回1,否则返回0 JG2C赋值:如果1日前的JG2B=0ANDJG2B=1,返回1,否则返回0 JG2D赋值:如果1日前的JG2B=1ANDJG2B=0,返回1,否则返回0 CSH赋值:如果(统计KS日中满足JG2C=1的天数+统计KS日中满足JG2D=1的天数)>=3ANDCOUNT(JA2B=1,KS)>=2ANDCOUNT(JA3B=1,KS)>=2,返回1,否则返回0 JG3A赋值:如果CSH=1,返回如果JG1B=1ANDJG2B=1ANDLA<=0ANDLB<=0,返回1,否则返回0,否则返回0 JG3B赋值:如果CSH=1,返回如果1日前的JG3A=0ANDJG3A=1,返回1,否则返回0,否则返回0 JG3C赋值:如果CSH=1,返回如果1日前的JG3A=1,返回1,否则返回0,否则返回0 JG3D赋值:如果CSH=1,返回如果1日前的JG3C=0ANDJG3C=1,返回1,否则返回0,否则返回0 JG4A赋值:开盘价和收盘价的较小值 JG4B赋值:如果JG3A=1,返回JG3B累加至1的天数+基准值-1日内最高价的最低值,否则返回0 JG5A赋值:如果JG3C=1,返回如果最低价<=1日前的JG4B,返回1,否则返回0,否则返回0 JG5B赋值:如果JG3C=1,返回如果统计JG3D累加至1的天数日中满足JG5A=1的天数>=1,返回1,否则返回0,否则返回0 JG6A赋值:如果YA>0ORYB>0,返回1,否则返回0 JG6B赋值:如果1日前的JG6A=1ANDJG6A=0,返回1,否则返回0 JG6C赋值:如果JG6B=1,返回基准值日内JG4A的最低值,否则返回0 JG6D赋值:如果统计JG6B累加至1的天数日中满足收盘价<JG6B累加至1的天数-1日前的JG6C的天数=0ANDCOUNT(JG6A=1,JG6B累加至1的天数)=0,返回1,否则返回0 JG6E赋值:如果JG6A=1ORJG6D=1,返回1,否则返回0 JG6F赋值:如果1日前的JG6E=0ANDJG6E=1,返回1,否则返回0 JG6G赋值:如果统计KS日中满足JG6F=1的天数>=1,返回如果统计JG6F累加至1的天数日中满足JG6E=0的天数=0,返回1,否则返回0,否则返回0 JG6H赋值:如果1日前的JG6G=0ANDJG6G=1,返回1,否则返回0 JG6I赋值:如果JG6G=1,返回如果统计JG6H累加至1的天数日中满足JG5B=1的天数>=1,返回1,否则返回0,否则返回0 JG7A赋值:如果JG5B=1ORJG6I=1OR(1日前的JG6I=1ANDJG6I=0),返回1,否则返回0 JG7B赋值:如果1日前的JG7A=0ANDJG7A=1ANDJG5A=1,返回1,否则返回0 JG7C赋值:如果JG7B=1,返回如果开盘价<=1日前的JG4B,返回开盘价,否则返回1日前的JG4B,否则返回0 JG7D赋值:如果统计KS日中满足JG7B=1的天数>=1,返回如果统计JG7B累加至1的天数日中满足JG7A=0的天数=0,返回1,否则返回0,否则返回0 JG7E赋值:如果1日前的JG7D=1ANDJG7D=0,返回1,否则返回0 JB1A赋值:如果CSH=1,返回如果统计JA3B累加至1的天数日中满足JX1<JX2的天数=0ANDCOUNT(JX2<JX3,JA3B累加至1的天数)=0,返回1,否则返回0,否则返回0 JB1B赋值:如果CSH=1,返回如果JA3A=1ORJB1A=1,返回1,否则返回0,否则返回0 JB1C赋值:如果1日前的JB1B=0ANDJB1B=1,返回1,否则返回0 JB2A赋值:如果JX1>JX2,返回1,否则返回0 JB2B赋值:如果统计JB2A累加至1的天数日中满足JX1<JX2的天数=0,返回1,否则返回0 JB2C赋值:如果1日前的JB2B=1ANDJB2B=0,返回1,否则返回0 JB2D赋值:如果JB2C=1,返回3日内最低价的最低值,否则返回0 JB2E赋值:如果统计KS日中满足JB2C=1的天数>=1,返回如果统计JB2C累加至1的天数日中满足收盘价<JB2C累加至1的天数-1日前的JB2D的天数=0ANDCOUNT(JB2B=1,JB2C累加至1的天数)=0,返回1,否则返回0,否则返回0 JB2F赋值:如果JB2B=1ORJB2E=1,返回1,否则返回0 JC1A赋值:如果JB1B=1,返回如果JB1C累加至1的天数<=基准值ANDSUMBARS(JA2B,1)<=2*基准值,返回1,否则返回0,否则返回0 JC1B赋值:如果1日前的JC1A=1,返回1,否则返回0 JC1C赋值:如果1日前的JC1B=0ANDJC1B=1,返回1,否则返回0 JC2A赋值:如果JC1A=1,返回JX2,否则返回0 JC3A赋值:如果JC1B=1,返回如果最低价<=1日前的JC2A,返回1,否则返回0,否则返回0 JC3B赋值:如果JC1B=1,返回如果JC3A=1,返回如果开盘价<1日前的JC2A,返回开盘价,否则返回1日前的JC2A,否则返回0,否则返回0 JC3C赋值:如果JC1B=1,返回如果JC3A=1,返回如果统计JC1C累加至1的天数日中满足JC3A=1的天数=1,返回1,否则返回0,否则返回0,否则返回0 JC4A赋值:如果统计KS日中满足JC3C=1的天数>=1,返回如果统计JC3C累加至1的天数日中满足JB2F=0的天数=0,返回1,否则返回0,否则返回0 JC4B赋值:如果JC4A=1OR(1日前的JC4A=1ANDJC4A=0),返回1,否则返回0 JC4C赋值:如果1日前的JC4B=1ANDJC4B=0,返回1,否则返回0 JM1A赋值:如果JC4B=1,返回2,否则返回如果JG7D,返回1,否则返回0 JM1B赋值:如果1日前的JM1A=0ANDJM1A>=1,返回1,否则返回0 JM1C赋值:如果统计KS日中满足JM1B=1的天数>=1,返回如果统计JM1B累加至1的天数日中满足JM1A=0的天数=0,返回1,否则返回0,否则返回0 JM2A赋值:如果JM1B=1,返回如果JG7B=1ANDJQ1D=1,返回1,否则返回0,否则返回0 JM2B赋值:如果统计KS日中满足JM2A=1的天数>=1,返回如果统计JM2A累加至1的天数日中满足JM1C=0的天数=0,返回1,否则返回0,否则返回0 TRE赋值:投入金额*10000 TRE1赋值:TRE/3*100的整数部分/100 JP1A赋值:如果JM2A=1,返回JG7C,否则返回0 JP1B赋值:如果JM2A=1,返回TRE1/JP1A/100的整数部分*100,否则返回0 JP1C赋值:如果JM2A=1,返回JP1A*JP1B,否则返回0 JP1D赋值:如果JM2A=1,返回如果(JP1C*2.5/10000)<5,返回5,否则返回JP1C*2.5/10000+JP1C/100000,否则返回0 JP2A赋值:如果JM2B=1,返回如果JC3C=1,返回如果统计JM2A累加至1的天数日中满足JC3C的天数=1,返回1,否则返回0,否则返回0,否则返回0 JP2B赋值:如果JP2A=1,返回JC3B,否则返回0 JP2C赋值:如果JP2A=1,返回(TRE-JM2A累加至1的天数-1日前的JP1C)/JP2B/100的整数部分*100,否则返回0 JP2D赋值:如果JP2A=1,返回JP2B*JP2C,否则返回0 JP2E赋值:如果JP2A=1,返回如果(JP2D*2.5/10000)<5,返回5,否则返回JP2D*2.5/10000+JP2D/100000,否则返回0 JP3A赋值:如果JM2B=1,返回如果(JG7E=1ANDCOUNT(JM2B=0,JG7B累加至1的天数)=0)OR(JC4C=1ANDCOUNT(JM2B=0,JC3C累加至1的天数)=0),返回1,否则返回0,否则返回0 JP3B赋值:如果JM2B=1,返回如果JP3A=1,返回如果统计JM2A累加至1的天数日中满足JP3A=1的天数=1,返回1,否则返回0,否则返回0,否则返回0 JP3C赋值:如果JM2B=1,返回如果JP3B=1,返回开盘价,否则返回0,否则返回0 JP3D赋值:如果JM2B=1,返回如果JP3B=1,返回JM2A累加至1的天数-1日前的JP1B,否则返回0,否则返回0 JP3E赋值:如果JM2B=1,返回如果JP3B=1,返回JP3C*JP3D,否则返回0,否则返回0 JP3F赋值:如果JM2B=1,返回如果JP3B=1,返回如果(JP3E*2.5/10000)<5,返回5,否则返回JP3E*2.5/10000+JP3E/1000+JP3E/100000,否则返回0,否则返回0 JP4A赋值:如果JM2B=1,返回如果JG7B=1ORJC3C=1,返回1,否则返回0,否则返回0 JP4B赋值:如果JM2B=1,返回如果JP4A=1,返回如果统计JM2A累加至1的天数日中满足JP2A=1的天数>=1,返回如果JP2A累加至1的天数>1ANDCOUNT(JP3B=1,JP2A累加至1的天数)>=1,返回1,否则返回0,否则返回0,否则返回0,否则返回0 JP4C赋值:如果JM2B=1,返回如果JP4B=1,返回JG7C和JC3B的较大值,否则返回0,否则返回0 JP4D赋值:如果JM2B=1,返回如果JP4B=1,返回TRE1/JP4C/100的整数部分*100,否则返回0,否则返回0 JP4E赋值:如果JM2B=1,返回如果JP4B=1,返回JP4C*JP4D,否则返回0,否则返回0 JP4F赋值:如果JM2B=1,返回如果JP4B=1,返回如果(JP4E*2.5/10000)<5,返回5,否则返回JP4E*2.5/10000+JP4E/100000,否则返回0,否则返回0 JP5A赋值:如果JM2B=1,返回如果统计JM2A累加至1的天数日中满足JP4B=1的天数>=1,返回如果JP3A=1,返回1,否则返回0,否则返回0,否则返回0 JP5B赋值:如果JM2B=1,返回如果JP5A=1,返回开盘价,否则返回0,否则返回0 JP5C赋值:如果JM2B=1,返回如果JP5A=1,返回JP4B累加至1的天数-1日前的JP4D,否则返回0,否则返回0 JP5D赋值:如果JM2B=1,返回如果JP5A=1,返回JP5B*JP5C,否则返回0,否则返回0 JP5E赋值:如果JM2B=1,返回如果JP5A=1,返回如果(JP5D*2.5/10000)<5,返回5,否则返回JP5D*2.5/10000+JP5D/1000+JP5D/100000,否则返回0,否则返回0 JP6A赋值:如果JM2B=1,返回JP1D的JM2A累加至1的天数日累和+JP2E的JM2A累加至1的天数日累和+JP3F的JM2A累加至1的天数日累和+JP4F的JM2A累加至1的天数日累和+JP5E的JM2A累加至1的天数日累和,否则返回0 JP6B赋值:如果JM2B=1,返回JP1C的JM2A累加至1的天数日累和+JP2D的JM2A累加至1的天数日累和+JP4E的JM2A累加至1的天数日累和,否则返回0 JP6C赋值:如果JM2B=1,返回JP3E的JM2A累加至1的天数日累和+JP5D的JM2A累加至1的天数日累和,否则返回0 JP6D赋值:如果JM2B=1,返回JP6B-JP6C,否则返回0 JP6E赋值:如果JM2B=1,返回JP1B的JM2A累加至1的天数日累和+JP2C的JM2A累加至1的天数日累和+JP4D的JM2A累加至1的天数日累和,否则返回0 JP6F赋值:如果JM2B=1,返回JP3D的JM2A累加至1的天数日累和+JP5C的JM2A累加至1的天数日累和,否则返回0 JP6G赋值:如果JM2B=1,返回JP6E-JP6F,否则返回0 JP6H赋值:如果JM2B=1,返回(JP6D+JP6A)/JP6G,否则返回0 JP6I赋值:如果JM2B=1,返回(收盘价-JP6H)*JP6G,否则返回0 JP6J赋值:如果JM2B=1,返回JP6I/JP6D*100,否则返回0 输出选股输出:JM2B=1 AND JM2A累加至1的天数<=5 AND JP6J<=5 程序源码 基准值:=5; 投入金额:=15; KS:=BARSCOUNT(C)+1; NF:= YEAR; NFB:= MOD(NF,2); HD:=IF(REF(NF,1)<>NF,1,0);{IF(REF(NFB,1)>0 AND NFB=0,1,0);} KS1:=IF(COUNT(HD=1,KS)=0,KS,SUMBARS(HD,1)); {注意KS与KS1的区别,股票用年画段,期货用月画段} K2A:= IF(MOD(KS1,2)=1 OR KS1=1,1,0); K2H:= HHV(H,SUMBARS(K2A,1)); K2L:= LLV(L,SUMBARS(K2A,1)); K2RSV:= (C-LLV(L,SUMBARS(K2A,9)))/(HHV(H,SUMBARS(K2A,9))-LLV(L,SUMBARS(K2A,9)))*100; K2FK:=(REF(K2RSV,SUMBARS(K2A,1))+2*REF(K2RSV,SUMBARS(K2A,2)))/3; K2K:=(K2RSV+2*K2FK)/3; K2FD:=(REF(K2K,SUMBARS(K2A,1))+2*REF(K2K,SUMBARS(K2A,2)))/3; K2D:=(K2K+2*K2FD)/3; K2KD:= INTPART(100*(K2K+K2D*2)/3)/100; K2KDQ:= REF(K2KD,SUMBARS(K2A,1)); K4A:= IF(MOD(KS1,4)=1 OR KS1=1,1,0); K4H:= HHV(H,SUMBARS(K4A,1)); K4L:= LLV(L,SUMBARS(K4A,1)); K4RSV:= (C-LLV(L,SUMBARS(K4A,9)))/(HHV(H,SUMBARS(K4A,9))-LLV(L,SUMBARS(K4A,9)))*100; K4FK:=(REF(K4RSV,SUMBARS(K4A,1))+2*REF(K4RSV,SUMBARS(K4A,2)))/3; K4K:=(K4RSV+2*K4FK)/3; K4FD:=(REF(K4K,SUMBARS(K4A,1))+2*REF(K4K,SUMBARS(K4A,2)))/3; K4D:=(K4K+2*K4FD)/3; K4KD:= INTPART(100*(K4K+K4D*2)/3)/100; K4KDQ:= REF(K4KD,SUMBARS(K4A,1)); K8A:= IF(MOD(KS1,8)=1 OR KS1=1,1,0); K8H:= HHV(H,SUMBARS(K8A,1)); K8L:= LLV(L,SUMBARS(K8A,1)); K8RSV:= (C-LLV(L,SUMBARS(K8A,9)))/(HHV(H,SUMBARS(K8A,9))-LLV(L,SUMBARS(K8A,9)))*100; K8FK:=(REF(K8RSV,SUMBARS(K8A,1))+2*REF(K8RSV,SUMBARS(K8A,2)))/3; K8K:=(K8RSV+2*K8FK)/3; K8FD:=(REF(K8K,SUMBARS(K8A,1))+2*REF(K8K,SUMBARS(K8A,2)))/3; K8D:=(K8K+2*K8FD)/3; K8KD:= INTPART(100*(K8K+K8D*2)/3)/100; K8KDQ:= REF(K8KD,SUMBARS(K8A,1)); JQ1A:=IF(K2KDQ<=20,1,0);{开盘确认} JQ1B:=IF(K4KDQ<=20,1,0);{开盘确认} JQ1C:=IF(K8KDQ<=20,1,0);{开盘确认} JQ1D:=IF((JQ1A+JQ1B+JQ1C)>=2,1,0);{开盘确认-建仓区域框架}; {以上为笔者个人经验认为高胜率建仓区域} {策略计算基准模块} JX1:=INTPART(MA(C,基准值)*100)/100; JX2:=INTPART(MA(C,基准值*2)*100)/100; JX3:=INTPART(MA(C,基准值*4)*100)/100; JA2A:=IF(JX1<JX2 AND JX2<JX3,1,0); JA2B:=IF(REF(JA2A,1)=1 AND JA2A=0,1,0); JA3A:=IF(JX1>JX2 AND JX2>JX3,1,0); JA3B:=IF(REF(JA3A,1)=0 AND JA3A=1,1,0); JX1A:=EMA(C,基准值); JX2A:=EMA(C,基准值*2); JX3A:=EMA(C,基准值*4); JX4A:=IF(FRACPART(基准值/2)>=0.5,INTPART(基准值/2)+1,INTPART(基准值/2)); YA:=INTPART((JX1A-JX2A)*1000); LA:=INTPART(EMA(YA,JX4A)); YB:=INTPART((JX1A-JX3A)*1000); LB:=INTPART(EMA(YB,JX4A)); {左侧主体-核心:建仓监控-买入-持仓-卖出} JG1A:=IF(YA>LA,1,0); JG1B:=IF(COUNT(YA<LA,SUMBARS(JG1A,1))=0,1,0); JG1C:=IF(REF(JG1B,1)=0 AND JG1B=1,1,0); JG1D:=IF(REF(JG1B,1)=1 AND JG1B=0,1,0); JG2A:=IF(YB>LB,1,0); JG2B:=IF(COUNT(YB<LB,SUMBARS(JG1A,1))=0,1,0); JG2C:=IF(REF(JG2B,1)=0 AND JG2B=1,1,0); JG2D:=IF(REF(JG2B,1)=1 AND JG2B=0,1,0); CSH:=IF((COUNT(JG2C=1,KS)+COUNT(JG2D=1,KS))>=3 AND COUNT(JA2B=1,KS)>=2 AND COUNT(JA3B=1,KS)>=2,1,0); JG3A:=IF(CSH=1,IF(JG1B=1 AND JG2B=1 AND LA<=0 AND LB<=0,1,0),0);{实盘监控区} JG3B:=IF(CSH=1,IF(REF(JG3A,1)=0 AND JG3A=1,1,0),0);{实盘监控区-起点} JG3C:=IF(CSH=1,IF(REF(JG3A,1)=1,1,0),0);{实盘挂单区} JG3D:=IF(CSH=1,IF(REF(JG3C,1)=0 AND JG3C=1,1,0),0);{实盘挂单区起点} JG4A:=MIN(O,C);{预计止损价} JG4B:=IF(JG3A=1,LLV(H,SUMBARS(JG3B,1)+基准值-1),0);{预计建仓价} JG5A:=IF(JG3C=1,IF(L<=REF(JG4B,1),1,0),0);{挂单成交信号} JG5B:=IF(JG3C=1,IF(COUNT(JG5A=1,SUMBARS(JG3D,1))>=1,1,0),0);{实盘挂单区有持仓信号-包含卖出/止损信号}; JG6A:=IF(YA>0 OR YB>0,1,0); JG6B:=IF(REF(JG6A,1)=1 AND JG6A=0,1,0); JG6C:=IF(JG6B=1,LLV(JG4A,基准值),0); JG6D:=IF(COUNT(C<REF(JG6C,SUMBARS(JG6B,1)-1),SUMBARS(JG6B,1))=0 AND COUNT(JG6A=1,SUMBARS(JG6B,1))=0,1,0); JG6E:=IF(JG6A=1 OR JG6D=1,1,0); JG6F:=IF(REF(JG6E,1)=0 AND JG6E=1,1,0); JG6G:=IF(COUNT(JG6F=1,KS)>=1,IF(COUNT(JG6E=0,SUMBARS(JG6F,1))=0,1,0),0); JG6H:=IF(REF(JG6G,1)=0 AND JG6G=1,1,0); JG6I:=IF(JG6G=1,IF(COUNT(JG5B=1,SUMBARS(JG6H,1))>=1,1,0),0);{从左侧买入顺利过渡到右侧趋势持仓区}; JG7A:=IF(JG5B=1 OR JG6I=1 OR (REF(JG6I,1)=1 AND JG6I=0),1,0);{整体实盘持仓区} JG7B:=IF(REF(JG7A,1)=0 AND JG7A=1 AND JG5A=1,1,0);{实盘唯一成交信号}; JG7C:=IF(JG7B=1,IF(O<=REF(JG4B,1),O,REF(JG4B,1)),0);{实盘成交价}; JG7D:=IF(COUNT(JG7B=1,KS)>=1,IF(COUNT(JG7A=0,SUMBARS(JG7B,1))=0,1,0),0); JG7E:=IF(REF(JG7D,1)=1 AND JG7D=0,1,0);{左侧-实盘持仓区-开盘卖出} {右侧主体核心: 建仓区域监控-买入-持仓-卖出模块} JB1A:=IF(CSH=1,IF(COUNT(JX1<JX2,SUMBARS(JA3B,1))=0 AND COUNT(JX2<JX3,SUMBARS(JA3B,1))=0,1,0),0);{延续基础建仓监控区} JB1B:=IF(CSH=1,IF(JA3A=1 OR JB1A=1,1,0),0);{通用基础建仓监控区} JB1C:=IF(REF(JB1B,1)=0 AND JB1B=1,1,0);{通用基础建仓监控区-起点} JB2A:=IF(JX1>JX2,1,0); JB2B:=IF(COUNT(JX1<JX2,SUMBARS(JB2A,1))=0,1,0);{通用持仓区域} JB2C:=IF(REF(JB2B,1)=1 AND JB2B=0,1,0); JB2D:=IF(JB2C=1,LLV(L,3),0); JB2E:=IF(COUNT(JB2C=1,KS)>=1,IF(COUNT(C<REF(JB2D,SUMBARS(JB2C,1)-1),SUMBARS(JB2C,1))=0 AND COUNT(JB2B=1,SUMBARS(JB2C,1))=0,1,0),0); JB2F:=IF(JB2B=1 OR JB2E=1,1,0);{通用持仓区域}; JC1A:=IF(JB1B=1,IF(SUMBARS(JB1C,1)<=基准值 AND SUMBARS(JA2B,1)<=2*基准值,1,0),0); JC1B:=IF(REF(JC1A,1)=1,1,0);{实盘建仓监控区-开盘确认} JC1C:=IF(REF(JC1B,1)=0 AND JC1B=1,1,0);{实盘建仓监控区-起点-开盘确认} JC2A:=IF(JC1A=1,JX2,0);{监控区-设定预计买入价格} JC3A:=IF(JC1B=1,IF(L<=REF(JC2A,1),1,0),0);{实盘建仓区有买入成交信号}; JC3B:=IF(JC1B=1,IF(JC3A=1,IF(O<REF(JC2A,1),O,REF(JC2A,1)),0),0);{实盘建仓区有买入成交信号-实盘成交价} JC3C:=IF(JC1B=1,IF(JC3A=1,IF(COUNT(JC3A=1,SUMBARS(JC1C,1))=1,1,0),0),0);{设计成实盘只买入一次,实盘本次建仓区唯一买入信号}; JC4A:=IF(COUNT(JC3C=1,KS)>=1,IF(COUNT(JB2F=0,SUMBARS(JC3C,1))=0,1,0),0);{唯一建仓后-持仓区持仓区} JC4B:=IF(JC4A=1 OR (REF(JC4A,1)=1 AND JC4A=0),1,0); JC4C:=IF(REF(JC4B,1)=1 AND JC4B=0,1,0);{右侧持仓卖出-开盘卖出} {右侧趋势与左侧抄底融合模块} JM1A:=IF(JC4B=1,2,IF(JG7D,1,0));{左侧+右侧融合持仓区域持仓等级}; JM1B:=IF(REF(JM1A,1)=0 AND JM1A>=1,1,0);{融合持仓区起点} JM1C:=IF(COUNT(JM1B=1,KS)>=1,IF(COUNT(JM1A=0,SUMBARS(JM1B,1))=0,1,0),0); JM2A:=IF(JM1B=1,IF(JG7B=1 AND JQ1D=1,1,0),0);{重要注释:融合持仓-初次买入点--注意只要在这行代码增减“ AND JQ1D=1”即可实现策略4和策略5的无缝切换}; JM2B:=IF(COUNT(JM2A=1,KS)>=1,IF(COUNT(JM1C=0,SUMBARS(JM2A,1))=0,1,0),0); TRE:=投入金额*10000;{个股预计投入资金} TRE1:=INTPART(TRE/3*100)/100;{单次投入三层仓位}; JP1A:=IF(JM2A=1,JG7C,0);{三层底仓成交价} JP1B:=IF(JM2A=1,INTPART(TRE1/JP1A/100)*100,0);{三层底仓成交数量} JP1C:=IF(JM2A=1,JP1A*JP1B,0);{三层底仓实际占用资金} JP1D:=IF(JM2A=1,IF((JP1C*2.5/10000)<5,5,JP1C*2.5/10000)+JP1C/100000,0); JP2A:=IF(JM2B=1,IF(JC3C=1,IF(COUNT(JC3C,SUMBARS(JM2A,1))=1,1,0),0),0); JP2B:=IF(JP2A=1,JC3B,0);{初次右侧趋势加仓成交价} JP2C:=IF(JP2A=1,INTPART((TRE-REF(JP1C,SUMBARS(JM2A,1)-1))/JP2B/100)*100,0); JP2D:=IF(JP2A=1,JP2B*JP2C,0);{初次右侧趋势加仓成交金额} JP2E:=IF(JP2A=1,IF((JP2D*2.5/10000)<5,5,JP2D*2.5/10000)+JP2D/100000,0); JP3A:=IF(JM2B=1,IF((JG7E=1 AND COUNT(JM2B=0,SUMBARS(JG7B,1))=0) OR (JC4C=1 AND COUNT(JM2B=0,SUMBARS(JC3C,1))=0),1,0),0);{融合持仓区-有卖出减仓}; JP3B:=IF(JM2B=1,IF(JP3A=1,IF(COUNT(JP3A=1,SUMBARS(JM2A,1))=1,1,0),0),0); JP3C:=IF(JM2B=1,IF(JP3B=1,O,0),0);{融合持仓区-首次减仓卖出成交价} JP3D:=IF(JM2B=1,IF(JP3B=1,REF(JP1B,SUMBARS(JM2A,1)-1),0),0);{融合持仓区-首次减仓卖出成交数量-卖出底仓成交数量} JP3E:=IF(JM2B=1,IF(JP3B=1,JP3C*JP3D,0),0);{融合持仓区-首次减仓卖出成交金额} JP3F:=IF(JM2B=1,IF(JP3B=1,IF((JP3E*2.5/10000)<5,5,JP3E*2.5/10000)+JP3E/1000+JP3E/100000,0),0);{卖出成交成本}; JP4A:=IF(JM2B=1,IF(JG7B=1 OR JC3C=1,1,0),0);{融合区-通用买入信号}; JP4B:=IF(JM2B=1,IF(JP4A=1,IF(COUNT(JP2A=1,SUMBARS(JM2A,1))>=1,IF(SUMBARS(JP2A,1)>1 AND COUNT(JP3B=1,SUMBARS(JP2A,1))>=1,1,0),0),0),0); JP4C:=IF(JM2B=1,IF(JP4B=1,MAX(JG7C,JC3B),0),0);{循环买入-成交价} JP4D:=IF(JM2B=1,IF(JP4B=1,INTPART(TRE1/JP4C/100)*100,0),0);{循环买入-成交数量} JP4E:=IF(JM2B=1,IF(JP4B=1,JP4C*JP4D,0),0);{循环买入-成交额} JP4F:=IF(JM2B=1,IF(JP4B=1,IF((JP4E*2.5/10000)<5,5,JP4E*2.5/10000)+JP4E/100000,0),0);{循环买入-成交成本}; JP5A:=IF(JM2B=1,IF(COUNT(JP4B=1,SUMBARS(JM2A,1))>=1,IF(JP3A=1,1,0),0),0);{循环区-减仓卖出信号}; JP5B:=IF(JM2B=1,IF(JP5A=1,O,0),0);{循环区-减仓卖出-价格} JP5C:=IF(JM2B=1,IF(JP5A=1,REF(JP4D,SUMBARS(JP4B,1)-1),0),0);{循环区-减仓卖出-数量} JP5D:=IF(JM2B=1,IF(JP5A=1,JP5B*JP5C,0),0);{循环区-减仓卖出-金额} JP5E:=IF(JM2B=1,IF(JP5A=1,IF((JP5D*2.5/10000)<5,5,JP5D*2.5/10000)+JP5D/1000+JP5D/100000,0),0); JP6A:=IF(JM2B=1,SUM(JP1D,SUMBARS(JM2A,1))+SUM(JP2E,SUMBARS(JM2A,1))+SUM(JP3F,SUMBARS(JM2A,1))+SUM(JP4F,SUMBARS(JM2A,1))+SUM(JP5E,SUMBARS(JM2A,1)),0);{融合持仓区-所有交易成本}; JP6B:=IF(JM2B=1,SUM(JP1C,SUMBARS(JM2A,1))+SUM(JP2D,SUMBARS(JM2A,1))+SUM(JP4E,SUMBARS(JM2A,1)),0);{融合持仓区-所有投入金额}; JP6C:=IF(JM2B=1,SUM(JP3E,SUMBARS(JM2A,1))+SUM(JP5D,SUMBARS(JM2A,1)),0); JP6D:=IF(JM2B=1,JP6B-JP6C,0);{融合持仓区-实际投入金额-用于计算持仓成本} JP6E:=IF(JM2B=1,SUM(JP1B,SUMBARS(JM2A,1))+SUM(JP2C,SUMBARS(JM2A,1))+SUM(JP4D,SUMBARS(JM2A,1)),0);{融合持仓区-所有买入数量}; JP6F:=IF(JM2B=1,SUM(JP3D,SUMBARS(JM2A,1))+SUM(JP5C,SUMBARS(JM2A,1)),0); JP6G:=IF(JM2B=1,JP6E-JP6F,0);{融合持仓区-实际持仓数量-用于计算持仓成本}; JP6H:=IF(JM2B=1,(JP6D+JP6A)/JP6G,0);{融合区综合持仓实际成本}; JP6I:=IF(JM2B=1,(C-JP6H)*JP6G,0);{融合区持仓浮盈} JP6J:=IF(JM2B=1,JP6I/JP6D*100,0);{融合持仓区-浮盈率}; 选股输出:JM2B=1 AND SUMBARS(JM2A,1)<=5 AND JP6J<=5; 注: 馆内各种公式为学习编程而保存,实战使用前一定要看其中是否有未来函数并自己亲自测试成功率,决不能依据公式名称的描述和形容去投资,据此入市造成投资损失由投资者自己承担。 发文不易,如获益,欢迎赞赏,赞赏必复! |
|
来自: 追梦文库 > 《策略逻辑理念思维》