необъявленная переменная в стратегии тестирования

#pine-script

#сценарий pine

Вопрос:

введите описание изображения здесьЯ пытаюсь добавить этот индикатор в свой тест, но я столкнулся с ошибкой, я знаком с python, но в pinescript я не понимаю, почему переменная e1 используется как e1 и e1 1 в одной строке, и, согласно Интернету, у меня нет возможности использовать консоль длядаже посмотрите, какое значение имеет e1

 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © quechon
//@version=4
strategy('Testing indicators', process_orders_on_close=true)

//time to backtest from
start = timestamp(2017, 01, 01, 0, 0, 0)
end = timestamp(2020, 11, 03, 0, 0, 0)

var float e1 = 0

//fxSniper
CCI_Period = 14
T3_Period = 3 //default is 5
b = 0.618
xPrice = close
b2 = b*b
b3 = b2*b
c1 = -b3
c2 = (3*(b2   b3))
c3 = -3*(2*b2   b   b3)
c4 = (1   3*b   b3   3*b2)
nn = iff(T3_Period < 1, 1, T3_Period)
nr = 1   0.5*(nn - 1)
w1 = 2 / (nr   1)
w2 = 1 - w1    
xcci = cci(xPrice, CCI_Period)
e1 = w1*xcci   w2*nz(e1[1])
e2 = w1*e1   w2*nz(e2[1])
e3 = w1*e2   w2*nz(e3[1])
e4 = w1*e3   w2*nz(e4[1])
e5 = w1*e4   w2*nz(e5[1])
e6 = w1*e5   w2*nz(e6[1])
xccir = c1*e6   c2*e5   c3*e4   c4*e3  

//buy long when price crosses above dpo
long = xccir > 0
    
// short when price is below dpo
short = xccir < 0

if time >= start and time <= end
    
    
    //strategy to buy according to dpo
    if long
        strategy.close('Short')
        strategy.entry('Long', strategy.long, 10000)
        
    //strategy to go short
    if short
        strategy.close('Long')
        strategy.entry('Short', strategy.short, 10000)
  

я получаю эту ошибку, не могу понять, как ее исправить

 Add to chart operation failed. reason: line 27: Undeclared identifier 'e1'
    
  

Я провел некоторый поиск, но не могу понять это

оригинальный сценарий

 /////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 25/07/2014
// This simple indicator gives you a lot of useful information - when to enter, when to exit
// and how to reduce risks by entering a trade on a double confirmed signal.
// You can use in the xPrice any series: Open, High, Low, Close, HL2, HLC3, OHLC4 and ect...
////////////////////////////////////////////////////////////
study(title="FX Sniper:  T3-CCI", shorttitle="T3-CCI")
CCI_Period = input(14, minval=1)
T3_Period = input(5, minval=1)
b = input(0.618)
hline(0, color=purple, linestyle=line)
xPrice = close
plot(xPrice)
b2 = b*b
b3 = b2*b
c1 = -b3
c2 = (3*(b2   b3))
c3 = -3*(2*b2   b   b3)
c4 = (1   3*b   b3   3*b2)
nn = iff(T3_Period < 1, 1, T3_Period)
nr = 1   0.5*(nn - 1)
w1 = 2 / (nr   1)
w2 = 1 - w1    
xcci = cci(xPrice, CCI_Period)
e1 = w1*xcci   w2*nz(e1[1])
e2 = w1*e1   w2*nz(e2[1])
e3 = w1*e2   w2*nz(e3[1])
e4 = w1*e3   w2*nz(e4[1])
e5 = w1*e4   w2*nz(e5[1])
e6 = w1*e5   w2*nz(e6[1])
xccir = c1*e6   c2*e5   c3*e4   c4*e3  
cciHcolor = iff(xccir >= 0 , green,
        iff(xccir < 0, red, black))
plot(xccir, color=blue, title="T3-CCI")
plot(xccir, color=cciHcolor, title="CCIH", style = histogram)
  

Ответ №1:

Смотрите Выражения, объявления и инструкции

Вы объявляете изменяемую переменную e1 , поэтому вы должны использовать := для присвоения ей значения. Вы также должны объявлять переменные e2 e6 как изменяемые переменные, потому что вы ссылаетесь на их предыдущее значение с помощью e2[1] .
Поскольку вы явно не объявили e2 , она объявляется при первом использовании.
В то же время вы пытаетесь ссылаться на его историю, которая на данный момент еще не существует.

Это будет работать.
Я также изменил некоторый код, чтобы использовать существующие функции, и преобразовал некоторые переменные во входные, чтобы вы могли изменять их в настройках вашего индикатора, не меняя исходный код.

 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © quechon
//@version=4
strategy('Testing indicators', process_orders_on_close=true)

//time to backtest from
start = timestamp(2017, 01, 01, 0, 0, 0)
end = timestamp(2020, 11, 03, 0, 0, 0)

var float e1 = 0
var float e2 = 0
var float e3 = 0
var float e4 = 0
var float e5 = 0
var float e6 = 0

//fxSniper
var int CCI_Period = input(14, "CCI_Period", minval=0)
var int T3_Period = input(3, "T3_Period", minval=0) //default is 5
b = 0.618
xPrice = input(close, "xPrice", type=input.source)
b2 = pow(b,2)
b3 = pow(b,3)
c1 = -b3
c2 = (3*(b2   b3))
c3 = -3*(2*b2   b   b3)
c4 = (1   3*b   b3   3*b2)
nn = T3_Period < 1 ? 1 : T3_Period
nr = 1   0.5*(nn - 1)
w1 = 2 / (nr   1)
w2 = 1 - w1    
xcci = cci(xPrice, CCI_Period)
e1 := w1*xcci   w2*nz(e1[1])
e2 := w1*e1   w2*nz(e2[1])
e3 := w1*e2   w2*nz(e3[1])
e4 := w1*e3   w2*nz(e4[1])
e5 := w1*e4   w2*nz(e5[1])
e6 := w1*e5   w2*nz(e6[1])
xccir = c1*e6   c2*e5   c3*e4   c4*e3  

//buy long when price crosses above dpo
long = crossover(xccir, 0) 
    
// short when price is below dpo
short = crossunder(xccir, 0)

if time >= start and time <= end
    //strategy to buy according to dpo
    if long
        strategy.close('Short')
        strategy.entry('Long', strategy.long, 10000)
        
    //strategy to go short
    if short
        strategy.close('Long')
        strategy.entry('Short', strategy.short, 10000)
  

Комментарии:

1. привет, большое спасибо за помощь, но по какой-то причине, если я построю переменную xccir, она будет отключена на день, исходный сценарий строит строку до последней свечи, этот сценарий строит одну до дня раньше, есть идеи, почему и еще раз спасибо за помощь

2. Исходный сценарий даже не компилируется. Из-за этого мне интересно, как вы можете видеть, как он строится вплоть до последней свечи? Не могли бы вы предоставить сценарий скриншот, который показывает это, пожалуйста? Возможно, это прояснит ситуацию.

3. вставленный исходный сценарий — последний фрагмент кода, спасибо

4. добавлен скриншот, и после игры со сценарием обнаружил, что проблема заключается в функции стратегии, как только я заменяю ее на сценарий исследования, который работает как оригинальный, поэтому нужно выяснить, что там происходит