WedX - журнал о программировании и компьютерных науках

Неожиданное изменение тренда в зависимости от таймфрейма, который мы выбираем для мультитаймфреймового тренда

Я создаю панель инструментов и хочу отображать на ней тренд для разных периодов времени, таких как 1,5,15,60,240 мин.

В следующем коде мы просто возьмем sma(close,20) для простоты, ошибка все еще присутствует.

Итак, я сравниваю sma(close,20) с тем же выражением, отстающим на 5 баров, чтобы получить тренд. Мне нужно сделать это 5 раз с безопасностью, чтобы получить тренд 5 таймфреймов.

Но когда вы копируете мой код в TradingView и переключаетесь между таймфреймами (1 мин 1 ч 4 ч ...), происходит некоторое переключение тренда, и этого не ожидается. Потому что я хочу видеть тот же результат на любом таймфрейме. глядя на график.

Если между ними есть какое-то переключение, нет смысла строить этот тип дашборда, так как он ненадежен.

Так что я подумал об этом. И, возможно, мы сможем решить эту проблему, если перейдем к самому низкому таймфрейму (1 мин) и построим пользовательскую свечу 1, 5, 15, 60, 240 мин и проведем все расчеты с закрытием этой пользовательской свечи. Но это причудливая штука, и она все равно не решает основной проблемы, потому что основная цель - увидеть такой результат на всем графике, а не только на графике 1min.

Я что-то пропустил в pinescript? Как бы вы сделали то, чего я пытаюсь достичь? Спасибо за вашу помощь!

Вот код:

//@version=4
strategy("Not working Dashboard", overlay=true,initial_capital= 100, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.04)

//********************** TITLE
i_offsetLabel = 15
offset = i_offsetLabel * ( time - time[1])
splitter = "---------------------------------------------------------------------"
nl = "\n"
title = "Not working Dashboard" 

string dynamicText = title + nl
var label id = na
label.delete(id)        // Delete Last label
id := label.new(x=time+offset,y = high, xloc=xloc.bar_time, text = dynamicText)

// Lets make a cppm dashboard with same components
yReadable0=input(true,title="-------------------CHOOSE DISPLAY-------------------")

i_showBooleanCondition        = input(true, "Show BooleanCondition")

ColorCallsTitle = splitter + nl+ "Color Changing calls" +nl +nl

ssrc1=input(1,title="Source 1",minval=1, step=1)
ssrc2=input(5,title="Source 2",minval=1, step=1)
ssrc3=input(15,title="Source 3",minval=1, step=1)
ssrc4=input(60,title="Source 4",minval=1, step=1)
ssrc5=input(240,title="Source 5",minval=1, step=1)

//------------
up = "????"
dn = "????"
//Luda added flat emoji
flt = "⛔️"
string txt = na

pssrc1 = tostring(ssrc1)
pssrc2 = tostring(ssrc2)
pssrc3 = tostring(ssrc3)
pssrc4 = tostring(ssrc4)
pssrc5 = tostring(ssrc5)

X1src = close

XCustomResolution1= "1"
XCustomResolution2= "5"
XCustomResolution3= "15"
XCustomResolution4= "60"
XCustomResolution5= "240"

r=sma(close,20)
r2=r[5]
f_security(_sym, _res, _src, _rep) => security(_sym, _res, _src[not _rep and barstate.isrealtime ? 1 : 0])[_rep or barstate.isrealtime ? 0 : 1]
X1 = f_security(syminfo.tickerid,XCustomResolution1,r,false)
X2 = f_security(syminfo.tickerid,XCustomResolution2,r,false)
X3 = f_security(syminfo.tickerid,XCustomResolution3,r,false)
X4 = f_security(syminfo.tickerid,XCustomResolution4,r,false)
X5 = f_security(syminfo.tickerid,XCustomResolution5,r,false)

X11 = f_security(syminfo.tickerid,XCustomResolution1,r2,false)
X22 = f_security(syminfo.tickerid,XCustomResolution2,r2,false)
X33 = f_security(syminfo.tickerid,XCustomResolution3,r2,false)
X44 = f_security(syminfo.tickerid,XCustomResolution4,r2,false)
X55 = f_security(syminfo.tickerid,XCustomResolution5,r2,false)

// ploting
plot(X1,title="sma1",color=color.green)
plot(X2,title="sma2",color=color.green)
plot(X3,title="sma3",color=color.green)
plot(X4,title="sma4",color=color.green)
plot(X5,title="sma5",color=color.green)

plot(X11,title="lag1",color=color.white)
plot(X22,title="lag2",color=color.white)
plot(X33,title="lag3",color=color.white)
plot(X44,title="lag4",color=color.white)
plot(X55,title="lag5",color=color.white)

//trend
Xsym1 =X1 > X11 ? up : X1 < X11 ? dn : flt
Xsym2 =X2 > X22 ? up : X2 < X22 ? dn : flt
Xsym3 =X3 > X33 ? up : X3 < X33 ? dn : flt
Xsym4 =X4 > X44 ? up : X4 < X44 ? dn : flt
Xsym5 =X5 > X55 ? up : X5 < X55 ? dn : flt

txt :=  " | " + pssrc1 +" : " + Xsym1 + " | " + pssrc2 +" : " + Xsym2 + " | " + pssrc3 +" : " + Xsym3 + " | " + pssrc4 +" : " + Xsym4 + " | " + pssrc5 +" : " + Xsym5 +"\n"+"\n"  
ColorChang = i_showBooleanCondition ? ColorCallsTitle + "Trend: " + nl + txt + nl : na

//dynamicText := dynamicText + stats + moms + vols + sigs
dynamicText := ColorChang
label.set_text(id, text=dynamicText)

10.05.2021

Ответы:


1

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

Дополнительную информацию и пример можно найти здесь: Можно ли использовать security() на более низких интервалах, чем текущий интервал графика

10.05.2021
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]