分类
外汇剥头皮交易策略基础知识介绍

Mt4 指标 波动 均線 移動平均

分价数storage.separateAmount的赋值
经过前文的讨论,我们发现筹码分布算法相当的损耗性能,并且该算法的时间复杂度和分价数storage.separateAmount赋值的大小关系紧密,这个值设得越大,时间复杂度中的减速系数就会越大。因此,尽量找到一个合适的分价数对算法的性能至关重要。本例中对于输入数据3.81-4.08的价格波动我们设置了storage.separateAmount=100的分价数显然是偏大了,各位读者请不要认为这个数字在实践中就是按照这个比例来设置的(因为将这个数设的越大,可以得到更精细的结果)。实际应用中10元的价格波动设置100的分价数就可以得到比较合适的筹码分布结果,如果希望得到更精细的结果可以适当增大这个值。
算法优化
如果认真的阅读了本文所示的源代码,各位读者在读到getPosition和getTriangleAmount这两个方法的时候一定会感到困惑,为什么我将这两个内嵌逻辑提取出来构造了两个独立的方法。因为此处将会提出对这两个方法的算法改进!
对于getPosition的调用,我们知道他被嵌套在一个for循环内,查找方法的O(n)嵌套在遍历方法的O(n)中也就形成了一个O(n^2)的时间消耗,因此我们有理由对这个查找方法进行优化。我们通过calcSeparate得出的分价表本身是一个有序数组,在有序数组中进行查找的最快算法就是二分查找,由此以下给出一个getPosition的二分搜索算法实现:

文华财经缠论分笔及中枢主图指标公式

KU1:=IF(HIGH=HHV(HIGH,3),1,0);
KD1:=IF(LOW=LLV(LOW,3),1,0);
UL:=IF(REF(KU1,2)=1 AND REF(KU1,1)=0
AND KU1=0,REF(HIGH,2),REF(HIGH,2+BARSLAST(REF(KU1,Mt4 指标 波动 均線 移動平均 2)=1
AND REF(KU1,1)=0 AND KU1=0)));
DL:=IF(REF(KD1,2)=1 AND REF(KD1,1)=0 AND KD1=0,REF(LOW,Mt4 指标 波动 均線 移動平均 2),REF(LOW,2+BARSLAST(REF(KD1,2)=1
AND REF(KD1,1)=0 AND KD1=0)));
HV:=H>UL AND H>REF(H,1) ;
LV:=LGP:=BARSLAST(HV);
DP:=BARSLAST(LV);
IP:=IF(GP=0,DP,GP)>3;
HV1:=HV AND IP AND H>=HHV(H,BARSLAST(LV));
LV1:=LV AND IP AND LDRAWLINE(LV1,LOW,HV1, HIGH,0),coloryellow,LINETHICK2;
DRAWLINE(HV1,HIGH,LV1, LOW,0),colormagenta,LINETHICK2;
///加入中枢判定
//简化版
N1:=10;N2:=10;DISP:=2;K:=1;
P1:=PEAK(1,K*N1,1);
P2:=PEAK(1,K*N1,2);
WP1:=PEAKBARS(1,K*N1,1);
WP2:=PEAKBARS(1,K*N1,2);
T1:=TROUGH(2,K*N2,1);
T2:=TROUGH(2,K*N2,2);
WT1:=TROUGHBARS(2,K*N2,1);
WT2:=TROUGHBARS(2,K*N2,2);
TJ1:=P1>T1 AND P2>T2 ;
ZD:=MAX(T1,T2);
ZG:=MIN(P1,P2);
LL:=MIN(Mt4 指标 波动 均線 移動平均 T1,T2);
HH:=MAX(P1,P2);
TJ2:=FILTER(ZG>ZD,2);
TJ3:=ZG=REF(ZG,BARSLAST(TJ2)) OR ZD=REF(ZD,BARSLAST(TJ2));
TJ4:=TJ1 AND TJ2 AND NOT(TJ3);
TJ5:=BETWEEN(ZD,REF(ZD,REF(BARSLAST(TJ4),1)),REF(ZG,REF(BARSLAST(TJ4),1)));
TJ6:=BETWEEN(ZG,REF(ZD,REF(BARSLAST(TJ4),1)),REF(ZG,REF(BARSLAST(TJ4),1)));
TJ7:=ZG>REF(ZG,REF(BARSLAST(TJ4),1)) AND ZDTJ8:=TJ4 AND NOT(TJ5 OR TJ6 OR TJ7);
ZSD:=IF(TJ8,ZD,REF(ZD,1));//,coloryellow;
ZSG:=IF(TJ8,ZG,REF(ZG,1));//,colormagenta;
ZSH:=IF(TJ8,HH,REF(HH,1));//,colorblue;
ZSL:=IF(TJ8,LL,REF(LL,1));Mt4 指标 波动 均線 移動平均 //,colorgreen;
STICKLINE(TJ8,ZSH,ZSL,0,-1),colormagenta;
STICKLINE(TJ8,ZSD,ZSG,IF(DISP=1,3,0),1),colormagenta;
DRAWTEXT(DISP=2,ZSH,''),colorwhite;
//中枢高
中枢高:ZSG,colormagenta;
POLYLINE(DISP=2,REF(ZSG,BARSLAST(TJ8))),CIRCLEDOT,colormagenta;
//中枢低:
中枢低:ZSD,coloryellow;
POLYLINE(DISP=2,REF(ZSD,BARSLAST(TJ8))),CIRCLEDOT,coloryellow;
//中枢最高:
中枢最高:ZSH,colorred;
POLYLINE(DISP=2,REF(ZSH,BARSLAST(TJ8))),POINTDOT,colorred;
//中枢最低:
中枢最低:ZSL,colorgreen;
POLYLINE(DISP=2,REF(ZSL,BARSLAST(TJ8))),POINTDOT,colorgreen;
// 趋势 高:
//QSGD1:Mt4 指标 波动 均線 移動平均 POLYLINE(DISP=3,ZIG(1,K*N1)),colorblue;
//趋势低:
//QSDD1:POLYLINE(DISP=3,ZIG(2,K*N2)),colorblue;
MA5:MA(CLOSE,5),COLORFF00FF,Linethick1;
//COLORFF00FF,LINETHICK2;
命真好:=MA5>REF(MA5,1);
命真坏:=MA5//判定:
PARTLINE(MA5,命真好,coloryellow,命真坏,colorblue,MA5,COLORFF00FF),linethick3;
//F1:IF(MA5

