Как вычислить значение индикатора на большем таймфрейме, когда на меньшем таймфрейме - PullRequest
0 голосов
/ 31 декабря 2018

Если мне нужно получить доступ к ежедневному значению закрытия предыдущего дня в текущем внутридневном периоде, тогда я просто использую функцию безопасности с закрытием [1], как описано в следующем https://getsatisfaction.com/tradingview/topics/using-pine-script-to-retrieve-previous-days-close-from-within-intraday-chart.

Однако этоМне не понятно, использую ли я ту же концепцию при расчете показателя.Есть некоторые упоминания об этом при обсуждении параметра просмотра в будущее на https://www.tradingview.com/wiki/Context_Switching,The%E2%80%98security%E2%80%99_Function,, но я не совсем уверен в своем понимании ..

Могут ли люди посмотреть этот фрагмент кода

В этом примере индикатор ADX рассчитывается по дневному значению, а затем к нему применяется 30-минутный период времени и на следующий день.Если ADX больше 25 и он бычий, мы открыли длинную позицию.Если ADX меньше 25 или медвежий, мы закрываем позицию.

В качестве конкретного примера предполагается следующее: во вторник утром в конце первых 30 минут торговли мы рассмотрим ADX, построенный на конце дня закрытия в понедельник вечером.,

Чтобы достичь этого, я просто заменил ссылки на high и low в функции для вычисления ADX на high [1] и low [1].

Пожалуйста, сообщите, является ли этот код рекомендуемым способом достижения этого, или если есть какие-либо возможные ошибки.

Спасибо

//@version=3 

strategy("ADX daily long", overlay=true,initial_capital=100000, currency='USD', commission_type='strategy.commission,cash_per_order',commission_value=1, default_qty_type=strategy.cash,default_qty_value=100000) 
length = input(title="Length", type=integer, defval=14) 
src = input(title="Source", type=source, defval=close) 

// Begin ADX 
adxlen = input(14, title="ADX Smoothing") 
dilen = input(14, title="DI Length") 
adx_threshold = input(title="ADX threshold", type=integer, defval=25) 
hd_period = '1D' 

dirmovdirection(len) => 
up = change(high[1]) 
down = -change(low[1]) 
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) 
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) 
truerange = rma(tr[1], len) 
plus = fixnan(100 * rma(plusDM, len) / truerange) 
minus = fixnan(100 * rma(minusDM, len) / truerange) 
direction = (plus>minus)?1:0 

dirmov(len) => 
up = change(high[1]) 
down = -change(low[1]) 
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) 
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) 
truerange = rma(tr, len) 
plus = fixnan(100 * rma(plusDM, len) / truerange) 
minus = fixnan(100 * rma(minusDM, len) / truerange) 
[plus, minus] 

adx(dilen, adxlen) => 
[plus, minus] = dirmov(dilen) 
sum = plus + minus 
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) 

sig = security(tickerid, hd_period, adx(dilen, adxlen)) 
direction = security(tickerid, hd_period, dirmovdirection(dilen)) 
// plot(sig, color=red, title="ADX") 
// End ADX 

if sig > 25 and direction == 1 
strategy.entry("ADX daily long", strategy.long) 

if (sig< 25 or direction == 0) 
strategy.close("ADX daily long")

1 Ответ

0 голосов
/ 29 января 2019

Прежде всего.В большинстве случаев, особенно в стратегиях тестирования на истории, вы должны использовать значение по умолчанию для параметра lookahead.В противном случае ваше тестирование даст вам ложные результаты.

Во-вторых, вы правильно используете функцию безопасности, например,

sig = security(tickerid, hd_period, adx(dilen, adxlen)) 

.В таком случае функция 'adx (dilen, adxlen)' будет выполняться на другом таймфрейме (в соответствии со значением 'hd_period').

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

Спасибо!

...