Как вычислить значение индикатора на большем таймфрейме, когда на меньшем таймфрейме
Если мне нужно получить доступ к ежедневному значению закрытия предыдущего дня в текущем внутридневном периоде, тогда я просто использую функцию безопасности с 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').
Единственное, что следует упомянуть о "безопасности", это то, что он не подходит для запроса данных с таймфреймов, которые ниже текущего таймфрейма графика.
Спасибо!