文华技术人员://改成的文华财经缠论分笔及中枢主图指标源码

UL:=IFELSE(REF(KU1,2)=1 AND REF(KU1,1)=0 AND KU1=0,REF(HIGH,2),REF(HIGH,2+BARSLAST(REF(KU1,2)=1 AND REF(KU1,1)=0 AND KU1=0)));

DL:=IFELSE(REF(KD1,2)=1 AND REF(KD1,1)=0 AND KD1=0,REF(LOW,2),REF(LOW,2+BARSLAST(REF(KD1,2)=1 AND REF(KD1,1)=0 AND KD1=0)));

Mt4 指标 波动 均線 移動平均

Sentiment Strategy: Beginner

Sentiment Strategy: Beginner's Guide [EN]

You have downloaded the FXSSI Pro Indicators package. Thank you for your interest. But what's next? Read a detailed Sentiment Strategy guide below for a better understanding.

K线技术指标实现详解—筹码分布

响尾大菜鸟 于 2018-06-26 09:21:31 发布 13486 收藏 35

K线技术指标实现详解—筹码分布

实现方式一:

实现方式二:

计算及实现

时间复杂度讨论

要得到上图所示的输出结果,我们首先需要确定以什么样的精度来细分分价表,此处我们通过calcSeparate方法来计算得出。在calcSeparate方法中我们先得到整个数据的最大值和最小值,然后通过(max-min)/storage. separateAmount得到分价间隔,这里的storage.separateAmount完全使我们自己定义的,对于价格波动较小的个股需要定义的稍小一点,对于价格波动较大的股票则需要定义的大一些,本例中我们定义为100。根据最小值、最大值以及分价间隔,我们得到了总的分价数组storage.chipSeparate。这个方法的时间复杂度是显而易见的,我们仅仅在获得最大值最小值的时候对整个数据进行了一次遍历,而后进行了分价数组的赋值工作(该赋值操作的耗时和storage.separateAmount相关),因此时间复杂度为O(n)。
接下来计算累加筹码之前,我们需要首先按照三角形分布算法计算出输入数据的单日筹码,这里我们通过calcSingledayChip方法来实现。在这个方法中,我们将每日价格区间映射到分价数组中,然后以三角函数将每日的成交量均匀分布到分价数组对应的映射区间上,最终将单日筹码分布的dayChip对象赋给单日筹码存储器storage.chipStorage中,整个for循环走完之后,输入数据的单日筹码也就全部计算完成。在这个方法中,我们用一个大的for循环来遍历输入数据,在循环内部,有两次getPosition的查找操作,一个计算当日三角形形状的getTriangleAmount方法,和两个内部for循环来完成当日筹码的赋值(这两个for循环实际上是对一个完整for循环的拆分),因此理论上比较精确的时间复杂度为O(4n^2)。
最后我们进行的操作是对某日的筹码进行累加,在calcDayChip方法中我们进行了这个操作。首先通过一个循环得出当日对应的流通股本周期以及周期内的最大最小值,之后进行对应这个流通股本价格区间内的分价表初始化操作,最后我们通过一个嵌套循环完成了筹码的累加。对于最后的累加算法,其时间复杂度为O(2n+n^2)。
最终我们得到,整个筹码分布的算法时间复杂度为O(3n+5n^2)。

