
Мультифакторная комбинационная адаптивная подвижная средняя стратегия - это комбинированная стратегия, в которой одновременно используются внутридневная линия, подвижная средняя, агрегированный крест и средняя линия HA. Эта стратегия направлена на то, чтобы найти больше торговых возможностей и получить более высокую совокупную прибыль в бычьем рынке.
Основная логика этой стратегии заключается в том, что в сочетании с использованием нескольких технических показателей для оценки сигналов покупки и продажи дается сигнал торговли различной интенсивности в зависимости от результатов сопоставления различных факторов.
В частности, четыре основных технических показателя, используемых в стратегии, включают:
Дневная линия. Стратегия использует цвет дневной линии для определения ценовой тенденции. Два последовательных зеленых объекта HA средняя линия является сигналом покупки, два последовательных красных пустого HA средняя линия является сигналом пустого головы.
Движущаяся средняя. Стратегия одновременно использует движущуюся среднюю с тремя различными параметрами настройки: быстрый, медленный и фильтрующий. Когда быстрая линия проходит медленную линию, а медленная линия проходит по шелковой линии, это является сигналом покупки; наоборот, это сигнал продажи.
Стохастический индикатор. Этот индикатор определяет время пересечения поля. Когда линия %K пересекает линию %D снизу, это сигнал к покупке; когда она пересекает линию сверху вниз, это сигнал к продаже.
Система оценки соответствия. В зависимости от того, соответствуют ли вышеперечисленные факторы, стратегия использует систему оценки. Чем больше факторов соответствия, тем больше сила соответствующего сигнала.
С помощью комплексного многофакторного суждения, стратегия может зафиксировать более мелкие торговые возможности в среднесрочной и краткосрочной перспективе, что позволит получить дополнительную прибыль в бычьем рынке.
Наибольшим преимуществом стратегии многофакторного комбинирования является повышенная надежность сигналов. Одиночные технические показатели легко могут привести к ошибочным сигналам, в то время как эта стратегия в сочетании с использованием нескольких индикаторов в паре может эффективно уменьшить помехи ложных сигналов.
Кроме того, по сравнению с простой последовательностью одного показателя, комбинация множественных факторов может повысить выигрышную вероятность торгов. В бычьем рынке стратегия может получить более высокую совокупную прибыль.
Основным риском этой стратегии является то, что комбинация многофакторных факторов сама по себе увеличивает сложность стратегии. Необходимо одновременно учитывать параметры нескольких показателей, частое корректирование и т. д.
Кроме того, во время медвежьего рынка, стратегические позиции могут быть удерживаемыми слишком долго. Даже если установить стоп-лосс, трудно избежать больших потерь.
Кроме того, технические индикаторы, такие как стохастические индикаторы и средняя линия HA, подвержены воздействию внезапных событий, которые могут привести к ошибочным сигналам, что может привести к ненужным потерям.
Эта стратегия может быть оптимизирована в следующих аспектах:
Оптимизируйте параметры каждого показателя, чтобы найти оптимальную комбинацию параметров.
Добавление модулей для обучения моделей и адаптации параметров, оптимизация параметров в реальном времени.
Увеличение стратегии стоп-лосс и уменьшение стратегии максимального вывода.
Добавление модуля контроля позиций, динамично регулирующего позиции в зависимости от рыночных условий.
Модели нейронных сетей с многофакторной оценкой в сочетании с алгоритмами машинного обучения.
Многофакторная комбинация адаптируется к стратегии сочетания подвижных средних, используя преимущества различных технических показателей. Эта стратегия может эффективно повысить качество сигнала и получить дополнительную прибыль в бычьем рынке, но также увеличивает сложность стратегии, требующую дальнейшего тестирования и оптимизации.
/*backtest
start: 2022-12-08 00:00:00
end: 2023-12-14 00:00:00
period: 1d
basePeriod: 1h
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/
// © cyrule
//@version=4
strategy("2nd Grade Strategy", overlay=true, shorttitle="2GTS", max_lines_count = 500, max_labels_count = 500, calc_on_every_tick = true, calc_on_order_fills = true, pyramiding = 1, default_qty_type = strategy.percent_of_equity, default_qty_value = 10)
source = input(close, title = "Source")
// **********************
// * Heikin-Ahshi *
// * kudos to garethyeo *
// **********************
showHA = input(true, title = "Show Heikin Ashi?", group = "Heikin Ashi")
ha_open = security(heikinashi(syminfo.tickerid), timeframe.period, open)
ha_high = security(heikinashi(syminfo.tickerid), timeframe.period, high)
ha_low = security(heikinashi(syminfo.tickerid), timeframe.period, low)
ha_close = security(heikinashi(syminfo.tickerid), timeframe.period, close)
bgcolor(iff(showHA and ha_open < ha_close , color.new(#53b987, transp = 92.5), na), title = 'Green HA')
bgcolor(iff(showHA and ha_open >= ha_close, color.new(#eb4d5c, transp = 92.5), na), title = 'Red HA' )
// ******************
// * Moving Average *
// ******************
// MA Settings
showMA = input(true, title = "Show Moving Averages?", group = "Moving Averages")
fastMALength = input(title = "Fast MA Length", minval = 1, step = 1, defval = 20, group = "Moving Averages")
slowMALength = input(title = "Slow MA Length", minval = 1, step = 1, defval = 50, group = "Moving Averages")
maType = input(title = "Moving Average Type", defval = "SMA", options = ["SMA", "EMA", "RMA", "WMA", "VWMA"], group = "Moving Averages")
filterMALength = input(title = "Filter MA Length", minval = 1, step = 1, defval = 200, group = "Moving Averages")
filterMAType = input(title = "Filter MA Type", defval = "EMA", options = ["SMA", "EMA", "RMA", "WMA", "VWMA"], group = "Moving Averages")
// Calculate MA
var float maFast = na
var float maSlow = na
var float maFilter = na
if (maType == "SMA")
maFast := sma(source, fastMALength)
maSlow := sma(source, slowMALength)
if (maType == "EMA")
maFast := ema(source, fastMALength)
maSlow := ema(source, slowMALength)
if (maType == "RMA")
maFast := rma(source, fastMALength)
maSlow := rma(source, slowMALength)
maFilter := rma(source, filterMALength)
if (maType == "WMA")
maFast := wma(source, fastMALength)
maSlow := wma(source, slowMALength)
if (maType == "VWMA")
maFast := vwma(source, fastMALength)
maSlow := vwma(source, slowMALength)
if (filterMAType == "SMA")
maFilter := sma(source, filterMALength)
if (filterMAType == "EMA")
maFilter := ema(source, filterMALength)
if (filterMAType == "RMA")
maFilter := rma(source, filterMALength)
if (filterMAType == "WMA")
maFilter := wma(source, filterMALength)
if (filterMAType == "VWMA")
maFilter := vwma(source, filterMALength)
BiruAtasMerah = (maFast >= maSlow) and (maSlow >= maFilter)
MerahAtasBiru = (maFast <= maSlow) and (maSlow <= maFilter)
// Lukis MA
plot(series = showMA ? maFast : na, color = color.blue, title = "MA Fast")
plot(series = showMA ? maSlow : na, color = color.red, title = "MA Slow")
plot(series = showMA ? maFilter : na, color = #FFCC00, title = "MA Filter")
// **************
// * Stochastic *
// **************
// Stochastic Settings
showSSC = input(true, title = "Show Stochastic Crossovers?", group = "Stochastic")
Length = input (10, minval = 1, title = "%K Length", group = "Stochastic")
SmoothK = input (3, minval = 1, title = "%K Smoothing", group = "Stochastic")
SmoothD = input (3, minval = 1, title = "%D Smoothing", group = "Stochastic")
// Calculate Stochastic
var float K = na
var float D = na
if (maType == "SMA")
K := sma(stoch(source, high, low, Length), SmoothK)
D := sma(K, SmoothD)
if (maType == "EMA")
K := ema(stoch(source, high, low, Length), SmoothK)
D := ema(K, SmoothD)
if (maType == "RMA")
K := rma(stoch(source, high, low, Length), SmoothK)
D := rma(K, SmoothD)
if (maType == "WMA")
K := wma(stoch(source, high, low, Length), SmoothK)
D := wma(K, SmoothD)
if (maType == "VWMA")
K := vwma(stoch(source, high, low, Length), SmoothK)
D := vwma(K, SmoothD)
StochasticCrossOver = crossover(K, D)
StochasticCrossUnder = crossunder(K, D)
// Lukis SS
plotshape(showSSC and StochasticCrossOver and K <= 20 ? K : na, text = "Golden\nCrossover", color = color.new(color.green, transp = 25), location = location.belowbar, size = size.tiny, title = "Golden Crossover" )
plotshape(showSSC and StochasticCrossUnder and K >= 80 ? D : na, text = "Deadly\nCrossover", color = color.new(color.red, transp = 25), location = location.belowbar, size = size.tiny, title = "Deadly Crossover" )
plotshape(showSSC and StochasticCrossOver and K <= 80 and K > 20 ? K : na, text = "Bullish\nCrossover", color = color.new(color.green, transp = 50), location = location.belowbar, size = size.tiny, title = "Bullish Crossover")
plotshape(showSSC and StochasticCrossUnder and K >= 20 and K < 80 ? D : na, text = "Bearish\nCrossover", color = color.new(color.red, transp = 50), location = location.belowbar, size = size.tiny, title = "Bearish Crossover")
showBull = input(true, title = "Show Bullish Signal?", group = "Signal")
showBear = input(false, title = "Show Bearish Signal?", group = "Signal")
bullishCriteria = 0
if (ha_open < ha_close) and (ha_open[1] < ha_close[1]) and (ha_open[2] >= ha_close[2])
bullishCriteria := bullishCriteria + 1
if (maFast > maSlow) and (maSlow > maFilter)
bullishCriteria := bullishCriteria + 1
if (K > D) and (K > K[1]) and (D > D[1])
bullishCriteria := bullishCriteria + 1
bearishCriteria = 0
if (ha_open >= ha_close) and (ha_open[1] >= ha_close[1]) and (ha_open[2] < ha_close[2])
bearishCriteria := bearishCriteria + 1
if (maFast < maSlow) and (maSlow < maFilter)
bearishCriteria := bearishCriteria + 1
if (K < D) and (K < K[1]) and (D < D[1])
bearishCriteria := bearishCriteria + 1
signal = color.new(color.white, transp = 0)
if bearishCriteria == 2
signal := color.new(color.orange, transp = 50)
if bearishCriteria == 3
signal := color.new(color.red, transp = 50)
if bullishCriteria == 2
signal := color.new(color.aqua, transp = 50)
if bullishCriteria == 3
signal := color.new(color.green, transp = 50)
bullishCriteria := showBull ? bullishCriteria : 0
bearishCriteria := showBear ? bearishCriteria : 0
bgcolor(iff(bullishCriteria > 1, signal, na), title = 'Bullish Signal')
bgcolor(iff(bearishCriteria > 1, signal, na), title = 'Bearish Signal')
longTPPerc = input(title = "Take Profit Threshold (%)" , minval = 0.0, step = 0.5, defval = 2.5, group = "Trading") / 100
profitRatio = input(title = "Profit-to-Loss ratio (risk tolerance)", minval = 1.0, step = 0.1, defval = 1.4, group = "Trading")
longSLPerc = longTPPerc / profitRatio
takeProfit = strategy.position_avg_price * (1 + longTPPerc)
stopLoss = strategy.position_avg_price * (1 - longSLPerc)
strategy.initial_capital = 50000
strategy.entry("Long" , strategy.long , floor(strategy.initial_capital*.1/close), stop = strategy.position_avg_price * 1.25, when = bullishCriteria > 1)
strategy.entry("Short", strategy.short, floor(strategy.initial_capital*.1/close), stop = strategy.position_avg_price * 1.25, when = bearishCriteria > 1)
strategy.close("Long" , when = (open >= takeProfit) or (open <= stopLoss) or (high >= takeProfit) or (low <= stopLoss))
strategy.close("Short", when = (open >= takeProfit) or (open <= stopLoss) or (high >= takeProfit) or (low <= stopLoss))
plotshape(bullishCriteria, location = location.belowbar, color = color.new(color.black, transp = 100))
plotshape(bearishCriteria, location = location.belowbar, color = color.new(color.black, transp = 100))