Drone Arrows with Supply & Demand
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator_drone_arrows_with_supply_&_demand_for_tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «Drone Arrows with Supply & Demand» (Drone S&D) — это инструмент анализа и отображения для TradingView, написанный на Pine Script v6. Он наносит на ценовой график графические маркеры BUY и SELL, формируемые на основе расчёта SuperTrend с настраиваемой чувствительностью и параметрами ATR.
Сигналы дополнительно фильтруются по нескольким критериям: направление тренда (на основе скользящей средней), объём и импульс цены. Между сигналами действует механизм охлаждения, исключающий слишком частые переключения. Встроенный дашборд отображает направление тренда на семи таймфреймах — от M1 до Daily — с использованием EMA 50.
Индикатор позволяет отображать уровни стоп-лосса и до пяти уровней тейк-профита в виде меток и линий на графике с настраиваемым расстоянием и точностью отображения. Также доступны условия для оповещений TradingView по сигналам покупки, продажи и сильным рыночным условиям.
Продукт работает как наложение (overlay) на ценовой график и не является автоматическим советником. Все параметры настраиваются пользователем через панель настроек индикатора.
Настройки программы
| Настройка | Описание |
|---|---|
| sensitivity | Чувствительность — Чувствительность SuperTrend: множитель, умножающий ATR-множитель. |
| atr_length | Длина ATR — Длина периода ATR для расчёта SuperTrend. |
| atr_multiplier | Множитель ATR — Множитель ATR, определяющий чувствительность SuperTrend. |
| use_trend_filter | Использовать фильтр тренда — Включает фильтрацию сигналов по направлению тренда на текущем таймфрейме. |
| ma_length | Длина скользящей средней — Период скользящей средней для фильтрации по тренду. |
| use_volume_filter | Использовать фильтр объёма — Включает фильтрацию сигналов по объёму сделок. |
| volume_threshold | Порог объёма — Пороговое значение объёма относительно его средней для прохождения фильтра. |
| show_signals | Показать сигналы — Включает отображение маркеров BUY и SELL на графике. |
| levels2 | Показать уровни TP/SL — Включает отображение уровней тейк-профита и стоп-лосса на графике. |
| lvlLines | Показать линии — Включает отображение горизонтальных линий уровней TP/SL на графике. |
| linesStyle | Стиль линий — Стиль линий уровней: сплошная, пунктирная или точечная. |
| lvlDistance | Расстояние — Расстояние в барах от текущего бара до размещения меток и линий уровней. |
| lvlDecimals | Десятичные знаки — Количество знаков после запятой при отображении значений уровней. |
| atrRisk | Множитель риска — Множитель ATR для расчёта расстояния стоп-лосса от цены входа. |
| atrLen | Длина ATR — Длина ATR для расчёта уровней риска в системе управления рисками. |
| percentStop | Стоп-лосс % — Процент стоп-лосса от цены входа (0 — отключено). |
| show_dashboard | Показать дашборд — Включает отображение дашборда с данными по трендам на разных таймфреймах. |
Поиск по коду файла
indicator("Drone Arrows with Supply & Demand", "Drone S&D", overlay = true)
sensitivity = input.float(1.0, "Sensitivity", 0.1, 5.0, 0.1, group="Signal Settings")
atr_length = input.int(10, "ATR Length", 1, 50, group="Signal Settings")
atr_multiplier = input.float(7.0, "ATR Multiplier", 1.0, 20.0, 0.5, group="Signal Settings")
use_trend_filter = input.bool(true, "Use Trend Filter", group="Filters")
ma_length = input.int(20, "Moving Average Length", 5, 100, group="Filters")
use_volume_filter = input.bool(false, "Use Volume Filter", group="Filters")
volume_threshold = input.float(1.1, "Volume Threshold", 1.0, 3.0, 0.1, group="Filters")
show_signals = input.bool(true, "Show Signals", group="Display")
levels2 = input.bool(true, "Show TP/SL Levels" , group = "Risk Management" , inline = "MMDB2")
lvlLines = input.bool(true, "Show Lines ", inline="levels2", group = "Risk Management")
linesStyle = input.string("SOLID", "", ["SOLID", "DASHED", "DOTTED"], inline="levels2", group = "Risk Management")
lvlDistance = input.int(40, "Distance", 1, inline="levels2", group = "Risk Management")
lvlDecimals = input.int(4, " Decimals", 1, 8, inline="levels2", group = "Risk Management")
atrRisk = input.int(3, "Risk Multiplier ", 1, group = "Risk Management" , inline="levels3")
atrLen = input.int(14, " ATR Length", 1, group = "Risk Management" , inline="levels3")
percentStop = input.float(1, "Stop Loss % (0 to Disable)", 0, group="Risk Management")
show_dashboard = input.bool(true, "Show MTF Dashboard", group="Dashboard")
style2 = linesStyle == "SOLID" ? line.style_solid : linesStyle == "DASHED" ? line.style_dashed : line.style_dotted
supertrend(src, factor, atrLen) =>
atr = ta.atr(atrLen)
upperBand = src + factor * atr
lowerBand = src - factor * atr
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
var int direction = na
var float superTrend = na
prevSuperTrend = nz(superTrend[1])
if na(atr[1])
direction := 1
else if prevSuperTrend == prevUpperBand
direction := close > upperBand ? -1 : 1
else
direction := close < lowerBand ? 1 : -1
superTrend := direction == -1 ? lowerBand : upperBand
[superTrend, direction]
[supertrend_line, direction] = supertrend(close, sensitivity * atr_multiplier, atr_length)
raw_buy = ta.crossover(close, supertrend_line)
raw_sell = ta.crossunder(close, supertrend_line)
ma = ta.sma(close, ma_length)
trend_up = close > ma
trend_down = close < ma
trend_filter_buy = not use_trend_filter or trend_up
trend_filter_sell = not use_trend_filter or trend_down
volume_ma = ta.sma(volume, 20)
volume_ok = not use_volume_filter or volume > (volume_ma * volume_threshold)
momentum_ok = math.abs(close - close[1]) > ta.atr(14) * 0.1
buy_signal = raw_buy and trend_filter_buy and volume_ok and momentum_ok
sell_signal = raw_sell and trend_filter_sell and volume_ok and momentum_ok
var int last_signal_bar = 0
var string last_signal_type = ""
signal_cooldown = 2 // minimum bars between signals
bars_since_last = bar_index - last_signal_bar
cooldown_ok = bars_since_last >= signal_cooldown
final_buy = buy_signal and cooldown_ok and last_signal_type != "BUY"
final_sell = sell_signal and cooldown_ok and last_signal_type != "SELL"
if final_buy
last_signal_bar := bar_index
last_signal_type := "BUY"
if final_sell
last_signal_bar := bar_index
last_signal_type := "SELL"
getTrend(tf) =>
ema50 = request.security(syminfo.tickerid, tf, ta.ema(close, 50))
current_close = request.security(syminfo.tickerid, tf, close)
current_close > ema50 ? 1 : current_close < ema50 ? -1 : 0
trend_m1 = getTrend("1")
trend_m5 = getTrend("5")
trend_m15 = getTrend("15")
trend_m30 = getTrend("30")
trend_h1 = getTrend("60")
trend_h4 = getTrend("240")
trend_daily = getTrend("1D")
bullish_count = (trend_m1 == 1 ? 1 : 0) + (trend_m5 == 1 ? 1 : 0) + (trend_m15 == 1 ? 1 : 0) + (trend_m30 == 1 ? 1 : 0) + (trend_h1 == 1 ? 1 : 0) + (trend_h4 == 1 ? 1 : 0) + (trend_daily == 1 ? 1 : 0)
bearish_count = (trend_m1 == -1 ? 1 : 0) + (trend_m5 == -1 ? 1 : 0) + (trend_m15 == -1 ? 1 : 0) + (trend_m30 == -1 ? 1 : 0) + (trend_h1 == -1 ? 1 : 0) + (trend_h4 == -1 ? 1 : 0) + (trend_daily == -1 ? 1 : 0)
overall_trend = bullish_count >= 4 ? "STRONG BUY" : bearish_count >= 4 ? "STRONG SELL" : "FLAT MARKET"
countBull = ta.barssince(final_buy)
countBear = ta.barssince(final_sell)
trigger = nz(countBull, bar_index) < nz(countBear, bar_index) ? 1 : 0
atrBand = ta.atr(atrLen) * atrRisk
atrStop = trigger == 1 ? low - atrBand : high + atrBand
srcStop = close
lastTrade(src) => ta.valuewhen(final_buy or final_sell, src, 0)
entry_y = lastTrade(srcStop)
stop_y = lastTrade(atrStop)
tp1_y = (entry_y - lastTrade(atrStop)) * 1 + entry_y
tp2_y = (entry_y - lastTrade(atrStop)) * 2 + entry_y
tp3_y = (entry_y - lastTrade(atrStop)) * 3 + entry_y
tp4_y = (entry_y - lastTrade(atrStop)) * 4 + entry_y
tp5_y = (entry_y - lastTrade(atrStop)) * 5 + entry_y
decimals = lvlDecimals == 1 ? "#.#" : lvlDecimals == 2 ? "#.##" : lvlDecimals == 3 ? "#.###" : lvlDecimals == 4 ? "#.####" : lvlDecimals == 5 ? "#.#####" : lvlDecimals == 6 ? "#.######" : lvlDecimals == 7 ? "#.#######" : "#.########"
var label entry_lbl = na
var label stop_lbl = na
var label tp1_lbl = na
var label tp2_lbl = na
var label tp3_lbl = na
var label tp4_lbl = na
var label tp5_lbl = na
var line entry_line = na
var line stop_line = na
var line tp1_line = na
var line tp2_line = na
var line tp3_line = na
var line tp4_line = na
var line tp5_line = na
hasSignal = (not na(countBull) and countBull < bar_index) or (not na(countBear) and countBear < bar_index)
if barstate.islast
label.delete(entry_lbl)
label.delete(stop_lbl)
label.delete(tp1_lbl)
label.delete(tp2_lbl)
label.delete(tp3_lbl)
label.delete(tp4_lbl)
label.delete(tp5_lbl)
line.delete(entry_line)
line.delete(stop_line)
line.delete(tp1_line)
line.delete(tp2_line)
line.delete(tp3_line)
line.delete(tp4_line)
line.delete(tp5_line)
if (levels2 and percentStop != 0 and hasSignal)
entry_lbl := label.new(bar_index + lvlDistance, entry_y, "ENTRY: " + str.tostring(entry_y, decimals), xloc.bar_index, yloc.price, color.rgb(242, 244, 252), label.style_label_left, #000000, size.normal)
stop_lbl := label.new(bar_index + lvlDistance, stop_y, "STOP LOSS: " + str.tostring(stop_y, decimals),Показано первые 50% кода (символов: 11046)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.