Основная идея этой стратегии заключается в том, что инвесторы всегда сохраняют фиксированную долю инвестиций в определенном активе в активе. Когда стоимость активов повышается, инвесторы продают часть, чтобы сохранить долю инвестиций; когда стоимость активов падает, инвесторы покупают, чтобы дополнить долю инвестиций.
Сначала нужно установить параметр “%_invested”, то есть долю активов, занимаемых в портфеле. Затем следует скорректировать позиции в соответствии с следующей логикой:
Количество контрактов, которые необходимо купить, исходя из установленной доли инвестирования %_invested и начального капитала initial_capital, когда позиция равна 0.
При хранении позиции сравнить сумму, вложенную в общую долю аккаунта, с процентом инвестированной и установленной доли инвестирования. Если доля инвестированной суммы слишком низка, покупайте контракт, чтобы дополнить долю инвестирования; если доля инвестированной суммы слишком высока, продавайте контракт, чтобы сохранить долю инвестирования.
Repeat шаг 2, чтобы сохранить инвестиционную долю на фиксированном уровне
Относительно стабильные активы можно держать в течение длительного времени, без необходимости часто торговать.
Регулярно корректируйте позиции, чтобы извлечь выгоду из колебаний активов.
Можно рассредоточить инвестиции в несколько не связанных активов, снижая риск портфеля.
Это позволит избежать полного потери позиции и потерять все инвестиции в случае разрыва пузыря.
При более высокой волатильности активов риск потери выше.
Зачастую требуется платить комиссионные за транзакции.
Позиция может быть скорректирована с опозданием, пропустив оптимальный пункт покупки или продажи.
Неправильная установка процентов может привести к чрезмерной торговле.
Риск может быть снижен:
Осторожно выбирайте активы, избегайте высоко волатильных активов.
Оптимизация логики корректировки позиций, снижение частоты торгов.
Установка минимальных единиц изменения позиции, чтобы избежать чрезмерной торговли.
Оптимизация процентной ставки для предотвращения чрезмерной концентрации средств.
Эта стратегия может быть оптимизирована в следующих аспектах:
Добавлена логика остановки убытков, которая автоматически останавливает убытки при снижении цены актива до определенного уровня.
Добавление проверки торговых сигналов для корректировки позиции, чтобы избежать корректировки позиции в не трендовых точках.
Различные параметры, такие как процент инвестиций, стоп-лосс и другие параметры для различных активов.
Добавление модуля оптимизации параметров, который автоматически оптимизирует параметры на основе исторических данных.
Поддержка ликвидации и реинвестирования в другие активы для динамического распределения активов.
Стратегия достигает эффекта дифференцированного инвестирования и контроля риска путем фиксированной инвестиционной доли и применяется для долгосрочного владения стабильными активами. Однако в этой стратегии есть проблемы с отставанием в корректировке позиции, риском инвестирования в рискованные активы и т. Д. Впоследствии можно дополнительно повысить стабильность стратегии путем оптимизации логики остановки убытков, проверки сигналов и т. Д.
/*backtest
start: 2022-09-21 00:00:00
end: 2022-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
// strategy("Fixed Fractioning", overlay=true, initial_capital=100000.0)
percent_invested=input(50.0,title="Percent Invested",maxval=100.0,minval=0.0)
fraction_invested=percent_invested/100
from_day=input(1,title="From Day",maxval=31,minval=1)
from_month=input(1,title="From Month",maxval=12,minval=1)
from_year=input(2017,title="From Year",maxval=2018,minval=1900)
to_day=input(1,title="To Day",maxval=31,minval=1)
to_month=input(1,title="To Month",maxval=12,minval=1)
to_year=input(2018,title="To Year",maxval=2018,minval=1900)
// === FUNCTION EXAMPLE === from: https://www.tradingview.com/script/62hUcP6O-How-To-Set-Backtest-Date-Range/
start = timestamp(from_year, from_month, from_day, 00, 00) // backtest start window
finish = timestamp(to_year, to_month, to_day, 23, 59) // backtest finish window
window() => true // create function "within window of time"
strategy.initial_capital = 50000
if strategy.position_size==0 and window()
contracts_to_buy=(fraction_invested*strategy.initial_capital)/close
strategy.entry("long",long=true,qty=contracts_to_buy,limit=close,when=contracts_to_buy>1)
invested=(strategy.position_size*close)/strategy.equity
if invested<fraction_invested and window()
contracts_to_buy=((fraction_invested-invested)*strategy.equity)/close
strategy.order("long",long=true,qty=contracts_to_buy,limit=close,when=contracts_to_buy>1)
else
if invested>fraction_invested and window()
contracts_to_sell=((invested-fraction_invested)*strategy.equity)/close
strategy.order("sell",long=false,qty=contracts_to_sell,limit=close,when=contracts_to_sell>1)