Стратегия двойного давления - это стратегия, которая сочетает в себе индикаторы стохастического и объемного движения, в основном используя линии K и D вместе с индикаторами объема для генерации сигналов купли и продажи, дополненных пересечениями скользящих средних для дополнительных сигналов.
Основной сигнал покупки запускается, когда:
Обе линии K и D пересекают ниже площади перепродажи (например, 20) и поднимаются, и оба K и D растут
Объем превышает определенный порог (например, в 1,4 раза превышает средний объем)
Закрыть - значит открыть (белая свеча)
Дополнительные сигналы о покупке могут исходить от:
Золотой крест: быстрая EMA пересекает медленную EMA, обе растут
И K, и D поднимаются с низкой в среднюю зону (например, с ниже 20 до 20-80)
Основные сигналы продажи запускаются, когда:
И K, и D входят в зону перекупленности (например, выше 80%)
Смертный перекресток: быстрая EMA пересекает медленную EMA
K переходит ниже D, и оба K и D падают
Процент (например, 6%) ниже цены покупки устанавливается как уровень стоп-лосса.
Один стохастический показатель может генерировать много ложных сигналов. Двойная комбинация стохастических показателей фильтрует ложные сигналы и повышает надежность.
Условия объема фильтруют низкообъемные точки, не являющиеся трендом, и снижают риск задержания.
Несколько индикаторов должны соответствовать друг другу, чтобы запустить реальные торговые сигналы. Это повышает надежность сигнала.
Правила, такие как двойные скользящие средние, гарантируют, что сигналы соответствуют общему тренду.
Логика стоп-лосса реализует прибыль и контролирует убытки на отдельных сделках.
Стратегия имеет несколько параметров. Они нуждаются в оптимизации для разных инструментов, иначе производительность страдает.
Точка остановки потери должна учитывать сценарии ценового разрыва.
Для неликвидных инструментов правила объема могут отфильтровывать слишком много сигналов.
Сигналы в разные временные рамки могут быть неправильно выровнены. Сигналы должны быть подтверждены.
Стратегия может быть усилена в таких областях, как:
Оптимизировать параметры надежности
Внедрение машинного обучения для адаптивных параметров
Улучшение стратегии стоп-лосса для снижения уровня стоп-лосса
Добавить фильтры для уменьшения частоты торговли
Исследуйте условные заказы или получение прибыли для улучшения вознаграждения
Такие методы, как генетические алгоритмы, могут систематически оптимизировать параметры стабильности на рынке.
Модели могут оценивать рыночные условия и соответственно корректировать параметры, достигая динамической оптимизации.
Лучшие алгоритмы остановки потерь могут уменьшить ненужные остановки при сохранении контроля риска.
Укрепление фильтров может уменьшить частоту торговли, снизить затраты и улучшить доходность от торговли.
В соответствии с рыночными условиями, условные заказы или стратегии получения прибыли могут лучше максимизировать прибыль, контролируя риск.
Стратегия балансирует тренд, контроль риска, затраты и другие аспекты. Основные преимущества - двойная стохастическая плюс объем для тренда и стоп-лосс для контроля риска. Следующими шагами являются повышение надежности, адаптивные параметры, оптимизация стоп-лосса и т. Д. Для получения устойчивой прибыли в большем количестве рыночных режимов.
/*backtest start: 2023-10-02 00:00:00 end: 2023-11-01 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 // SW SVE - Stochastic+Vol+EMAs [Sergio Waldoke] // Script created by Sergio Waldoke (BETA VERSION v0.5, fine tuning PENDING) // Stochastic process is the main source of signals, reinforced on buying by Volume. Also by Golden Cross. // Selling is determined by K and D entering overselling zone or EMA's Death Cross signal, the first occurring, // and some other signals combined. // Buy Long when you see a long buy arrow. // Sell when you see a close arrow. // This is a version to be tuned and improved, but already showing excelent results after tune some parameters // according to the kind of market. // Strategy ready for doing backtests. // SVE SYSTEM DESIGN: // Buy Signal Trigger: // - Both Stoch <= 20 crossing up and both growing and green candle and Vol/sma vol >= 1.40 Avg Vol // or // - Both Stoch growing up and Vol/sma vol >= 1.40 Avg Vol and green candle and // both prior Stoch crossing up // or // [OPTIONAL]: (Bad for BTC 2018, excelent for 2017) // - Crossingover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and green candle // Exit position: // - Both Stoch <= 20 and Both Stoch were > 20 during position // or // - CrossingUnder(Fast EMA, Medium EMA) // or [OPTIONAL] (Better for BTC 2018, Worse for BNB 1H) // - CrossingUnder(k, d) and (k and d starting over over_buying) and (k and d descending) and k crossing down over_buying line //calc_on_every_tick=true, //calc_on_order_fills=true, (affects historical calculation, triggers in middle of the bar, may be better for automatic orders) strategy("SW SVE - Stochastic+Vol+EMAs [Sergio Waldoke]", shorttitle="SW SVE", overlay=true, max_bars_back=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency="USD", commission_type=strategy.commission.percent, commission_value=0.25) //Strategy Parameters FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromYear = input(defval = 2018, title = "From Year", minval = 2009, maxval = 2200) ToDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) ToMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) ToYear = input(defval = 2030, title = "To Year", minval = 2009, maxval = 2200) //Indicator Parameters //Original defaults for 4HS: 14, 3, 80, 20, 14, 23, 40, 20, 40, 3: stoch_k = input(title="Stoch K", defval=14, minval=1) stoch_d = input(title="Stoch D", defval=3, minval=1) over_buying = input(title="Stoch Overbuying Zone", defval=80, minval=0, maxval=100) over_selling = input(title="Stoch Overselling Zone", defval=20, minval=0, maxval=100) fast_ema_periods = input(title="Fast EMA (Death Cross)", defval=14, minval=1, maxval=600) slow_ema_periods = input(title="Slow EMA (Death Cross)", defval=23, minval=1, maxval=600) trend_ema_periods = input(title="Slowest EMA (Trend Test)", defval=40, minval=1, maxval=600) volume_periods = input(title="Volume Periods", defval=20, minval=1, maxval=600) volume_factor = input(title="Min Volume/Media Increase (%)", defval=80, minval=-100) / 100 + 1 threshold_sl_perc = input(title="[Sell Trigger] Stop Loss Threshold %", defval=6.0, type=float, minval=0, maxval=100) //before_buy = input(title="# Growing Before Buy", defval=2, minval=1) //before_sell = input(title="# Decreasing Before Sell", defval=1, minval=1) //stepsignal = input(title="Show White Steps", type=bool, defval=true) //steps_base = input(title="White Steps Base", defval=242, minval=0) //Signals fast_ema = ema(close, fast_ema_periods) slow_ema = ema(close, slow_ema_periods) trend_ema = ema(close, trend_ema_periods) k = stoch(close, high, low, stoch_k) d = sma(k, stoch_d) vol_ma = sma(volume, volume_periods) //REVIEW CONSTANT 1.75: in_middle_zone(a) => a > over_selling * 1.75 and a < over_buying growing(a) => a > a[1] was_in_middle_zone = k == d was_in_middle_zone := was_in_middle_zone[1] or in_middle_zone(k) and in_middle_zone(d) //Buy Signal Trigger: //- Both Stoch <= 20 crossing up and both growing and // green candle and Vol/sma vol >= 1.40 Avg Vol buy = k <= over_selling and d <= over_selling and crossover(k, d) and growing(k) and growing(d) and close > open and volume/vol_ma >= volume_factor //or //- Both Stoch growing up and Vol/sma vol >= 1.40 Avg Vol and green candle and // both prior Stoch crossing up buy := buy or (growing(k) and growing(d) and volume/vol_ma >= volume_factor and close > open and crossover(k[1], d[1]) ) //Worse: // (crossover(k[1], d[1]) or (crossover(k, d) and k[1] <= over_selling and d[1] <= over_selling) ) ) //or // [OPTIONAL]: (Bad for BTC 2018, excelent for 2017) //- Crossingover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and green candle buy := buy or (crossover(fast_ema, slow_ema) and growing(fast_ema) and growing(slow_ema) and close > open) //Debug: //d1 = close > open ? 400 : 0 //plot(d1+5200, color=white, linewidth = 3, style = stepline) //Exit position: //- Both Stoch <= 20 and Both Stoch were > 20 during position sell = k <= over_selling and d <= over_selling and was_in_middle_zone // or //- CrossingUnder(Fast EMA, Medium EMA) sell := sell or crossunder(fast_ema, slow_ema) // or [OPTIONAL] (Better for BTC 2018, Worse for BNB 1H) //- CrossingUnder(k, d) and (k and d starting over over_buying) and (k and d descending) and k crossing down over_buying line sell := sell or (crossunder(k, d) and k[1] >= over_buying and d[1] >= over_buying and not growing(k) and not growing(d) and k <= over_buying) color = buy ? green : red bought_price = close bought_price := nz(bought_price[1]) already_bought = false already_bought := nz(already_bought[1], false) //Date Ranges buy := buy and not already_bought //d1 = buy ? 400 : 0 //plot(d1+6500, color=white, linewidth = 3, style = stepline) was_in_middle_zone := (not buy and was_in_middle_zone) or (in_middle_zone(k) and in_middle_zone(d)) already_bought := already_bought[1] or buy bought_price := buy ? close * (1 - threshold_sl_perc/100) : bought_price[1] trigger_SL = close < bought_price[0] sell := sell or trigger_SL sell := sell and already_bought and not buy and (was_in_middle_zone or trigger_SL) //plot((sell?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline) already_bought := already_bought[0] and not sell bought_price := sell ? 0 : bought_price[0] //plot((was_in_middle_zone?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline) was_in_middle_zone := not sell and was_in_middle_zone //Plot signals plot(fast_ema, title="Fast EMA", color=red, linewidth = 4) plot(slow_ema, title="Slow EMA", color=blue, linewidth = 4) plot(trend_ema, title="Trend EMA", color=yellow, linewidth = 4) //Stop Loss plot(bought_price, color=gray, linewidth=2, style=cross, join=true, title="Stop Loss") //Y = stepsignal ? lowest(40) : na //Y = steps_base //plot(mysignal+Y, title="Steps", color=white, linewidth = 3, style = stepline) //Unit steps - for debugging //plot(mysteps+Y, title="Steps2", color=yellow, linewidth = 3, style = stepline) //Bought or not - for debugging //plot((already_bought?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline) //plot((sell?400:0)+5200, title="Buy-Sell", color=yellow, linewidth = 3, style = stepline) plotshape(buy, title="Buy arrows", style=shape.arrowup, location=location.belowbar, color=color, text="Buy", textcolor=color, size=size.huge, transp=30) plotshape(sell, title="Sell arrows", style=shape.arrowdown, location=location.abovebar, color=color, text="Sell", textcolor=color, size=size.huge, transp=30) //if n>2000 strategy.entry("buy", strategy.long, when=buy) strategy.close_all(when=sell) //plot(strategy.equity, title="Equity", color=white, linewidth = 4, style = line) //AlertS trigger //msg = "[SW Magic Signals EMA] BUY/SELL Signal has been triggered." + "(" + tostring(fastema) + ", " + tostring(slowema) + ") on " + tickerid + ", " + period + "." msg = "SW SVE BUY/SELL Signal has been triggered. (#, #) on EXCH:PAIR, period: #." alertcondition(buy or sell, title="SW SVE (BUY/SELL SIGNAL)", message=msg) alertcondition(buy, title="SW SVE (BUY SIGNAL)", message=msg) alertcondition(sell, title="SW SVE (SELL SIGNAL)", message=msg)