
Эта стратегия является комбинированной стратегией, которая включает в себя динамический индикатор, индикатор трендового отслеживания и индикатор средней линии, позволяющий отслеживать тренд и совершать прорыв в покупке/продаже. В основном, используя комбинацию индикатора Stochastic и индикатора Supertrend для определения времени покупки/продажи, в дополнение к EMA для определения основных тенденций на рынке.
Стратегия включает в себя следующие компоненты:
EMA средняя линия: используйте EMA 25, 50, 100 и 200 четыре средние линии для определения основного тренда. Если EMA25 проходит через EMA50 и EMA100 проходит через EMA200, то это является восходящим трендом, иначе это является нисходящим трендом.
Трендовый индикатор Supertrend: параметры Factor 3 и ATR 10, определяют, находится ли текущая цена в тенденции к росту или снижению. Когда Supertrend зеленый - это тенденция к росту, красный - тенденция к снижению.
Стохастический динамический индикатор: %K 8 и %D 3, определяющий, является ли Stochastic явлением золотой или мертвой вилки. Когда %K линия проходит через %D линию снизу, она является золотой вилкой, а наоборот - мертвой вилкой.
Стратегия покупки: EMA показывает тенденцию к повышению + Supertrend показывает тенденцию к повышению + Stochastic Gold Forks. Продажная стратегия: EMA показывает нисходящий тренд + Supertrend показывает нисходящий тренд + Stochastic Dead Forks.
Стратегия включает три показателя: тренд, динамику и прорыв, чтобы более надежно оценить движение рынка и точки покупки и продажи.
Основные преимущества этой стратегии:
В сочетании с различными показателями, более сильное суждение может эффективно отфильтровывать ложные прорывы.
Добавление динамических показателей позволяет заранее определить переломный момент.
Настраиваемые параметры для различных рыночных условий.
Относительно эффективные настройки для остановки и остановки ущерба.
Лучше всего проводить обратное измерение при высоких циклах, таких как солнечные лучи.
Однако эта стратегия также несет в себе некоторые риски:
Неправильная настройка параметров может привести к частоте торгов или нестабильности сигнала.
При выборе может быть допущена ошибочная оценка. Можно рассмотреть возможность добавления дополнительных показателей.
Стоп-стоп устанавливается на предельную величину Stochastic, которая может быть слишком близко, и следует рассмотреть возможность соответствующего смягчения.
Недостаток данных отслеживания может повлиять на параметры присоединения, следует расширить период отслеживания.
Эта стратегия может быть оптимизирована в следующих направлениях:
Проверьте больше комбинаций параметров, чтобы найти оптимальные параметры. Например, настройка параметров Supertrend Factor и т. Д.
Добавление большего количества фибровых показателей, таких как показатели энергии, показатели колебаний и т. д., уменьшает вероятность ошибочного суждения.
Можно проверить различные методы остановки, например, настроить линию остановки на определенный процент в предельной точке.
Оптимизировать методы остановки, например, рассматривать динамические остановки, чтобы зафиксировать больше прибыли.
Расширение применения стратегии, например, попытка адаптироваться к большему количеству торговых сортов или попытка использования в более высоких циклах.
Стратегия имеет четкую общую концепцию, разумный выбор индикаторов, лучшее отслеживание трендов и взлома сделок, лучший эффект от отслеживания. Тем не менее, все еще есть место для оптимизации, многосторонняя оптимизация путем корректировки параметров, добавления большего количества индикаторов колебаний, улучшения метода остановки убытков и т. Д.
/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-06 07:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="Supertrend + Stoch Strategy", overlay=true)
// ---inputs---
pl = input(1.5, title="P/L", minval=0.1)
lossPercentage = input(1, title="Loss Percentage", minval=1, maxval=100)
atrPeriod = input(10, "ATR Length")
factor = input(3, "Supertrend Factor")
periodK = input(8, title="%K Length", minval=1)
smoothK = input(3, title="%K Smoothing", minval=1)
periodD = input(3, title="%D Smoothing", minval=1)
ema1l = input(25, title="EMA 1 Length", minval=1)
ema2l = input(50, title="EMA 2 Length", minval=1)
ema3l = input(100, title="EMA 3 Length", minval=1)
ema4l = input(200, title="EMA 4 Length", minval=1)
// ---lines---
ema1 = ema(close, ema1l)
ema2 = ema(close, ema2l)
ema3 = ema(close, ema3l)
ema4 = ema(close, ema4l)
trendUpper = ema1 > ema2 and ema3 > ema4
trendLower = ema1 < ema2 and ema3 < ema4
[supertrend, direction] = supertrend(factor, atrPeriod)
supertrendUpper = direction < 0
supertrendLower = direction > 0
k = sma(stoch(close, high, low, periodK), smoothK)
d = sma(k, periodD)
stochCrossOver = crossover(k, d)
stochCrossUnder = crossunder(k, d)
// ---plot---
plot(ema1, color=color.green)
plot(ema2, color=color.orange)
plot(ema3, color=color.blue)
plot(ema4, color=color.purple)
bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(direction < 0 ? na : supertrend, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 95), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 95), fillgaps=false)
// ---stop place compute---
edge = 0. // periodly high/low
edge := stochCrossOver ? high : stochCrossUnder ? low : k > d ? max(edge[1], high) : k < d ? min(edge[1], low) : edge[1]
// plot(edge)
// ---trade condition---
// longCond = trendUpper and supertrendUpper and stochCrossOver
// shortCond = trendLower and supertrendLower and stochCrossUnder
longCond = trendUpper and supertrendUpper and stochCrossOver and strategy.position_size == 0
shortCond = trendLower and supertrendLower and stochCrossUnder and strategy.position_size == 0
// ---stop & take---
stop = 0.
stop := nz(stop[1], stop)
take = 0.
take := nz(take[1], take)
if longCond
stop := edge[1]
take := close + (close - stop) * pl
if shortCond
stop := edge[1]
take := close - (stop - close) * pl
// ---trade---
qty = strategy.equity / abs(stop - close) / 100 * lossPercentage
strategy.entry("Buy", strategy.long, when=longCond, qty=qty)
strategy.exit("Close Buy","Buy", limit=take, stop=stop)
strategy.entry("Sell", strategy.short, when=shortCond, qty=qty)
strategy.exit("Close Sell","Sell", limit=take, stop=stop)
stopLine = plot(strategy.position_size != 0 ? stop : na, color=color.red, style=plot.style_linebr)
takeLine = plot(strategy.position_size != 0 ? take : na, color=color.green, style=plot.style_linebr)
entryLine = plot(strategy.position_size != 0 ? strategy.position_avg_price : na, color=color.blue, style=plot.style_linebr)
fill(entryLine, stopLine, color.new(color.red, 90), fillgaps=false)
fill(entryLine, takeLine, color.new(color.green, 90), fillgaps=false)