谁能编个自定义函数?

 

能不能编个自定义函数:为取N周期内满足条件的次数,就象股票中的COUNT()函数

例如我要表示在N周期内均线的交叉次数大于等于2时为均线的2次交叉(或死叉) 首先我已经自定义交叉函数: double cross(double ma1,double ma2)

{ double ma10,ma11,ma20,ma21; int css=2;

ma10=iMA(NULL,0,ma1,0,MODE_SMA,PRICE_CLOSE,0);

ma11=iMA(NULL,0,ma1,0,MODE_SMA,PRICE_CLOSE,1);

ma20=iMA(NULL,0,ma2,0,MODE_SMA,PRICE_CLOSE,0);

ma21=iMA(NULL,0,ma2,0,MODE_SMA,PRICE_CLOSE,1);

if(ma10>ma20 && ma11 ma21) {css=1;}

return(css); }

如果有统计总数自定义函数,N周期内满足条件的次数的话我会很方便表示2次交叉的 假如COUNT()为统计函数则:COUNT(CROSS(ma1,ma2),N)>=2 就可方便表示在N周期内均线的2次交叉 当然用循环也可,但我用的统计函数用的非常多,每次都要循环太麻烦,测试时也影响速度,比如我可能用MACD的2次金插或KDJ或其他指标,总之用的多,如果能自定义个统计函数是很方便的

另外取N周期内最高最低值,也许要编个自定义函数,比如我想取N周期的均线的最大值,不是用iHighest()所能表示的,我要N周期的MACD的最大值哪?其他指标的最大值哪?或者比如我要(MA10-MA30)两均线之差的绝对值的在N周期内的最大值又如何表示?这很重要的代表均线的乖离程度...所以能不能编个自定义函数来表示N周期内的最高最低值

还有自定义返回值函数,CLOSE[N],HIGH[N]....等到可以表示,可远远不够用,我要表示MA10的前1或2或3,MACD 的前1或2或3 ; KDJ的前1或2或3......如果我全赋一次值的话,你门看看将是一堆:

MA5D=iMA(NULL,PERIOD_D1,4,0,MODE_SMA,PRICE_CLOSE,0);
MA5D1=iMA(NULL,PERIOD_D1,4,0,MODE_SMA,PRICE_CLOSE,1);
MA5D2=iMA(NULL,PERIOD_D1,4,0,MODE_SMA,PRICE_CLOSE,2);
MA5D3=iMA(NULL,PERIOD_D1,4,0,MODE_SMA,PRICE_CLOSE,3);
MA10D=iMA(NULL,PERIOD_D1,8,0,MODE_SMA,PRICE_CLOSE,0);
MA10D1=iMA(NULL,PERIOD_D1,8,0,MODE_SMA,PRICE_CLOSE,1);
MA10D2=iMA(NULL,PERIOD_D1,8,0,MODE_SMA,PRICE_CLOSE,2);
MA10D3=iMA(NULL,PERIOD_D1,8,0,MODE_SMA,PRICE_CLOSE,3);
MA20D=iMA(NULL,PERIOD_D1,20,0,MODE_SMA,PRICE_CLOSE,0);
MA20D1=iMA(NULL,PERIOD_D1,20,0,MODE_SMA,PRICE_CLOSE,1);
MA20D2=iMA(NULL,PERIOD_D1,20,0,MODE_SMA,PRICE_CLOSE,2);
MA20D3=iMA(NULL,PERIOD_D1,20,0,MODE_SMA,PRICE_CLOSE,3);
MA20D8=iMA(NULL,PERIOD_D1,20,0,MODE_SMA,PRICE_CLOSE,8);
MA30D=iMA(NULL,PERIOD_D1,30,0,MODE_SMA,PRICE_CLOSE,0);
MA30D1=iMA(NULL,PERIOD_D1,30,0,MODE_SMA,PRICE_CLOSE,1);
MA30D2=iMA(NULL,PERIOD_D1,30,0,MODE_SMA,PRICE_CLOSE,2);
MA30D3=iMA(NULL,PERIOD_D1,30,0,MODE_SMA,PRICE_CLOSE,3);
MA30D8=iMA(NULL,PERIOD_D1,30,0,MODE_SMA,PRICE_CLOSE,8);
MA120D=iMA(NULL,PERIOD_D1,120,0,MODE_SMA,PRICE_CLOSE,0);
MA120D1=iMA(NULL,PERIOD_D1,120,0,MODE_SMA,PRICE_CLOSE,1);
MA120D2=iMA(NULL,PERIOD_D1,120,0,MODE_SMA,PRICE_CLOSE,2);
MA120D3=iMA(NULL,PERIOD_D1,120,0,MODE_SMA,PRICE_CLOSE,3);
MA120D16=iMA(NULL,PERIOD_D1,120,0,MODE_SMA,PRICE_CLOSE,16);

