OBV-Pyramidenstrategie basierend auf Coinrule-Skript

Schriftsteller:ChaoZhang, Datum: 2023-12-08 15:58:29
Tags:

img

Übersicht

Diese Strategie wird OBV Pyramid genannt. Sie entwirft Eröffnungspositionen basierend auf dem OBV-Indikator und verfolgt einen Pyramiden-Ansatz, um Trends für den Gewinn nach deren Entstehung zu verfolgen.

Grundsätze

Diese Strategie verwendet den OBV-Indikator, um die Trendrichtung zu bestimmen. Der OBV-Indikator beurteilt die Preisentwicklungen anhand von Veränderungen des Handelsvolumens, da Veränderungen des Handelsvolumens die Einstellungen der Marktteilnehmer widerspiegeln. Wenn die OBV-Linie über 0 geht, zeigt sie eine Stärkung der Kaufkraft und eine Aufwärtstrendbildung an. Wenn sie unter 0 geht, signalisiert sie eine Stärkung des Verkaufsdrucks und einen Abwärtstrend.

Diese Strategie bestätigt einen Aufwärtstrend, indem der OBV über 0 überschreitet. Wenn sich ein Aufwärtstrend bildet, werden die Pyramiden steigernden Positionsregeln festgelegt, die bis zu 7 zusätzliche Käufe ermöglichen. Ziel ist es, vom Trend zu profitieren, während die Einstellung von Gewinn und Stop-Loss besteht.

Analyse der Vorteile

Der größte Vorteil dieser Strategie besteht darin, Trends mit dem Pyramidenansatz zu erfassen, um Trends zu verfolgen und von ihnen zu profitieren.

Die wichtigsten Vorteile sind insbesondere:

  1. Genaue Trendbeurteilung unter Verwendung von OBV;
  2. Pyramidenkäufe zur Verfolgung von Gewinntrends;
  3. Die Risikopositionen werden in der Tabelle 1 aufgeführt.
  4. Einfache und klare Logik.

Risikoanalyse

Die wichtigsten Risiken liegen in zweierlei Hinsicht:

  1. Ungenaue OBV-Signale, die zu verpassten Gelegenheiten oder falschen Einträgen führen;
  2. Zu viele zusätzliche Käufe erhöhen das Risiko.

Lösungen:

  1. Optimierung der OBV-Parameter zur Gewährleistung der Genauigkeit;
  2. Um ein kontrollierbares Risiko zu gewährleisten, ist es angemessen, zusätzliche Einkäufe zu begrenzen.

Optimierungsrichtlinien

Hauptoptimierungsrichtungen:

  1. Optimierung der OBV-Parameter für eine höhere Genauigkeit;
  2. Optimierung der Anzahl der zusätzlichen Einkäufe und Beträge;
  3. Gewinn-/Stop-Loss-Optimierung;
  4. Einbeziehung anderer Indikatoren, um eine ausschließliche Abhängigkeit von OBV zu vermeiden.

Dies kann die Strategie stabiler, kontrollierbarer und erweiterbarer machen.

Schlussfolgerung

Insgesamt ist dies eine sehr praktische Strategie. Es verwendet OBV, um die Trendrichtung zu bestimmen, dann Pyramiden in den Trend für den Gewinn. Die Logik ist einfach und klar für einfaches Backtesting. Es hat Anwendbarkeitswert und mit weiterer Parameter-, Risiko- und Geldmanagementoptimierung kann die Leistung weiter verbessert werden, was zusätzliche Forschung rechtfertigt.


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


Mehr