Estratégia de pirâmide OBV baseada no script Coinrule

Autora:ChaoZhang, Data: 2023-12-08 15:58:29
Tags:

img

Resumo

Esta estratégia é chamada OBV Pyramid. Ela projeta posições de abertura com base no indicador OBV e adota uma abordagem de posição crescente de pirâmide para rastrear tendências para lucro depois que surgem.

Princípios

Esta estratégia usa o indicador OBV para determinar a direção da tendência. O indicador OBV julga as tendências de preços com base em mudanças no volume de negociação, pois as mudanças no volume refletem as atitudes dos participantes do mercado. Quando a linha OBV cruza acima de 0, indica fortalecimento do poder de compra e uma formação de tendência de alta. Quando cruza abaixo de 0, sinaliza fortalecimento da pressão de venda e uma tendência de queda.

Esta estratégia confirma uma tendência de alta pela OBV cruzando acima de 0. Quando uma tendência de alta se forma, as regras de posição crescente da pirâmide são definidas, permitindo até 7 compras adicionais.

Análise das vantagens

A maior vantagem desta estratégia é a captação de tendências usando a abordagem da pirâmide para rastrear tendências e lucrar com elas.

Especificamente, as principais vantagens são:

  1. Julgamento preciso da tendência utilizando o OBV;
  2. Aquisição piramidal para rastrear tendências de lucro;
  3. O risco de controlo do lucro/paragem de perdas;
  4. Lógica simples e clara.

Análise de riscos

Os principais riscos derivam de dois aspectos:

  1. Sinais OBV imprecisos que conduzem a oportunidades perdidas ou a entradas erradas;
  2. Muitas compras adicionais aumentam o risco.

Soluções:

  1. Otimizar os parâmetros do OBV para garantir a precisão;
  2. Limitar razoavelmente as compras adicionais para um risco controlado.

Orientações de otimização

Principais direcções de otimização:

  1. Optimização dos parâmetros do OBV para maior precisão;
  2. Otimizar o número de compras e montantes adicionais;
  3. Optimização de lucro/stop loss;
  4. Incorporar outros indicadores para evitar a dependência exclusiva do OBV.

Isto pode tornar a estratégia mais estável, controlada e extensivel.

Conclusão

Em geral, esta é uma estratégia muito prática. Ele usa OBV para determinar a direção da tendência, em seguida, as pirâmides na tendência para o lucro. A lógica é simples e clara para fácil backtesting.


/*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)
    


Mais.