比如以boll指标为例:input:m(10,1,100,1),n(3,1,100,1);
MID : MA(CLOSE,M);
UPPER: MID + N*STD(CLOSE,M);
LOWER: MID - N*STD(CLOSE,M);
我想写出只上升的下轨,我只下降的上轨,要怎么编写?参考魔鬼通道效果
此主题相关图片如下:qq截图20210417201610.png

魔鬼通道效果图无法上传,请参考金字塔软件里的
[此贴子已经被作者于2021/4/17 20:21:15编辑过]
那个魔鬼通道是完全加密的程序,只看这个效果的话,很难推测它这个逻辑是怎样的情况。“
只上升的下轨,我只下降的上轨”所以这个你最好能文字描述下。否则看图效果的话,我们很难达成理解上的共识的。
当K线开始的时候,画出只下降的上轨,如果上轨的值高于上一日的值,就取上一日上轨,这样就画出只下降的上轨了。
画只上升的下轨,就是如果下轨的值低于上一日的值,就取上一日下轨,这样就画出只上升的下轨了。
直到有一K突破:比如最高价突破上轨,那就开始画只上升的下轨,此时上轨的原始值不变。
待到最低价跌破所画的下轨,就画只下降的上轨,此时下轨的原始值不变。
你先看下这样:
input:m(10,1,100,1),n(3,1,100,1);
MID := MA(CLOSE,M);
UPPER:= MID + N*STD(CLOSE,M);
LOWER:= MID - N*STD(CLOSE,M);
realUPPER:if(UPPER>ref(UPPER,1),ref(UPPER,1),UPPER);
realLOWER:if(LOWER<ref(LOWER,1),ref(LOWER,1),LOWER);
这个轨道是不是你要的。就是原先上下轨得计算逻辑保持不变,但是不作为最终的指标线输出。输出指标线时候,对当前的轨道值和上个K的轨道值进行对比后 再取值。
你的写法,显示的效果只是上升的时候往后移了一位。下降的时候保持原值。
那么,如果下降途中反弹的上轨连续超过两根K线,那它就不会保持低值往后移了。下轨反之也是如此。
如下图我手工标示的位置,以水平的形式画出不倒退的上轨和下轨。

此主题相关图片如下:qq截图20210419151850.png

这样做。用全局变量纪录。
input:m(10,1,100,1),n(3,1,100,1);
MID := MA(CLOSE,M);
UPPER: MID + N*STD(CLOSE,M);
LOWER: MID - N*STD(CLOSE,M);
VARIABLE:x1:=0,x2:=0;
if BARPOS=M then //M个K之后上下轨才正常有值。
begin
x1:=UPPER;
x2:=LOWER;
end
if UPPER<x1 then x1:=UPPER;
if LOWER>x2 then x2:=LOWER;
showUPPER:x1;
showLOWER:x2;
上下轨转折地方 需要你提供一个条件。你先看下上面这样上下轨对不对吧。
起始的原理有点接近了,但现在的上轨是只是向下,直到屏幕最低,下轨就只是向上直到屏幕最高,中间不会自动变换,
如下图:我的意思是要当后面的行情突破上轨后,上轨x1变回原UPPER值,而下轨LOWER就画x2只向上走的线,
直到行情跌破下轨x2,那么下轨x2就变回以LOWER值,而上轨UPPER开始画x1只向下走的线

此主题相关图片如下:qq截图20210419202447.png

老师还能再改改吗?后面的变换可以用收盘价突破
[此贴子已经被作者于2021/4/20 15:08:13编辑过]
你这里“行情突破上轨”这个如果是用最高价突破上轨 或者是使用最低价突破下轨。这样的话,一个K上是可能同时满足2个突破的。 这样逻辑上就有冲突的。如果硬要处理 后面也会很复杂的。