Как вычислить значение индикатора на большем таймфрейме, когда на меньшем таймфрейме

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

Однако мне не ясно, использую ли я ту же концепцию при расчете показателя. Есть некоторые упоминания об этом в обсуждении параметра просмотра в будущее по адресу 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 ответ

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

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

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

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

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

Спасибо!

Другие вопросы по тегам