Эта стратегия использует процентные изменения цен для установки линий входа и линий стоп-лосса. Она входит в позиции, когда цены проходят через линию входа, и выходит из позиций, когда цены опускаются ниже линии стоп-лосса.
Стратегия сначала устанавливает ориентировочную цену и использует 10% этой цены в качестве диапазона цен - верхняя граница - это линия входа, а нижняя граница - линия остановки. Когда цены проходят через линию входа, будут куплены фиксированные количества. Когда цены опускаются ниже линии остановки, позиции будут закрыты. После получения прибыли, линии входа и остановки будут скорректированы в процентах для расширения диапазона прибыли. Это позволяет стратегии отслеживать тренд.
Другой ключевой момент стратегии заключается в том, что она принимает только одну единицу риска. То есть новые позиции будут добавлены только после того, как текущая позиция достигнет целевой прибыли. Новые позиции также будут следовать новым линиям входа и остановки потерь. Это ограничивает риск.
Эта стратегия сочетает в себе преимущества отставания и размещения позиций, что позволяет эффективно контролировать риск и при этом быть прибыльной.
Существуют также некоторые риски:
Эти риски можно избежать путем корректировки таких параметров, как размеры диапазона, фильтры входа и т. д.
Есть возможности для дальнейшей оптимизации:
Это простая и практичная система, основанная на процентном диапазоне. Благодаря настройке параметров и оптимизации модели эта стратегия может стать надежным инструментом отслеживания трендов, генерируя стабильную выгоду для инвесторов.
/*backtest start: 2022-11-16 00:00:00 end: 2023-11-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © HermanBrummer 4 April 2021 strategy ("The Box Percent Strat", shorttitle="The Box", overlay = true) /// Designed for LONG only on Daily, 2D or 3D Charts /// Uses fixed investment risk amount, meaning you're willing to lose that amount per trade /// Limit buy to not overpay RiskPerTrade = input(10000, "Risk losing this much per trade", tooltip="This calculates how much you will lose based on difference between the entry price and stop loss price") TradeAboveMAFilterPer = input(50, "The System won't trade if price is below this MA") UpBoxSize = (input(10, "Box size in %") * 0.01)+1 // 1.1 == 10% up DnBoxSize = 1-(input(10, "Box size in %") * 0.01) // 0.9 == 10% dn var FirstBar = close > 0 ? close : na var FirstTop = FirstBar * UpBoxSize var FirstBot = FirstBar * DnBoxSize var top = sma(FirstTop, 1) var bot = sma(FirstBot, 1) /// The Box Calcs if high[2] > top top := top * UpBoxSize bot := bot * UpBoxSize if low[1] < bot top := top * DnBoxSize bot := bot * DnBoxSize plot(bot, "Bot", #ff0000) // Green plot(top, "Top", #00ff00) // Red mid = ((top-bot)/2)+bot plot(mid, "Mid", color.gray) TradeAboveMAFilter = sma(close, TradeAboveMAFilterPer) plot(TradeAboveMAFilter, "Trade AboveMAF Filter", color.yellow, 3, style=plot.style_circles) // col = high[1] < top and high >= top ? color.white : na // bgcolor(col) /// Shares RiskRange = close * abs(DnBoxSize - 1) // 0.9 - 1 == 1.10 // 10% abs so you don't get a neg number NB NB Shares = RiskPerTrade / RiskRange //plot(close-RiskRange, "RiskRange", color.fuchsia) Enter = high >= top and close[1] > TradeAboveMAFilter and strategy.opentrades[0] == strategy.opentrades[1] and strategy.opentrades[1] == strategy.opentrades[2] and strategy.opentrades[2] == strategy.opentrades[3] and strategy.opentrades[3] == strategy.opentrades[4] and strategy.opentrades[4] == strategy.opentrades[5] and strategy.opentrades[5] == strategy.opentrades[6] // won't enter if new positon was taken in the last 6 bars // need better code for this. /// Buy & Sell // (new highs) and (Close above moving average filter) and (No new trades were taken receently) if Enter //(high >= top) and (close[1] > TradeAboveMAFilter) and strategy.opentrades[0] == strategy.opentrades[1] strategy.order("En", strategy.long, qty=Shares, limit=top)//, stop=top) //barcolor(strategy.position_size != 0 ? #00ff00 : color.gray) // /// If ONE Position THEN this Stop Because: // if strategy.position_size == 1 // strategy.exit("Ex", "En", stop=bot) /// If it has more than one trad OPEN if strategy.position_size > 0 strategy.exit("Ex", "En", stop=bot[2] ) // puts stop on old bot //plot(strategy.position_avg_price, "Avg Price", color.yellow)