简体   繁体   English

在 Pine 中使用 arrays 制定策略

[英]Make strategy with arrays in Pine

I'm trying to make a strategy of an indicator, but I get the error: Line 73: Cannot call 'operator >' with argument 'expr0'='call 'alertcondition' (void)'.我正在尝试制定指标策略,但出现错误:第 73 行:无法使用参数 'expr0'='call 'alertcondition' (void)' 调用 'operator >'。 An argument of 'void' type was used but a 'const float' is expected.使用了“void”类型的参数,但需要“const float”。 How can I change the code to get a correct boolean if statement for the trade entry?我如何更改代码以获得正确的 boolean if 交易条目声明? I'm very new to pine, hopefully someone can help me.我对松树很陌生,希望有人能帮助我。

// This work is licensed under a Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) https://creativecommons.org/licenses/by-nc-sa/4.0/
// © LuxAlgo
//@version=5
// Umgeschrieben von JSt

strategy("Watson Strategie Nadaraya-Watson Envelope [JSt]",overlay=true,max_bars_back=1000,max_lines_count=500,max_labels_count=500)
length = input.float(500,'Window Size',maxval=500,minval=0)
h      = input.float(8.,'Bandwidth')
mult   = input.float(3.) 
src    = input.source(close,'Source')

up_col = input.color(#39ff14,'Colors',inline='col')
dn_col = input.color(#ff1100,'',inline='col')
//----
n = bar_index
var k = 2
var upper = array.new_line(0) 
var lower = array.new_line(0) 

lset(l,x1,y1,x2,y2,col)=>
    line.set_xy1(l,x1,y1)
    line.set_xy2(l,x2,y2)
    line.set_color(l,col)
    line.set_width(l,2)

if barstate.isfirst
    for i = 0 to length/k-1
        array.push(upper,line.new(na,na,na,na))
        array.push(lower,line.new(na,na,na,na))
//----
line up = na
line dn = na
//----
cross_up = 0.
cross_dn = 0.
if barstate.islast
    y = array.new_float(0)
    
    sum_e = 0.
    for i = 0 to length-1
        sum = 0.
        sumw = 0.
        
        for j = 0 to length-1
            w = math.exp(-(math.pow(i-j,2)/(h*h*2)))
            sum += src[j]*w
            sumw += w
        
        y2 = sum/sumw
        sum_e += math.abs(src[i] - y2)
        array.push(y,y2)

    mae = sum_e/length*mult
    
    for i = 1 to length-1
        y2 = array.get(y,i)
        y1 = array.get(y,i-1)
        
        up := array.get(upper,i/k)
        dn := array.get(lower,i/k)
        
        lset(up,n-i+1,y1 + mae,n-i,y2 + mae,up_col)
        lset(dn,n-i+1,y1 - mae,n-i,y2 - mae,dn_col)
        
        if src[i] > y1 + mae and src[i+1] < y1 + mae
            label.new(n-i,src[i],'▼',color=#00000000,style=label.style_label_down,textcolor=dn_col,textalign=text.align_center)
        if src[i] < y1 - mae and src[i+1] > y1 - mae
            label.new(n-i,src[i],'▲',color=#00000000,style=label.style_label_up,textcolor=up_col,textalign=text.align_center)
    
    cross_up := array.get(y,0) + mae
    cross_dn := array.get(y,0) - mae

   // TestUP = ta.crossover(src,cross_up) > 0

    

alertcondition(ta.crossover(src,cross_up),'Down','Down')
alertcondition(ta.crossunder(src,cross_dn),'Up','Up')

//---- Alarm für Webhook -----
plot(cross_up, color=#000000, transp=100)   //Für den Alert, jedoch Darstellungsfehler → Transparent
plot(cross_dn, color=#000000, transp=100)

plotchar(cross_up, title="cross_up%", char="", location=location.top, color = color.green)   // Damit der Wert in der Statusleiste dargestellt wird 
plotchar(cross_dn, title="cross_dn%", char="", location=location.top, color = color.red)


//-------------------

// Start Date
// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
     group="Backtest Time Period")
backtestStartDate = input.time(timestamp("1 Jan 2021"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

// STEP 2. See if current bar happens on, or later than, the start date
inTradeWindow = not useDateFilter or time >= backtestStartDate


// ---------------



// Enter a long position when the entry rule is triggered 
if inTradeWindow and ta.crossover(src,cross_up) > 0
    strategy.entry('Long', strategy.long)

// Exit the Long position when the exit rule is triggered 
if close > strategy.position_avg_price + 50
    strategy.close("Long", comment = "TP")
else if close < strategy.position_avg_price - 50
    strategy.close("Long", comment = "SL")




I tried the ta.crossover(src,cross_up) to compare it to zero, but it doesn't work.我尝试了ta.crossover(src,cross_up)将其与零进行比较,但它不起作用。

ta.crossover() returns a bool value. ta.crossover()返回一个bool值。

ta.crossover(source1, source2) → series bool ta.crossover(source1, source2) → 系列布尔

So, comparing its return value with some number does not make any sense and the compiler will complain: ta.crossover(src,cross_up) > 0 .因此,将其返回值与某个数字进行比较没有任何意义,编译器会抱怨: ta.crossover(src,cross_up) > 0

You should just do:你应该这样做:

if inTradeWindow and ta.crossover(src,cross_up)
    strategy.entry('Long', strategy.long)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM