Стратегия отслеживания динамического процентного поля


Дата создания: 2023-11-23 10:32:39 Последнее изменение: 2023-11-23 10:32:39
Копировать: 1 Количество просмотров: 605
1
Подписаться
1617
Подписчики

Стратегия отслеживания динамического процентного поля

Обзор

Эта стратегия использует процентное изменение цены, чтобы установить линию покупки и линию остановки, чтобы построить позицию в соответствии с ценой, которая преодолевает линию покупки, и остановить ее под линией остановки. Основная ее особенность заключается в том, что она несет только одну единицу риска, то есть только после того, как предыдущая позиция достигнет заданной цели прибыли.

Стратегический принцип

Стратегия сначала устанавливает базовую цену, с 10% этой цены в качестве ценового диапазона, верхний край - это линия покупки, а нижний край - линия остановки. Когда цена пробивает линию покупки, покупайте в фиксированном количестве.

Еще одним ключевым моментом этой стратегии является то, что риски принимаются только за одну единицу. То есть, только после того, как текущая позиция достигнет целевой прибыли, новые позиции будут добавлены. Новые позиции также будут настроены на новую линию покупки и линию остановки.

Анализ преимуществ

Эта стратегия сочетает в себе преимущества отслеживания стоп-лосс и управления запасами, позволяя эффективно контролировать риски и получать прибыль.

  1. Процесс автоматического отслеживания трендов с использованием процентных интервалов для установки линий “buy” и “stop”
  2. Ограничение риска и убытков
  3. Положите только после получения прибыли, чтобы избежать убыли
  4. После получения прибыли перемещаются на линию остановки, блокируя прибыль.

Анализ рисков

Однако эта стратегия также несет в себе некоторые риски:

  1. Процентная разница слишком большая, линия покупки и линия остановки слишком далеко друг от друга, риск увеличивается
  2. Процентный диапазон слишком мал, линия покупки и линия остановки слишком близки, и пространство для прибыли ограничено
  3. Неправильная настройка преимущества остановки может привести к преждевременному потере прибыли
  4. Слишком радикальное наращивание позиций может привести к увеличению убытков

Эти риски можно избежать путем корректировки параметров, таких как корректировка размера процентного интервала, корректировка условий набора и т. д.

Направление оптимизации

В этой стратегии есть место для дальнейшей оптимизации:

  1. Положение может быть создано только после определения направления тренда в сочетании с индикаторами тренда.
  2. Добавление моделей машинного обучения, чтобы сделать линию покупки и линию остановки более интеллектуальной
  3. Можно установить различные условия наложения, чтобы снизить риск.
  4. Можно тестировать различные периоды хранения позиций, чтобы найти оптимальный период

Подвести итог

Это стратегия для торговли с использованием процентного диапазона. Она проста, практична и эффективно контролирует риск. С помощью корректировки параметров и оптимизации модели эта стратегия может стать надежной системой отслеживания тенденций, создавая стабильную прибыль для инвесторов.

Исходный код стратегии
/*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)