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

BRAHMASTRA

Author: 雨幕(youquant), Date: 2022-05-25 10:48:22
Tags: WMAPivot

过程

  • 扫描趋势中的数据透视。这意味着,以升序或降序排列的一系列枢轴高点或枢轴低点。
  • 在趋势序列中的每个枢轴之间绘制趋势线。例如,如果有5个pivot high uptrend pivot,请在每个点之间绘制mXn线。
  • 选择更准确或更强的趋势线。准确度是通过接触线的蜡烛/灯芯的数量和落在线外的蜡烛的数量来衡量的。更强的趋势线将接触更多蜡烛和枢轴,溢出更少。
  • 除去每个方向最精确的线以外的所有线。

在任何时候,您都可以在此脚本中看到多达4条趋势线。

  • 趋势线连接处于上升状态的枢轴高点
  • 趋势线连接处于上升状态的枢轴低点
  • 下降趋势条件下的趋势线连接枢轴高点
  • 趋势线连接下行条件下的枢轴低点

旧的线路将一直保留,直到新的线路通过相同类型的线路。因此,您仍然可以看到很久以前创建的下降趋势工具的上升和下降趋势线!!此外,只有当旧趋势线更强时,新趋势线才会取代旧趋势线(连接到更多枢轴,溢出更少)

回测测试

img

img

img


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

//@version=4
study("BRAHMASTRA", precision=2, overlay=true)
// compilation: capissimo

// This script utilizes two modules, Trendlines Module (by Joris Duyck) and HMA-Kahlman Trend Module. 
// Trendlines module produces crossovers predictive of the next local trend.

//*** HMA-Kahlman Trend Module 
price  = input(hl2,  "价格数据(默认hl2)")
hkmod  = input(true, "===HMA-Kahlman 趋势模型===")
length = input(22,   "回看窗口周期", minval=2)
k      = input(true, "使用Kahlman")
gain   = input(.7,   "赢得", minval=.0001, step=.01)
labels = input(true, "显示标签?")
o      = input(true, "使用偏移")

hma(x, p) => wma((2 * wma(x, p / 2)) - wma(x, p), round(sqrt(p)))
    
hma3() => p = length/2, wma(wma(close, p/3)*3 - wma(close, p/2) - wma(close, p), p)

kahlman(x, g) =>
    kf = 0.0
    dk = x - nz(kf[1], x)
    smooth = nz(kf[1],x)+dk*sqrt(g*2)
    velo = 0.0
    velo := nz(velo[1],0) + (g*dk)
    kf := smooth+velo

a = k ? kahlman(hma(price, length), gain) : hma(price, length)
b = k ? kahlman(hma3(), gain) : hma3()
c = b > a ? color.lime : color.red
crossdn = a > b and a[1] < b[1]
crossup = b > a and b[1] < a[1]
ofs = o ? -1 : 0

fill(plot(a,color=c,linewidth=1,transp=75), plot(b,color=c,linewidth=1,transp=75), color=c, transp=55)
plotshape(labels and crossdn ? a : na, location=location.abovebar, style=shape.labeldown, color=color.red, size=size.tiny, text="S", textcolor=color.white, transp=0, offset=ofs)
plotshape(labels and crossup ? a : na, location=location.belowbar, style=shape.labelup, color=color.green, size=size.tiny, text="B", textcolor=color.white, transp=0, offset=ofs)

//*** Trendlines Module, see https://www.tradingview.com/script/mpeEgn5J-Trendlines-JD/
tlmod = input(true, "===趋势线模型===")
l1    = input(2,    "枢轴点回看窗口周期", minval=1)

trendline(input_function, delay, only_up) => // Calculate line coordinates (Ax,Ay) - (Bx,By)
    var int Ax = 0, var int Bx = 0, var float By = 0.0, var float slope = 0.0
    Ay = fixnan(input_function)
    if change(Ay)!=0
        Ax := time[delay], By:= Ay[1], Bx := Ax[1]
        slope := ((Ay-By)/(Ax-Bx))
    else
        Ax := Ax[1], Bx := Bx[1], By := By[1]

    var line trendline=na, var int Axbis=0, var float Aybis=0.0, var bool xtend=true
    extension_time = 0
    Axbis := Ax + extension_time
    Aybis := (Ay + extension_time*slope)
    if tlmod and change(Ay)!=0
        line_color = slope*time<0?(only_up?na:color.red):(only_up?color.lime:na)
        if not na(line_color)
            trendline = line.new(Bx,By,Axbis, Aybis, xloc.bar_time, extend=xtend?extend.right:extend.none, color=line_color, style=line.style_dotted, width=1)
            line.delete(trendline[1])
    slope
	
pivot(len) =>	
    high_point = pivothigh(high, len,len/2)
    low_point  = pivotlow(low, len,len/2)
    slope_high = trendline(high_point, len/2,false)
    slope_low  = trendline(low_point, len/2,true)
    [high_point, low_point, slope_high, slope_low]

[high_point1, low_point1, slope_high1, slope_low1] = pivot(l1) 

color_high1 = slope_high1 * time<0 ? color.red : na
color_low1  = slope_low1  * time>0 ? color.lime : na
plot(tlmod ? high_point1 : na, color=color_high1, offset=-l1/2, linewidth=2)
plot(tlmod ? low_point1  : na, color=color_low1, offset=-l1/2, linewidth=2)



if crossup
    strategy.entry("Enter Long", strategy.long)
else if crossdn
    strategy.entry("Enter Short", strategy.short)
template: strategy.tpl:40:21: executing "strategy.tpl" at <.api.GetStrategyListByName>: wrong number of args for GetStrategyListByName: want 7 got 6