
Эта стратегия объединяет несколько показателей, таких как график облаков Ичимоку, движущиеся средние, MACD, Stochastic и ATR, чтобы идентифицировать и отслеживать тенденции в течение нескольких временных рамок. После получения высоковероятного трендового сигнала для контроля риска используется циклическая остановка убытков ATR.
Ichimoku диаграмма определяет направление тенденции средней длинной линии. Обратная линия и эталонная линия, проходящая через диаграму облаков в верхней части цены CLOSE, являются многоголовыми сигналами, а в нижней части - пустыми сигналами.
MACD определяет тенденцию короткой линии и перепродажи.
Stochastic KD определяет зону перепродажи. На K-линии 20 - это многоголовый сигнал, а на нижней линии 80 - пустой сигнал.
Подвижная средняя определяет среднесрочную тенденцию. Подвижная средняя покрывает цену как многоголовый сигнал, а нижняя - как пустой сигнал.
Комбинируя несколько сигналов вышеперечисленных индикаторов, отфильтровывая некоторые ложные сигналы, образуется высоковероятный сигнал постоянного тренда.
На основе ATR рассчитывается стоп-стоп цена. С определенным ATR-множеством как стоп-стоп и стоп-стоп, реализуется контроль риска.
Узнать тенденции в нескольких временных рамках, повысить точность сигналов.
Широкое применение технологии фильтрации комбинации показателей, эффективное фильтрация ложных сигналов.
ATR - периодический стоп-стоп для максимального контроля одиночных потерь.
Строгость условий допуска может быть настроена в соответствии с различными предпочтениями в отношении риска.
Например, если мы используем тенденции, мы не сможем распознать реверсию, вызванную внезапными событиями.
Циклическая остановка ATR может быть слишком идеализирована и трудно полностью воспроизведена в реальном мире.
Неправильная настройка параметров может привести к слишком высокой частоте сделок или недостаточной точности распознавания сигналов.
Необходимо скорректировать параметры, чтобы найти баланс и адаптироваться к различным видам и рыночной среде.
Добавление алгоритмов машинного обучения, помогающих определить переломные моменты тренда.
Оптимизация параметров ATR, разные сорта могут иметь разные множители.
В сочетании с другими факторами, такими как изменение объема торгов, повышается точность прорывного сигнала.
В зависимости от результатов обратной проверки параметры постоянно оптимизируются, чтобы найти оптимальную комбинацию параметров.
Эта стратегия использует несколько показателей, таких как Ичимоку, MACD и Stochastic, для идентификации тенденций в нескольких временных рамках, чтобы уловить тенденцию и избежать попадания в ловушку внезапных событий. Периодическая остановка убытков ATR является эффективной стратегией отслеживания тенденций, чтобы эффективно контролировать убытки.
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © FXFUNDINGMATE
//@version=4
strategy(title="FXFUNDINGMATE TREND INDICATOR", overlay=true)
//Ichimoku Cloud
conversionPeriods = input(9, minval=1, title="Conversion Line Length")
basePeriods = input(26, minval=1, title="Base Line Length")
laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Length")
displacement = input(26, minval=1, title="Displacement")
donchian(len) => avg(lowest(len), highest(len))
conversionLine = donchian(conversionPeriods)
baseLine = donchian(basePeriods)
leadLine1 = avg(conversionLine, baseLine)[displacement - 1]
leadLine2 = donchian(laggingSpan2Periods)[displacement - 1]
//macd
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
//kd
periodK = input(5, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
//atr
atrlength = input(title="Atr Length", defval=8, minval=1)
SMulti = input(title="Stop loss multi Atr", defval=1.0)
TMulti = input(title="Take profit multi Atr", defval=1.0)
smoothing = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
ma_function(source, length) =>
if smoothing == "RMA"
rma(source, length)
else
if smoothing == "SMA"
sma(source, length)
else
if smoothing == "EMA"
ema(source, length)
else
wma(source, length)
atr = ma_function(tr(true), atrlength)
operation_type = input(defval = "Both", title = "Position side", options = ["Long", "Short", "Both"])
operation = operation_type == "Long" ? 1 : operation_type == "Short" ? 2 : 3
showlines = input(true, title="Show sl&tp lines")
// MA
sma_len = input(100, title="MA Length", type=input.integer)
sma = sma(close, sma_len)
longCond = crossover(k, 20) and macd > 0 and close > sma and close > leadLine1 and close > leadLine2
shortCond = crossunder(k, 80) and macd < 0 and close < sma and close < leadLine1 and close < leadLine2
entry_price = float(0.0) //set float
entry_price := strategy.position_size != 0 or longCond or shortCond ? strategy.position_avg_price : entry_price[1]
entry_atr = valuewhen(longCond or shortCond, atr,0)
short_stop_level = float(0.0) //set float
short_profit_level = float(0.0) //set float
long_stop_level = float(0.0) //set float
long_profit_level = float(0.0) //set float
short_stop_level := entry_price + SMulti * entry_atr
short_profit_level := entry_price - TMulti * entry_atr
long_stop_level := entry_price - SMulti * entry_atr
long_profit_level := entry_price + TMulti * entry_atr
// Strategy Backtest Limiting Algorithm
i_startTime = input(defval = timestamp("1 Jan 2020 00:00 +0000"), title = "Backtesting Start Time", type = input.time)
i_endTime = input(defval = timestamp("31 Dec 2025 23:59 +0000"), title = "Backtesting End Time", type = input.time)
timeCond = true
if (operation == 1 or operation == 3)
strategy.entry("long" , strategy.long , when=longCond and timeCond, alert_message = "Long")
strategy.exit("SL/TP", from_entry = "long" , limit = long_profit_level , stop = long_stop_level , alert_message = "Long exit")
if (operation == 2 or operation == 3)
strategy.entry("short", strategy.short, when=shortCond and timeCond, alert_message="Short")
strategy.exit("SL/TP", from_entry = "short", limit = short_profit_level , stop = short_stop_level , alert_message = "Short exit")
if time > i_endTime
strategy.close_all(comment = "close all", alert_message = "close all")
plot(showlines and strategy.position_size <= 0 ? na : long_stop_level, color=color.red, style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size <= 0 ? na : long_profit_level, color=color.lime, style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_stop_level, color=color.red, style=plot.style_linebr, linewidth = 2)
plot(showlines and strategy.position_size >= 0 ? na : short_profit_level, color=color.lime, style=plot.style_linebr, linewidth = 2)
//}