Les ressources ont été chargées... Je charge...

Stratégie de pyramide OBV basée sur le script Coinrule

Auteur:ChaoZhang est là., Date: le 12 août 2023
Les étiquettes:

img

Résumé

Cette stratégie s'appelle OBV Pyramid. Elle conçoit des positions d'ouverture basées sur l'indicateur OBV et adopte une approche de position en hausse pyramidale pour suivre les tendances pour le profit après leur apparition.

Principaux

Cette stratégie utilise l'indicateur OBV pour déterminer la direction de la tendance. L'indicateur OBV juge les tendances des prix en fonction des changements de volume des transactions, car les changements de volume reflètent les attitudes des participants au marché. Lorsque la ligne OBV dépasse 0, elle indique un renforcement du pouvoir d'achat et une tendance haussière.

Cette stratégie confirme une tendance à la hausse par le passage de l'OBV au-dessus de 0. Quand une tendance à la hausse se forme, des règles de position en hausse pyramidale sont définies, permettant jusqu'à 7 achats supplémentaires.

Analyse des avantages

Le plus grand avantage de cette stratégie est de capturer les tendances en utilisant l'approche pyramidale pour suivre les tendances et en tirer profit.

Les principaux avantages sont les suivants:

  1. un jugement précis de la tendance à l'aide d'un OBV;
  2. achats pyramidaux pour suivre les tendances en vue de réaliser des bénéfices;
  3. Le risque de prise de contrôle des bénéfices/arrêt des pertes;
  4. Une logique simple et claire.

Analyse des risques

Les principaux risques proviennent de deux aspects:

  1. des signaux OBV inexacts entraînant des occasions manquées ou des entrées erronées;
  2. Trop d'achats supplémentaires augmente le risque.

Les solutions:

  1. Optimiser les paramètres OBV pour assurer leur exactitude;
  2. Limiter raisonnablement les achats supplémentaires pour un risque contrôlable.

Directions d'optimisation

Principales directions d'optimisation:

  1. Optimisation des paramètres OBV pour une plus grande précision;
  2. Optimisation du nombre et des montants des achats supplémentaires;
  3. Optimisation des bénéfices/arrêt des pertes;
  4. Incorporation d'autres indicateurs afin d'éviter la dépendance exclusive des OBV.

Cela peut rendre la stratégie plus stable, contrôlable et extensible.

Conclusion

Dans l'ensemble, il s'agit d'une stratégie très pratique. Elle utilise l'OBV pour déterminer la direction de la tendance, puis les pyramides dans la tendance pour le profit. La logique est simple et claire pour un backtesting facile.


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


Plus de