MA5DS=(MA5D>MA5D1&&MA5D1>MA5D2);
MA5DX=(MA5D<MA5D1&&MA5D1<MA5D2);
MA10DS=(MA10D>MA10D1&&MA10D1>MA10D2);
MA10DX=(MA10D<MA10D1&&MA10D1<MA10D2);
MA20DS=(MA20D>MA20D1&&MA20D1>MA20D2);
MA20DX=(MA20D<MA20D1&&MA20D1<MA20D2);
MA30DS=(MA30D>MA30D1&&MA30D1>MA30D2);
MA30DX=(MA30D<MA30D1&&MA30D1<MA30D2);
MA120DS=(MA120D>MA120D1&&MA120D1>MA120D2);
MA120DX=(MA120D<MA120D1&&MA120D1<MA120D2);
DIFFD0=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
DIFFD1=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
DIFFD2=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
DIFFD3=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_MAIN,3);
DIFFD6=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_MAIN,6);
DIFFD10=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_MAIN,10);
DIFFD16=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_MAIN,16);
DEAD0=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
DEAD1=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
DEAD2=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2);
DEAD3=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,3);
DEAD6=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,6);
DEAD16=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,16);
DEAD10=iMACD(NULL,PERIOD_D1,12,26,9,PRICE_CLOSE,MODE_SIGNAL,10);
MA10=iMA(NULL,PERIOD_M5,10,0,MODE_SMA,PRICE_CLOSE,0);

