以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 对数坐标下的黄金分割线计算公式 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=183980) |
-- 作者:popypopy -- 发布时间:2021/1/19 15:24:30 -- 对数坐标下的黄金分割线计算公式 我用常规的0.618,0.382等规则计算得出的黄金分割点和金字塔软件里用黄金分割线画线工具画出的对不上,我猜测是因为k仙途默认用的对数坐标导致的。 请问在对数坐标下,各个黄金分割点的计算公式应该怎么写?
|
-- 作者:FireScript -- 发布时间:2021/1/19 16:32:28 -- 这个我们想办法核实下吧。试了下,研究半天没搞清楚和正常坐标为什么会有数值差异。 |
-- 作者:popypopy -- 发布时间:2021/1/21 1:01:43 -- 我先在忽略默认的对数坐标做了一个黄金分割线公式,基本符合我的使用需求,但是有个细节问题我搞不定,当画线数值命中规则发生变化情况时,之前默认按照90长度画线就会和新的画线产生重叠,导致画面太乱影响数据的查看,如下图红圈所示,符合新的条件的黄金分割线和之前画的线重叠了: 以下是我的代码:
//黄金分割
90高点:=hhv(high,90);90高点位:=hhvbars(high,90);90低点:=llv(low,90);90低点位:=llvbars(low,90);
90前高:=if(90高点/ref(high,90高点位-10)>1.1 and 90高点/ref(high,90高点位+10)>1.1,90高点,0);
90前低:=if(90低点/ref(low,90低点位-10)<0.9 and 90低点/ref(low,90低点位+10)<0.9,90低点,0);
90高差:=90高点-90低点;
90波段:=90前高>0 and abs(前高价_2-90高点)/90高点>0.03 and 前高位置_2>90高点位;
90触底回升:=90低点位<90高点位 and 90波段;
90-382:=90低点+90高差*0.382;90-618:=90低点+90高差*0.618;90-中位:=90低点+90高差*0.5;
90触顶下跌:=90低点位>90高点位 and 90波段;
线长:=if(前高位置_1<ref(90高点位,1),90高点位-前高位置_1,90);
drawsl(90波段 and not(ref(90波段,1)),90高点+90高差*1,0,线长,3,colorgray,1,vtDashDot);
drawsl(90波段 and not(ref(90波段,1)),90高点+90高差*0.618,0,线长,3,colorgray,1,vtDot);
drawsl(90波段 and not(ref(90波段,1)),90高点+90高差*0.5,0,线长,3,colorgray,1,vtDot);
drawsl(90波段 and not(ref(90波段,1)),90高点+90高差*0.382,0,线长,3,colorgray,1,vtDot);
drawsl(90波段 and not(ref(90波段,1)),90高点,0,线长,3,colorgray,1,vtDASH);
drawsl(90波段 and not(ref(90波段,1)),90低点,0,线长,3,colorgray,1,vtDASH);
drawsl(90波段 and not(ref(90波段,1)),90低点+90高差*0.382,0,线长,3,colorgray,1,vtDot);
drawsl(90波段 and not(ref(90波段,1)),90低点+90高差*0.5,0,线长,3,colorgray,1,vtDot);
drawsl(90波段 and not(ref(90波段,1)),90低点+90高差*0.618,0,线长,3,colorgray,1,vtDot);
DRAWTEXT(90波段 and not(ref(90波段,1)),90高点+90高差*1,\'2\',COLORwhite);
DRAWTEXT(90波段 and not(ref(90波段,1)),90高点+90高差*0.618,\'1.618\',COLORwhite);
DRAWTEXT(90波段 and not(ref(90波段,1)),90高点+90高差*0.5,\'1.5\',COLORwhite);
DRAWTEXT(90波段 and not(ref(90波段,1)),90高点+90高差*0.382,\'1.382\',COLORwhite);
DRAWTEXT(90波段 and not(ref(90波段,1)),90低点+90高差*0.382,\'0.382\',COLORwhite);
DRAWTEXT(90波段 and not(ref(90波段,1)),90低点+90高差*0.5,\'0.5\',COLORwhite);
DRAWTEXT(90波段 and not(ref(90波段,1)),90低点+90高差*0.618,\'0.618\',COLORwhite);
DRAWTEXT(90波段 and not(ref(90波段,1)),90高点,\'90高点 \'&NUMTOSTR(90高点,3),COLORwhite);
DRAWTEXT(90波段 and not(ref(90波段,1)),90低点,\'90低点\'&NUMTOSTR(90低点,3),COLORwhite); |
-- 作者:FireScript -- 发布时间:2021/1/21 9:47:58 -- 这个相当于使得之前的画线条件失效。目前没有好的办法,除非用未来函数操作。指标需要在序列模式下执行才行。 参考我这里的一个操作思路。 ma4:ma(c,4);
ma6:ma(c,6); majc:cross(ma4,ma6); cd:majc; ctx:refx(count(cd,0),DATACOUNT-BARPOS);//获取最新K上cd发生的次数 ctc:count(cd,0);//当前K位置发生的次数 drawsl(cd and ctc=ctx ,h,0,10,3,colorgray,1,vtDashDot);//仅在最后一次cd满足位置画线 前面的自动失效 |