资源加载中... loading...

迎角跟随线信号策略

Author: 雨幕(youquant), Date: 2022-05-30 10:24:41
Tags: Angle

回测测试

img

img

img


/*backtest
start: 2021-12-01 00:00:00
end: 2022-05-12 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
args: [["ContractType","rb2210",360008]]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © cmlaydinn

//@version=5
indicator(shorttitle='Teyfık', title='Angle Attack Follow Line Indicator ', overlay=false, max_bars_back=1000)

//INPUTS ————————————————————————————————————————————————————————————
FL = input(title='跟随线,当前图表时间精度', defval=true)

BBperiod = input.int(defval=21, title='周期', minval=1)
BBdeviations = input.float(defval=1.00, title='背离', minval=0.1, step=0.05)
UseATRfilter = input(defval=true, title='ATR过滤')
ATRperiod = input.int(defval=5, title='ATR周期', minval=1)

FLH = input(title='跟随线HIGHER时间精度', defval=true)

AIB = input(defval=true, title='使用指示器背景')
TYPE = input.string(title='均线类型', defval='SMA', options=['RMA', 'SMA', 'EMA', 'WMA', 'VWMA', 'SMMA', 'KMA', 'TMA', 'HullMA', 'DEMA', 'TEMA', 'CTI'])
RES = input.timeframe('240', title='时间精度')
LEN = input(21, title='周期')
BBdeviations_ = input.float(defval=1.00, title='背离', minval=0.1, step=0.05)
ATRperiod_ = input.int(defval=5, title='ATR周期', minval=1)
SOUR = input(title='数据源', defval=close)

MD = input(title='模式', defval=true)

MODE = input.string(title='模式的类型', defval='NO FILTER HIGHER TIME FRAME', options=['NO FILTER HIGHER TIME FRAME', 'FILTER HIGHER TIME FRAME'])

AC = input(title='角度配置', defval=true)

i_lookback = input.int(8, '角度周期', minval=1)
i_atrPeriod = input.int(10, 'ATR周期', minval=1)

BSA = input(title=' 买/卖 ', defval=true)

Buy_0 = input(defval=true, title='买入,转换跟踪线')
Sell_0 = input(defval=true, title='卖出,转换跟踪线')

// OTA = input(title=' 需要添加的选项 ', defval=true)

Add_Buy_0 = input(defval=true, title='选项 1 - 添加买入')
Add_Sell_0 = input(defval=true, title='选项 1 - 添加卖出')
Add_Buy_1 = input(defval=false, title='选项 2 - 添加买入')
Add_Sell_1 = input(defval=false, title='选项 2 - 添加卖出')
Add_Buy_2 = input(defval=false, title='选项 3 - 添加买入')
Add_Sell_2 = input(defval=false, title='选项 3 - 添加卖出')

// OTR = input(title=' 减少的项 ', defval=true)

Max_level_1 = input.int(defval=40, title='最大角度等级1', minval=1)
Max_level_2 = input.int(defval=65, title='最大角度等级2', minval=1)
Min_level_1 = input.int(defval=-40, title='最小角度等级1', minval=-100)
Min_level_2 = input.int(defval=-65, title='最小角度等级2', minval=-100)
Red_Buy_0 = input(defval=true, title='选项1,减少购买最大角度级别1')
Red_Buy_1 = input(defval=true, title='选项2,减少购买最大角度级别2')
Red_Buy_2 = input(defval=false, title='选项3,减少购买2个BAR以上最大角度等级2')
Red_Buy_3 = input(defval=true, title='选项4,减少购买3个BAR以上最大角度等级2')
Red_Buy_4 = input(defval=false, title='选项5,减少购买4个BAR以上最大角度等级2')
Red_Sell_0 = input(defval=true, title='选项1,减少卖出最小角度级别1')
Red_Sell_1 = input(defval=true, title='选项2,减少卖出最小角度级别1')
Red_Sell_2 = input(defval=false, title='选项3,减小卖出2个BAR以下的最小角度等级2')
Red_Sell_3 = input(defval=true, title='选项4,减小卖出3个BAR以下的最小角度等级2')
Red_Sell_4 = input(defval=false, title='选项5,减小卖出4个BAR以下的最小角度等级2')


OTH = input(title=' 其它 ', defval=true)

i_barColor = input(true, 'K线柱颜色?')
h_lables = input(false, '隐藏标签')


// FOLLOW LINE —————————————————————————————————————————————————————

BBUpper = ta.sma(close, BBperiod) + ta.stdev(close, BBperiod) * BBdeviations
BBLower = ta.sma(close, BBperiod) - ta.stdev(close, BBperiod) * BBdeviations
TrendLine = 0.0
iTrend = 0.0
BBSignal = close > BBUpper ? 1 : close < BBLower ? -1 : 0
if BBSignal == 1 and UseATRfilter == 1
    TrendLine := low - ta.atr(ATRperiod)
    if TrendLine < TrendLine[1]
        TrendLine := TrendLine[1]
        TrendLine
if BBSignal == -1 and UseATRfilter == 1
    TrendLine := high + ta.atr(ATRperiod)
    if TrendLine > TrendLine[1]
        TrendLine := TrendLine[1]
        TrendLine
if BBSignal == 0 and UseATRfilter == 1
    TrendLine := TrendLine[1]
    TrendLine
if BBSignal == 1 and UseATRfilter == 0
    TrendLine := low
    if TrendLine < TrendLine[1]
        TrendLine := TrendLine[1]
        TrendLine
if BBSignal == -1 and UseATRfilter == 0
    TrendLine := high
    if TrendLine > TrendLine[1]
        TrendLine := TrendLine[1]
        TrendLine
if BBSignal == 0 and UseATRfilter == 0
    TrendLine := TrendLine[1]
    TrendLine
iTrend := iTrend[1]
if TrendLine > TrendLine[1]
    iTrend := 1
    iTrend
if TrendLine < TrendLine[1]
    iTrend := -1
    iTrend

// FOLLOW LINE HIGHER TIME FRAME ——————————————————————————————

cd = 0.0
cti(sm, src, cd) =>
    di = (sm - 1.0) / 2.0 + 1.0
    c1 = 2 / (di + 1.0)
    c2 = 1 - c1
    c3 = 3.0 * (cd * cd + cd * cd * cd)
    c4 = -3.0 * (2.0 * cd * cd + cd + cd * cd * cd)
    c5 = 3.0 * cd + 1.0 + cd * cd * cd + 3.0 * cd * cd
    i1 = 0.0
    i2 = 0.0
    i3 = 0.0
    i4 = 0.0
    i5 = 0.0
    i6 = 0.0
    i1 := c1 * src + c2 * nz(i1[1])
    i2 := c1 * i1 + c2 * nz(i2[1])
    i3 := c1 * i2 + c2 * nz(i3[1])
    i4 := c1 * i3 + c2 * nz(i4[1])
    i5 := c1 * i4 + c2 * nz(i5[1])
    i6 := c1 * i5 + c2 * nz(i6[1])

    bfr = -cd * cd * cd * i6 + c3 * i5 + c4 * i4 + c5 * i3
    bfr

smma(src, len) =>
    smma = 0.0
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

ma(smoothing, src, length) =>
    if smoothing == 'RMA'
        ta.rma(src, length)
    else
        if smoothing == 'SMA'
            ta.sma(src, length)
        else
            if smoothing == 'EMA'
                ta.ema(src, length)
            else
                if smoothing == 'WMA'
                    ta.wma(src, length)
                else
                    if smoothing == 'VWMA'
                        ta.vwma(src, length)
                    else
                        if smoothing == 'SMMA'
                            smma(src, length)
                        else
                            if smoothing == 'HullMA'
                                ta.wma(2 * ta.wma(src, length / 2) - ta.wma(src, length), math.round(math.sqrt(length)))
                            else
                                if smoothing == 'LSMA'
                                    src
                                else
                                    if smoothing == 'KMA'
                                        xPrice = src
                                        xvnoise = math.abs(xPrice - xPrice[1])
                                        nfastend = 0.666
                                        nslowend = 0.0645
                                        nsignal = math.abs(xPrice - xPrice[length])
                                        nnoise = math.sum(xvnoise, length)
                                        nefratio = nnoise != 0 ? nsignal / nnoise : 0
                                        nsmooth = math.pow(nefratio * (nfastend - nslowend) + nslowend, 2)
                                        nAMA = 0.0
                                        nAMA := nz(nAMA[1]) + nsmooth * (xPrice - nz(nAMA[1]))
                                        nAMA
                                    else
                                        if smoothing == 'TMA'
                                            ta.sma(ta.sma(close, length), length)
                                        else
                                            if smoothing == 'DEMA'
                                                emaValue = ta.ema(src, length)
                                                2 * emaValue - ta.ema(emaValue, length)
                                            else
                                                if smoothing == 'TEMA'
                                                    ema1 = ta.ema(src, length)
                                                    ema2 = ta.ema(ema1, length)
                                                    ema3 = ta.ema(ema2, length)
                                                    3 * ema1 - 3 * ema2 + ema3
                                                else
                                                    if smoothing == 'CTI'
                                                        cti(length, src, cd)
                                                    else
                                                        src

MA = ma(TYPE, SOUR, LEN)
MA_MTF = request.security(syminfo.tickerid, RES, MA)
close_ = request.security(syminfo.tickerid, RES, close)
low_ = request.security(syminfo.tickerid, RES, low)
high_ = request.security(syminfo.tickerid, RES, high)
atr_ = request.security(syminfo.tickerid, RES, ta.atr(ATRperiod_))

BBUpper_ = MA_MTF + ta.stdev(close_, LEN) * BBdeviations_
BBLower_ = MA_MTF - ta.stdev(close_, LEN) * BBdeviations_

TrendLine_MTF = 0.0
iTrend_ = 0.0

BBSignal_ = close_ > BBUpper_ ? 1 : close_ < BBLower_ ? -1 : 0

if BBSignal_ == 1
    TrendLine_MTF := low_ - atr_
    if TrendLine_MTF < TrendLine_MTF[1]
        TrendLine_MTF := TrendLine_MTF[1]
        TrendLine_MTF
if BBSignal_ == -1
    TrendLine_MTF := high_ + atr_
    if TrendLine_MTF > TrendLine_MTF[1]
        TrendLine_MTF := TrendLine_MTF[1]
        TrendLine_MTF
if BBSignal_ == 0
    TrendLine_MTF := TrendLine_MTF[1]
    TrendLine_MTF

iTrend_ := iTrend_[1]
if TrendLine_MTF > TrendLine_MTF[1]
    iTrend_ := 1
    iTrend_
if TrendLine_MTF < TrendLine_MTF[1]
    iTrend_ := -1
    iTrend_

// ANGLE FL———————————————————————————————————————————————————————————— 

f_angle(_src, _lookback, _atrPeriod) =>
    rad2degree = 180 / 3.14159265359
    ang = rad2degree * math.atan((_src[0] - _src[_lookback]) / ta.atr(_atrPeriod))
    ang

_angle_fl = f_angle(TrendLine, i_lookback, i_atrPeriod)


// BUY/SELL AND NO FILTER HIGHER TIME FRAME  ————————————————————————————————————————————————————————————

buy_0 = iTrend[1] < 0 and iTrend > 0 and Buy_0 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0
sell_0 = iTrend[1] > 0 and iTrend < 0 and Sell_0 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0

// BUY/SELL AND FILTER HIGHER TIME FRAME  ————————————————————————————————————————————————————————————

buy_0_A = iTrend[1] < 0 and iTrend > 0 and Buy_0 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == 1 ? 1 : 0
sell_0_A = iTrend[1] > 0 and iTrend < 0 and Sell_0 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == -1 ? 1 : 0


//ADD AND NO FILTER HIGHER TIME FRAME ————————————————————————————————————————————————————————————

add_buy_1 = _angle_fl[2] > 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend > 0 and Add_Buy_0 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0

add_sell_1 = _angle_fl[2] < 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend < 0 and Add_Sell_0 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0

add_buy_2 = _angle_fl[5] > 0 and _angle_fl[4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend > 0 and Add_Buy_1 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0

add_sell_2 = _angle_fl[5] < 0 and _angle_fl[4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend < 0 and Add_Sell_1 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0

add_buy_3 = _angle_fl[8] > 0 and _angle_fl[7] == 0 and _angle_fl[6] == 0 and _angle_fl[5] == 0 and _angle_fl[4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend > 0 and Add_Buy_2 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0

add_sell_3 = _angle_fl[8] < 0 and _angle_fl[7] == 0 and _angle_fl[6] == 0 and _angle_fl[5] == 0 and _angle_fl[4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend < 0 and Add_Sell_2 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0

//ADD AND FILTER HIGHER TIME FRAME ————————————————————————————————————————————————————————————

add_buy_1_A = _angle_fl[2] > 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend > 0 and Add_Buy_0 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == 1 ? 1 : 0

add_sell_1_A = _angle_fl[2] < 0 and _angle_fl[1] == 0 and _angle_fl == 0 and iTrend < 0 and Add_Sell_0 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == -1 ? 1 : 0

add_buy_2_A = _angle_fl[5] > 0 and _angle_fl[4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == 1 and Add_Buy_1 ? 1 : 0

add_sell_2_A = _angle_fl[5] < 0 and _angle_fl[4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == -1 and Add_Sell_1 ? 1 : 0

add_buy_3_A = _angle_fl[8] > 0 and _angle_fl[7] == 0 and _angle_fl[6] == 0 and _angle_fl[5] == 0 and _angle_fl[4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == 1 and Add_Buy_2 ? 1 : 0

add_sell_3_A = _angle_fl[8] < 0 and _angle_fl[7] == 0 and _angle_fl[6] == 0 and _angle_fl[5] == 0 and _angle_fl[4] == 0 and _angle_fl[3] == 0 and _angle_fl[2] == 0 and _angle_fl[1] == 0 and _angle_fl == 0 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == -1 and Add_Sell_2 ? 1 : 0


//REDUCE AND NO FILTER HIGHER TIME FRAME ————————————————————————————————————————————————————————————

Redu_buy_1 = _angle_fl[1] < Max_level_1 and _angle_fl > Max_level_1 and Red_Buy_0 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0
Redu_buy_2 = _angle_fl[1] < Max_level_2 and _angle_fl > Max_level_2 and Red_Buy_1 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0
Redu_buy_3 = _angle_fl[2] < Max_level_2 and _angle_fl[1] > Max_level_2 and _angle_fl > Max_level_2 and Red_Buy_2 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0
Redu_buy_4 = _angle_fl[3] < Max_level_2 and _angle_fl[2] > Max_level_2 and _angle_fl[1] > Max_level_2 and _angle_fl > Max_level_2 and Red_Buy_3 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0
Redu_buy_5 = _angle_fl[4] < Max_level_2 and _angle_fl[3] > Max_level_2 and _angle_fl[2] > Max_level_2 and _angle_fl[1] > Max_level_2 and _angle_fl > Max_level_2 and Red_Buy_4 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0

Redu_sell_1 = _angle_fl[1] > Min_level_1 and _angle_fl < Min_level_1 and Red_Sell_0 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0
Redu_sell_2 = _angle_fl[1] > Min_level_2 and _angle_fl < Min_level_2 and Red_Sell_1 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0
Redu_sell_3 = _angle_fl[2] > Min_level_2 and _angle_fl[1] < Min_level_2 and _angle_fl < Min_level_2 and Red_Sell_2 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0
Redu_sell_4 = _angle_fl[3] > Min_level_2 and _angle_fl[2] < Min_level_2 and _angle_fl[1] < Min_level_2 and _angle_fl < Min_level_2 and Red_Sell_3 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0
Redu_sell_5 = _angle_fl[4] > Min_level_2 and _angle_fl[3] < Min_level_2 and _angle_fl[2] < Min_level_2 and _angle_fl[1] < Min_level_2 and _angle_fl < Min_level_2 and Red_Sell_4 and MODE == 'NO FILTER HIGHER TIME FRAME' ? 1 : 0

//REDUCE AND FILTER HIGHER TIME FRAME ————————————————————————————————————————————————————————————

Redu_buy_1_A = _angle_fl[1] < Max_level_1 and _angle_fl > Max_level_1 and Red_Buy_0 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == 1 ? 1 : 0
Redu_buy_2_A = _angle_fl[1] < Max_level_2 and _angle_fl > Max_level_2 and Red_Buy_1 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == 1 ? 1 : 0
Redu_buy_3_A = _angle_fl[2] < Max_level_2 and _angle_fl[1] > Max_level_2 and _angle_fl > Max_level_2 and Red_Buy_2 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == 1 ? 1 : 0
Redu_buy_4_A = _angle_fl[3] < Max_level_2 and _angle_fl[2] > Max_level_2 and _angle_fl[1] > Max_level_2 and _angle_fl > Max_level_2 and Red_Buy_3 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == 1 ? 1 : 0
Redu_buy_5_A = _angle_fl[4] < Max_level_2 and _angle_fl[3] > Max_level_2 and _angle_fl[2] > Max_level_2 and _angle_fl[1] > Max_level_2 and _angle_fl > Max_level_2 and Red_Buy_4 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == 1 ? 1 : 0

Redu_sell_1_A = _angle_fl[1] > Min_level_1 and _angle_fl < Min_level_1 and Red_Sell_0 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == -1 ? 1 : 0
Redu_sell_2_A = _angle_fl[1] > Min_level_2 and _angle_fl < Min_level_2 and Red_Sell_1 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == -1 ? 1 : 0
Redu_sell_3_A = _angle_fl[2] > Min_level_2 and _angle_fl[1] < Min_level_2 and _angle_fl < Min_level_2 and Red_Sell_2 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == -1 ? 1 : 0
Redu_sell_4_A = _angle_fl[3] > Min_level_2 and _angle_fl[2] < Min_level_2 and _angle_fl[1] < Min_level_2 and _angle_fl < Min_level_2 and Red_Sell_3 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == -1 ? 1 : 0
Redu_sell_5_A = _angle_fl[4] > Min_level_2 and _angle_fl[3] < Min_level_2 and _angle_fl[2] < Min_level_2 and _angle_fl[1] < Min_level_2 and _angle_fl < Min_level_2 and Red_Sell_4 and MODE == 'FILTER HIGHER TIME FRAME' and iTrend_ == -1 ? 1 : 0

// PLOT ————————————————————————————————————————————————————————————

_color_fl = iTrend > 0 ? color.blue : color.red

plot(_angle_fl, 'Angle Follow Line', _color_fl, 3, plot.style_line)
plot(_angle_fl, 'Angle Follow Line Histogram', _color_fl, 3, plot.style_histogram)

hline(Max_level_1, title='Max Angle Level 1', color=color.blue, linestyle=hline.style_dotted, linewidth=1)
hline(Max_level_2, title='Max Angle Level 2', color=color.blue, linestyle=hline.style_dotted, linewidth=1)
hline(Min_level_1, title='Min Angle Level 1', color=color.red, linestyle=hline.style_dotted, linewidth=1)
hline(Min_level_2, title='Min Angle Level 2', color=color.red, linestyle=hline.style_dotted, linewidth=1)


plotshape(h_lables == false and (sell_0 or sell_0_A) ? 5 : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
plotshape(h_lables == false and (buy_0 or buy_0_A) ? -5 : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.blue, 0), textcolor=color.new(color.white, 0))

plotshape(h_lables == false and (add_sell_1 or add_sell_1_A or add_sell_2 or add_sell_3 or add_sell_2_A or add_sell_3_A) ? _angle_fl + 5 : na, title='Add Sell 1', text='Add', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
plotshape(h_lables == false and (add_buy_1 or add_buy_1_A or add_buy_2 or add_buy_3 or add_buy_2_A or add_buy_3_A) ? _angle_fl - 5 : na, title='Add Buy 1', text='Add', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.blue, 0), textcolor=color.new(color.white, 0))

plotshape(h_lables == false and (Redu_buy_1 or Redu_buy_1_A) ? _angle_fl + 5 : na, title='Reduce Buy 1', text='Red', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.blue, 0), textcolor=color.new(color.white, 0))
plotshape(h_lables == false and (Redu_buy_2 or Redu_buy_2_A) ? _angle_fl + 5 : na, title='Reduce Buy 2', text='Red', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.blue, 0), textcolor=color.new(color.white, 0))
plotshape(h_lables == false and (Redu_buy_3 or Redu_buy_3_A) ? _angle_fl + 5 : na, title='Reduce Buy 3', text='Red', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.blue, 0), textcolor=color.new(color.white, 0))
plotshape(h_lables == false and (Redu_buy_4 or Redu_buy_4_A) ? _angle_fl + 5 : na, title='Reduce Buy 4', text='Red', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.blue, 0), textcolor=color.new(color.white, 0))
plotshape(h_lables == false and (Redu_buy_5 or Redu_buy_5_A) ? _angle_fl + 5 : na, title='Reduce Buy 5', text='Red', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.blue, 0), textcolor=color.new(color.white, 0))

plotshape(h_lables == false and (Redu_sell_1 or Redu_sell_1_A) ? _angle_fl - 5 : na, title='Reduce Sell 1', text='Red', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
plotshape(h_lables == false and (Redu_sell_2 or Redu_sell_2_A) ? _angle_fl - 5 : na, title='Reduce Sell 2', text='Red', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
plotshape(h_lables == false and (Redu_sell_3 or Redu_sell_3_A) ? _angle_fl - 5 : na, title='Reduce Sell 3', text='Red', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
plotshape(h_lables == false and (Redu_sell_4 or Redu_sell_4_A) ? _angle_fl - 5 : na, title='Reduce Sell 4', text='Red', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))
plotshape(h_lables == false and (Redu_sell_5 or Redu_sell_5_A) ? _angle_fl - 5 : na, title='Reduce Sell 5', text='Red', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0))

bgcolor(iTrend_ > 0 and AIB ? color.blue : iTrend_ < 0 and AIB ? color.red : na, transp=70)

//barcolor(iTrend > 0 ? color.blue : color.red)

// ALERTS————————————————————————————————————————————————————————————

alertcondition(sell_0 or sell_0_A, title='Sell', message='Sell')
alertcondition(buy_0 or buy_0_A, title='Buy', message='Buy')

alertcondition(add_sell_1 or add_sell_1_A or add_sell_2 or add_sell_3 or add_sell_2_A or add_sell_3_A, title='Add Sell', message='Add Sell')
alertcondition(add_buy_1 or add_buy_1_A or add_buy_2 or add_buy_3 or add_buy_2_A or add_buy_3_A, title='Add Buy', message='Add Buy')

alertcondition(Redu_buy_1 or Redu_buy_1_A or Redu_buy_2 or Redu_buy_2_A or Redu_buy_3 or Redu_buy_3_A or Redu_buy_4 or Redu_buy_4_A or Redu_buy_5 or Redu_buy_5_A, title='Reduce Buy', message='Reduce Buy')
alertcondition(Redu_sell_1 or Redu_sell_1_A or Redu_sell_2 or Redu_sell_2_A or Redu_sell_3 or Redu_sell_3_A or Redu_sell_4 or Redu_sell_4_A or Redu_sell_5 or Redu_sell_5_A, title='Reduce Sell', message='Reduce Sell')

//alertcondition(sell_0 or sell_0_A or buy_0 or buy_0_A or add_sell_1 or add_sell_1_A or add_sell_2 or add_sell_3 or add_sell_2_A or add_sell_3_A or add_buy_1 or add_buy_1_A or add_buy_2 or add_buy_3 or add_buy_2_A or add_buy_3_A or Redu_buy_1 or Redu_buy_1_A or Redu_buy_2 or Redu_buy_2_A or Redu_buy_3 or Redu_buy_3_A or Redu_buy_4 or Redu_buy_4_A or Redu_buy_5 or Redu_buy_5_A or Redu_sell_1 or Redu_sell_1_A or Redu_sell_2 or Redu_sell_2_A or Redu_sell_3 or Redu_sell_3_A or Redu_sell_4 or Redu_sell_4_A or Redu_sell_5 or Redu_sell_5_A, title='Buy/Sell/Add/Reduce', message='Buy/Sell/Add/Reduce')

if buy_0
    strategy.entry("Enter Long", strategy.long)
else if sell_0
    strategy.entry("Enter Short", strategy.short)
    
//if add_buy_1 or add_buy_1_A or add_buy_2 or add_buy_3 or add_buy_2_A or add_buy_3_A
//    strategy.entry("Add Long", strategy.long)
//else if add_sell_1 or add_sell_1_A or add_sell_2 or add_sell_3 or add_sell_2_A or add_sell_3_A
//    strategy.entry("Add Short", strategy.short)
    
len = input(14, title="ADX周期")
th = input(20, "th水平参考")

TrueRange = math.max(math.max(high - low, math.abs(high - nz(close[1]))), math.abs(low - nz(close[1])))
DirectionalMovementPlus = high - nz(high[1]) > nz(low[1]) - low ? math.max(high - nz(high[1]), 0) : 0
DirectionalMovementMinus = nz(low[1]) - low > high - nz(high[1]) ? math.max(nz(low[1]) - low, 0) : 0

SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - nz(SmoothedTrueRange[1]) / len + TrueRange

SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - nz(SmoothedDirectionalMovementPlus[1]) / len + DirectionalMovementPlus

SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - nz(SmoothedDirectionalMovementMinus[1]) / len + DirectionalMovementMinus

DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = math.abs(DIPlus - DIMinus) / (DIPlus + DIMinus) * 100
ADX = ta.sma(DX, len)

plot(DIPlus, color=color.new(color.green, 0), title='DI+')
plot(DIMinus, color=color.new(color.red, 0), title='DI-')
plot(ADX, color=color.new(color.navy, 0), title='ADX')
hline(th, color=color.black)


template: strategy.tpl:40:21: executing "strategy.tpl" at <.api.GetStrategyListByName>: wrong number of args for GetStrategyListByName: want 7 got 6