Стратегия пирамиды OBV на основе скрипта Coinrule

Автор:Чао Чжан, Дата: 2023-12-08 15:58:29
Тэги:

img

Обзор

Эта стратегия называется OBV Pyramid. Она разрабатывает открытие позиций на основе индикатора OBV и использует подход пирамиды увеличения позиций для отслеживания тенденций для получения прибыли после их появления.

Принципы

Эта стратегия использует индикатор OBV для определения направления тренда. Индикатор OBV оценивает ценовые тенденции на основе изменений объема торговли, поскольку изменения объема отражают отношение участников рынка. Когда линия OBV пересекает выше 0, она указывает на усиление покупательной способности и формирование восходящего тренда. Когда она пересекает ниже 0, она сигнализирует о усилении давления на продажу и нисходящем тренде.

Эта стратегия подтверждает восходящий тренд путем пересечения OBV выше 0, когда формируется восходящий тренд, устанавливаются правила повышения позиции пирамиды, позволяющие до 7 дополнительных покупок.

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

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

В частности, основными преимуществами являются:

  1. Точная оценка тенденции с использованием OBV;
  2. Пирамида покупок для отслеживания тенденций для получения прибыли;
  3. Контролирующий риск прибыли/остановки убытков;
  4. Простая и ясная логика.

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

Основные риски исходят из двух аспектов:

  1. Неточные сигналы OBV, приводящие к упущенным возможностям или ошибочным записям;
  2. Слишком много дополнительных покупок увеличивает риск.

Решения:

  1. оптимизировать параметры OBV для обеспечения точности;
  2. Разумно ограничить дополнительные покупки для контролируемого риска.

Руководство по оптимизации

Основные направления оптимизации:

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

Это может сделать стратегию более стабильной, контролируемой и расширяемой.

Заключение

В целом это очень практичная стратегия. Она использует OBV для определения направления тренда, а затем пирамиды в тренд для получения прибыли. Логика проста и ясна для легкого бэкстестинга. Она имеет значение применимости и с дальнейшей оптимизацией параметров, рисков и управления деньгами производительность может улучшиться, что требует дополнительных исследований.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-12-07 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/
// © RafaelZioni

//@version=4

strategy(title = " OBV Pyr", overlay = true, pyramiding=5,initial_capital = 10000, default_qty_type= strategy.percent_of_equity, default_qty_value = 20, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.075)
strat_dir_input = input(title="Strategy Direction", defval="long", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)

//
fastLength = input(250, title="Fast filter length ", minval=1)
slowLength = input(500,title="Slow filter length",  minval=1)
source=close
v1=ema(source,fastLength)
v2=ema(source,slowLength)
 
//
 
filter=true 
src = close


LengthOBV = input(20)

nv = change(src) > 0 ? volume : change(src) < 0 ? -volume : 0*volume 
c = cum(nv) 
c_tb = c - sma(c,LengthOBV) 

// Conditions

longCond = crossover(c_tb,0)
//shortCond =crossunder(cnv_tb,0)

//

longsignal  = (v1 > v2 or filter == false ) and longCond
//shortsignal = (v1 < v2 or filter == false ) and shortCond 
 
//set take profit
 
ProfitTarget_Percent = input(3)
Profit_Ticks = close * (ProfitTarget_Percent / 100) / syminfo.mintick
 
//set take profit
 
LossTarget_Percent = input(10)
Loss_Ticks = close * (LossTarget_Percent / 100) / syminfo.mintick
 
 
////Order Placing
//
strategy.entry("Entry 1", strategy.long, when=strategy.opentrades == 0 and longsignal)
//
strategy.entry("Entry 2", strategy.long, when=strategy.opentrades == 1 and longsignal)
//
strategy.entry("Entry 3", strategy.long, when=strategy.opentrades == 2 and longsignal)
//
strategy.entry("Entry 4", strategy.long, when=strategy.opentrades == 3 and longsignal)
//
strategy.entry("Entry 5", strategy.long, when=strategy.opentrades == 4 and longsignal)
//
strategy.entry("Entry 6", strategy.long, when=strategy.opentrades == 5 and longsignal)
//
strategy.entry("Entry 7", strategy.long, when=strategy.opentrades == 6 and longsignal)
//
//
//
if strategy.position_size > 0
    strategy.exit(id="Exit 1", from_entry="Entry 1", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 2", from_entry="Entry 2", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 3", from_entry="Entry 3", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 4", from_entry="Entry 4", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 5", from_entry="Entry 5", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 6", from_entry="Entry 6", profit=Profit_Ticks, loss=Loss_Ticks)
    strategy.exit(id="Exit 7", from_entry="Entry 7", profit=Profit_Ticks, loss=Loss_Ticks)
    


Больше