分价数storage.separateAmount的赋值
经过前文的讨论,我们发现筹码分布算法相当的损耗性能,并且该算法的时间复杂度和分价数storage.separateAmount赋值的大小关系紧密,这个值设得越大,时间复杂度中的减速系数就会越大。因此,尽量找到一个合适的分价数对算法的性能至关重要。本例中对于输入数据3.81-4.08的价格波动我们设置了storage.separateAmount=100的分价数显然是偏大了,各位读者请不要认为这个数字在实践中就是按照这个比例来设置的(因为将这个数设的越大,可以得到更精细的结果)。实际应用中10元的价格波动设置100的分价数就可以得到比较合适的筹码分布结果,如果希望得到更精细的结果可以适当增大这个值。
算法优化
如果认真的阅读了本文所示的源代码,各位读者在读到getPosition和getTriangleAmount这两个方法的时候一定会感到困惑,为什么我将这两个内嵌逻辑提取出来构造了两个独立的方法。因为此处将会提出对这两个方法的算法改进!
对于getPosition的调用,我们知道他被嵌套在一个for循环内,查找方法的O(n)嵌套在遍历方法的O(n)中也就形成了一个O(n^2)的时间消耗,因此我们有理由对这个查找方法进行优化。我们通过calcSeparate得出的分价表本身是一个有序数组,在有序数组中进行查找的最快算法就是二分查找,由此以下给出一个getPosition的二分搜索算法实现:

技术指标使用建议

正如前文所述,筹码分布代表了当前K线下股民的大致持股分价情况。据此我们有理由相信,大部分股民集中的价格点一定是个股趋势的一个阻力点。
1.大部分筹码价格高于目前的价格:此时意味着大部分持股者为套牢盘,也就是所谓的“空方势力”,当出现这种筹码形态时我们认为该个股的价格上涨会遇到较大阻力。庄家在拉升该股时会浪费更多资金,因此很大可能下会选择“盘震”等手段来洗出套牢盘,而后再进行拉升。
2.大部分筹码价格低于目前的价格:此时意味着大部分持股者已经获利不小,随时有可能甩盘从而引起个股价格下跌。所谓高处不胜寒,对于个股价格远高于筹码分布主要集中区的个股,很大情况下后续就会出现价格下跌。
3.大部分筹码集中在目前价格附近:对于这种情况不能妄下定论,如果个股处于上行通道并且在之后的交易日内突破了大部分筹码集中区,那么剩下的股价拉升会非常顺利,并且阻力较小,直至股价高出太多导致持股者想出手获利;如果个股处于下行通道并且即将跌破大部分筹码集中区,那往往在跌破之后会一如倾泻之势,因为跌穿之后,许多亏损的股民会选择不止损套牢,从而多方的力量也就随之消失,价格一跌再跌毫无抵抗。