
Эта стратегия - автоматическая количественная торговая стратегия биткоина, основанная на супертенденционных показателях. Она использует супертенденционные показатели для определения тенденций рынка в сочетании с контролем риска по принципу ATR Stop Loss Principle для осуществления длительных двусторонних торгов.
Эта стратегия использует индикатор супертенденции для определения направления рыночной тенденции. При переходе индикатора супертенденции с понижающей тенденции на повышающую тенденцию делается поперечный вход; при переходе индикатора супертенденции с повышающей тенденции на понижающую тенденцию делается поперечный вход.
В частности, в этой стратегии сначала рассчитывается длина ATR-индекса в 14 циклов, чтобы определить расстояние к каждому потере, умножив его на один ATR-стоп-мальтипликатор (например, в 1,5 раза). Затем рассчитывается супертенденциальный индикатор, параметр которого принимает значение по умолчанию (например, ATR-цикл 9, супертенденциальный коэффициент 2.5).
После входа, стоп-старт фиксируется выше или ниже ATR-стоп. Первый стоп-старт рассчитывается на основе риска-возврата, подразумевая, что 0,75, то есть стоп-стапинг, является 0,75 раза больше стоп-стапинг. Когда цена достигает первого стоп-старта, ликвидируйте 50% позиции и перенесите стоп-старт на цену открытия позиции ((после получения прибыли), чтобы позиция была прибыльной.
Таким образом, эта стратегия может обеспечить прибыль с помощью частичного остановки при условии, что риск остановки убытков будет контролируемым.
Наибольшим преимуществом данной стратегии является хорошее соотношение риска к прибыли, которое можно держать в среднесрочной и долгосрочной перспективе. Конкретные преимущества:
Используйте супер-тренды для определения рыночных тенденций, фильтруйте рыночный шум, чтобы не пропустить основные тенденции.
ATR динамически отслеживает остановку потерь, надежно контролирует одиночные потери.
Некоторые из этих методов блокируют прибыль, а риск - выгоду.
После того, как цена достигнет точки остановки 1, она будет скорректирована на цену открытия позиции, чтобы обеспечить прибыльность и повысить стабильность стратегии.
Сверхпростая логика транзакций, легко понятная реализация, большой простор для настройки параметров.
Гибкость использования данного метода позволяет использовать данные, полученные в течение суток или на высокой частоте, на основных биржах.
В этой стратегии есть определенные риски, которые сосредоточены на следующих аспектах:
Рыночные внезапные события вызывают пробелы или взлеты, не могут быть остановлены и могут привести к большим потерям. Риск может быть снижен путем разумной корректировки коэффициента остановки ATR.
Супертенденциальные показатели не могут быть оценены, что приводит к ошибкам в торговых сигналах. ATR и комбинация параметров супертенденциальных показателей могут быть адаптированы для оптимизации.
Некоторые пропорции позиций, находящихся на низком уровне, не позволяют получить достаточную прибыль от тренда. Пропорции позиций, находящихся на низком уровне, следует корректировать в зависимости от рынка.
Частота торговли может быть слишком высокой или слишком низкой. Параметры супертенденции следует корректировать, чтобы найти оптимальный баланс.
В этой стратегии есть много возможностей для оптимизации, в основном в следующих областях:
Попробуйте различные методы остановки ATR, такие как стандартный ATR, остановка движения, остановка в бурин-поясе и другие методы оптимизации стратегии остановки.
Тестирование сверхтенденциальных показателей с различными параметрами для поиска оптимального сочетания параметров. Многомерная параметровая оптимизация может быть выполнена с использованием пошаговой оптимизации или генетических алгоритмов.
Попытайтесь наложить второй уровень убыточных показателей, таких как Donchian channel, на остановку, чтобы сделать убыток более надежным.
Тестируйте различные соотношения частичного погашения, чтобы найти оптимальный баланс между прибылью и риском. Соотношение частичного погашения также может быть динамически изменено.
Изучение стратегий, основанных на машинном обучении, таких как динамическая остановка, динамическая коррекция положения.
Эта стратегия - это количественная стратегия, основанная на судейском тренде, динамическом остановке ATR, частичном остановке прибыли. Она хорошо балансирует риск-прибыль и подходит для автоматизированной торговли. Эта стратегия может значительно оптимизировать сверхцену, способы остановки, способы прибыли и т. Д. Это количественная стратегия, которая стоит использовать в долгосрочной перспективе.
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
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/
// Developed by © StrategiesForEveryone
//@version=5
strategy("SuperTrend Strategy for BTCUSD 4H", overlay=true, process_orders_on_close = true, initial_capital = 100, default_qty_type = strategy.cash, precision = 2, slippage = 50, commission_value = 0.03, backtest_fill_limits_assumption = 50)
// ------ Date filter (obtained from ZenAndTheArtOfTrading) ---------
initial_date = input(title="Initial date", defval=timestamp("10 Feb 2014 13:30 +0000"), group="Time filter", tooltip="Enter the start date and time of the strategy")
final_date = input(title="Final date", defval=timestamp("01 Jan 2030 19:30 +0000"), group="Time filter", tooltip="Enter the end date and time of the strategy")
dateFilter(int st, int et) => time >= st and time <= et
colorDate = input.bool(defval=false, title="Date background", tooltip = "Add color to the period of time of the strategy tester")
bgcolor(colorDate and dateFilter(initial_date, final_date) ? color.new(color.blue, transp=90) : na)
// ------------ Super Trend ----------
atrPeriod = input(9, "ATR Length SuperTrend")
factor = input.float(2.5, "Factor SuperTrend", step = 0.05)
[supertrend, direction] = ta.supertrend(factor, atrPeriod)
show_supertrend = input.bool(defval = false, title="Show supertrend ?", group = "Appearance")
bodyMiddle = plot(show_supertrend ? ((open + close) / 2) : na, display=display.none)
upTrend = plot(show_supertrend and direction < 0 ? supertrend : na, "Up Trend", color = color.green, style=plot.style_linebr)
downTrend = plot(show_supertrend and direction > 0 ? supertrend : na, "Down Trend", color = color.red, style=plot.style_linebr)
fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)
// ---------- Atr stop loss (obtained from garethyeo)
source_atr = input(close, title='Source', group = "Atr stop loss", inline = "A")
length_atr = input.int(14, minval=1, title='Period', group = "Atr stop loss" , inline = "A")
multiplier = input.float(1.5, minval=0.1, step=0.1, title='Atr multiplier', group = "Atr stop loss", inline = "A", tooltip = "Defines the stop loss distance based on the Atr stop loss indicator")
shortStopLoss = source_atr + ta.atr(length_atr) * multiplier
longStopLoss = source_atr - ta.atr(length_atr) * multiplier
show_atr_stoploss = input.bool(defval=false, title="Show Atr stop loss ?", group = "Appearance")
plot(show_atr_stoploss ? longStopLoss : na, color=color.white, style = plot.style_circles)
plot(show_atr_stoploss ? shortStopLoss : na, color=color.white, style = plot.style_circles)
// ------------- Money management --------------
strategy_contracts = strategy.equity / close
distance_sl_atr_long = -1 * (longStopLoss - close) / close
distance_sl_atr_short = (shortStopLoss - close) / close
risk = input.float(2.5, '% Account risk per trade', step=1, group = "Risk management for trades", tooltip = "Percentage of total account to risk per trade")
long_amount = strategy_contracts * (risk / 100) / distance_sl_atr_long
short_amount = strategy_contracts * (risk / 100) / distance_sl_atr_short
// ---------- Risk management ---------------
risk_reward_breakeven_long= input.float(title="Risk/reward for breakeven long", defval=0.75, step=0.05, group = "Risk management for trades")
risk_reward_take_profit_long= input.float(title="Risk/reward for take profit long", defval=0.75, step=0.05, group = "Risk management for trades")
risk_reward_breakeven_short= input.float(title="Risk/reward for break even short", defval=0.75, step=0.05, group = "Risk management for trades")
risk_reward_take_profit_short= input.float(title="Risk/reward for take profit short", defval=0.75, step=0.05, group = "Risk management for trades")
tp_percent=input.float(title="% of trade for first take profit", defval=50, step=5, group = "Risk management for trades", tooltip = "Closing percentage of the current position when the first take profit is reached.")
// ------------ Trade conditions ---------------
bought = strategy.position_size > 0
sold = strategy.position_size < 0
long_supertrend=ta.crossover(close, supertrend)
short_supertrend=ta.crossunder(close, supertrend)
var float sl_long = na
var float sl_short = na
var float be_long = na
var float be_short = na
var float tp_long = na
var float tp_short = na
if not bought
sl_long:=na
if not sold
sl_short:=na
// ---------- Strategy -----------
// Long position
if not bought and long_supertrend
sl_long:=longStopLoss
long_stoploss_distance = close - longStopLoss
be_long := close + long_stoploss_distance * risk_reward_breakeven_long
tp_long:=close+(long_stoploss_distance*risk_reward_take_profit_long)
strategy.entry('L', strategy.long, long_amount, alert_message = "Long")
strategy.exit("Tp", "L", stop=sl_long, limit=tp_long, qty_percent=tp_percent)
strategy.exit('Exit', 'L', stop=sl_long)
if high > be_long
sl_long := strategy.position_avg_price
strategy.exit("Tp", "L", stop=sl_long, limit=tp_long, qty_percent=tp_percent)
strategy.exit('Exit', 'L', stop=sl_long)
if bought and short_supertrend
strategy.close("L", comment="CL")
// Short position
if not sold and short_supertrend
sl_short:=shortStopLoss
short_stoploss_distance=shortStopLoss - close
be_short:=((short_stoploss_distance*risk_reward_breakeven_short)-close)*-1
tp_short:=((short_stoploss_distance*risk_reward_take_profit_short)-close)*-1
strategy.entry("S", strategy.short, short_amount, alert_message = "Short")
strategy.exit("Tp", "S", stop=sl_short, limit=tp_short, qty_percent=tp_percent)
strategy.exit("Exit", "S", stop=sl_short)
if low < be_short
sl_short:=strategy.position_avg_price
strategy.exit("Tp", "S", stop=sl_short, limit=tp_short, qty_percent=tp_percent)
strategy.exit("Exit", "S", stop=sl_short)
if sold and long_supertrend
strategy.close("S", comment="CS")
// ---------- Draw position on chart -------------
if high>tp_long
tp_long:=na
if low<tp_short
tp_short:=na
if high>be_long
be_long:=na
if low<be_short
be_short:=na
show_position_on_chart = input.bool(defval=true, title="Draw position on chart ?", group = "Appearance", tooltip = "Activate to graphically display profit, stop loss and break even")
position_price = plot(show_position_on_chart? strategy.position_avg_price : na, style=plot.style_linebr, color = color.new(#ffffff, 10), linewidth = 1)
sl_long_price = plot(show_position_on_chart and bought ? sl_long : na, style = plot.style_linebr, color = color.new(color.red, 10), linewidth = 1)
sl_short_price = plot(show_position_on_chart and sold ? sl_short : na, style = plot.style_linebr, color = color.new(color.red, 10), linewidth = 1)
tp_long_price = plot(strategy.position_size>0 and show_position_on_chart? tp_long : na, style = plot.style_linebr, color = color.new(#11eb47, 10), linewidth = 1)
tp_short_price = plot(strategy.position_size<0 and show_position_on_chart? tp_short : na, style = plot.style_linebr, color = color.new(#11eb47, 10), linewidth = 1)
breakeven_long = plot(strategy.position_size>0 and high<be_long and show_position_on_chart ? be_long : na , style = plot.style_linebr, color = color.new(#00ff40, 60), linewidth = 1)
breakeven_short = plot(strategy.position_size<0 and low>be_short and show_position_on_chart ? be_short : na , style = plot.style_linebr, color = color.new(#00ff40, 60), linewidth = 1)
position_profit_long = plot(bought and show_position_on_chart and strategy.openprofit>0 ? close : na, style = plot.style_linebr, color = color.new(#4cd350, 10), linewidth = 1)
position_profit_short = plot(sold and show_position_on_chart and strategy.openprofit>0 ? close : na, style = plot.style_linebr, color = color.new(#4cd350, 10), linewidth = 1)
fill(plot1 = position_price, plot2 = position_profit_long, color = color.new(color.green,90))
fill(plot1 = position_price, plot2 = position_profit_short, color = color.new(color.green,90))
fill(plot1 = position_price, plot2 = sl_long_price, color = color.new(color.red,90))
fill(plot1 = position_price, plot2 = sl_short_price, color = color.new(color.red,90))
fill(plot1 = position_price, plot2 = tp_long_price, color = color.new(color.green,90))
fill(plot1 = position_price, plot2 = tp_short_price, color = color.new(color.green,90))