MA30=iMA(NULL,PERIOD_M5,30,0,MODE_SMA,PRICE_CLOSE,0);
MA301=iMA(NULL,PERIOD_M5,30,0,MODE_SMA,PRICE_CLOSE,1);
MA302=iMA(NULL,PERIOD_M5,30,0,MODE_SMA,PRICE_CLOSE,2);
MA303=iMA(NULL,PERIOD_M5,30,0,MODE_SMA,PRICE_CLOSE,3);
MA308=iMA(NULL,PERIOD_M5,30,0,MODE_SMA,PRICE_CLOSE,8);
MA3018=iMA(NULL,PERIOD_M5,30,0,MODE_SMA,PRICE_CLOSE,18);
MA3040=iMA(NULL,PERIOD_M5,30,0,MODE_SMA,PRICE_CLOSE,40);
MA3080=iMA(NULL,PERIOD_M5,30,0,MODE_SMA,PRICE_CLOSE,80);
POMA30S=(High[iHighest(NULL,PERIOD_M5,MODE_HIGH,16,0)]-iMA(NULL,PERIOD_M5,30,0,MODE_SMA,PRICE_CLOSE,iHighest(NULL,PERIOD_M5,MODE_HIGH,16,0)))>25*Point;
MA90=iMA(NULL,PERIOD_M5,90,0,MODE_SMA,PRICE_CLOSE,0);
MA901=iMA(NULL,PERIOD_M5,90,0,MODE_SMA,PRICE_CLOSE,1);
MA902=iMA(NULL,PERIOD_M5,90,0,MODE_SMA,PRICE_CLOSE,2);
MA908=iMA(NULL,PERIOD_M5,90,0,MODE_SMA,PRICE_CLOSE,8);
MA9016=iMA(NULL,PERIOD_M5,90,0,MODE_SMA,PRICE_CLOSE,16);
MA180=iMA(NULL,PERIOD_M5,180,0,MODE_SMA,PRICE_CLOSE,0);
MA1801=iMA(NULL,PERIOD_M5,180,0,MODE_SMA,PRICE_CLOSE,1);
MA1802=iMA(NULL,PERIOD_M5,180,0,MODE_SMA,PRICE_CLOSE,2);
MA1808=iMA(NULL,PERIOD_M5,180,0,MODE_SMA,PRICE_CLOSE,8);
MA18018=iMA(NULL,PERIOD_M5,180,0,MODE_SMA,PRICE_CLOSE,18);
MA400=iMA(NULL,PERIOD_M5,400,0,MODE_SMA,PRICE_CLOSE,0);
MA4001=iMA(NULL,PERIOD_M5,400,0,MODE_SMA,PRICE_CLOSE,1);
MA4002=iMA(NULL,PERIOD_M5,400,0,MODE_SMA,PRICE_CLOSE,2);
MA4003=iMA(NULL,PERIOD_M5,400,0,MODE_SMA,PRICE_CLOSE,3);
MA4008=iMA(NULL,PERIOD_M5,400,0,MODE_SMA,PRICE_CLOSE,8);
MA800=iMA(NULL,PERIOD_M5,800,0,MODE_SMA,PRICE_CLOSE,0);
MA8001=iMA(NULL,PERIOD_M5,800,0,MODE_SMA,PRICE_CLOSE,1);
MA8002=iMA(NULL,PERIOD_M5,800,0,MODE_SMA,PRICE_CLOSE,2);
MA8008=iMA(NULL,PERIOD_M5,800,0,MODE_SMA,PRICE_CLOSE,8);
MA800300=iMA(NULL,PERIOD_M5,800,0,MODE_SMA,PRICE_CLOSE,300);
MA30S=MA30>MA302&&MA301>MA302;
MA30X=MA30<MA301&&MA301<MA302;
MA90S=MA90>MA902&&MA901>MA902;
MA90X=MA90<MA901&&MA901<MA902;
MA180S=MA180>MA1801&&MA1801>MA1802;
MA180X=MA180<MA1801&&MA1801<MA1802;
MA800S=MA800>MA8001&&MA8001>MA8002;
MA800X=MA800<MA8001&&MA8001<MA8002;
PAN20=((High[Highest(NULL,PERIOD_M5,MODE_CLOSE,40,3)]-Low[Lowest(NULL,PERIOD_M5,MODE_CLOSE,40,3)]));
DIFF0=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
DIFF1=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
DIFF2=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
DIFF3=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_MAIN,3);
DIFF6=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_MAIN,6);
DIFF10=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_MAIN,10);
DIFF16=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_MAIN,16);
DEA0=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
DEA1=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
DEA2=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2);
DEA3=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,3);
DEA6=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,6);
DEA16=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,16);
DEA10=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,10);
DEA20=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,20);
DEA24=iMACD(NULL,PERIOD_M5,12,26,9,PRICE_CLOSE,MODE_SIGNAL,24);
DIFFM0=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
DIFFM1=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
DIFFM2=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,2);
DIFFM3=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,3);
DIFFM6=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,6);
DIFFM10=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,10);
DIFFM16=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,16);
DIFFM20=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_MAIN,20);
DEAM0=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
DEAM1=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
DEAM2=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2);
DEAM3=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,3);
DEAM6=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,6);
DEAM10=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,10);
DEAM16=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,16);
DEAM20=iMACD(NULL,PERIOD_M15,12,26,9,PRICE_CLOSE,MODE_SIGNAL,20);
.......................................全是我要用的,已经严重影响我的测试速度了

 

返回值函数就想股票的REF()函数,比如REF(MA10,2)就是MA10的前两个值,也可以是REF(MACD,N).....等

请高手或版主过来能编成自定义函数,那才真是造福汇民,谢谢

原因: