Volumenenergieorientierte Strategie

Schriftsteller:ChaoZhang, Datum: 2024-01-04 15:38:54
Tags:

img

Übersicht

Die Volumenenergie-getriebene Strategie beurteilt die Stimmungsschwankungen der Marktteilnehmer durch Analyse der Veränderungen des Handelsvolumens. Sie teilt das Handelsvolumen in bullisches und bärisches Volumen, berechnet ihren gewichteten gleitenden Durchschnitt, erzeugt bullische Signale, wenn bullisches Volumen dominiert, und erzeugt bärische Signale, wenn bärisches Volumen dominiert.

Strategie Logik

Die Strategie teilt zunächst das Handelsvolumen jeder Kerze in ein bullisches Volumen und ein bärisches Volumen, basierend auf der Beziehung zwischen dem Schlusskurs und dem Eröffnungskurs. Wenn der Schlusskurs größer ist als der Eröffnungskurs, ist das gesamte Handelsvolumen der Kerze bullisches Volumen. Wenn der Schlusskurs kleiner ist als der Eröffnungskurs, wird das bullische Volumen nach dem Verhältnis (höchster Preis - Eröffnungskurs) / (höchster Preis - niedrigster Preis) berechnet, und der Rest ist ein bärisches Volumen.

Wenn der gleitende Durchschnitt des bullischen Volumens größer ist als das bärische Volumen und ihre Differenz durch das bullische Volumen größer ist als eine vorgegebene Schwelle, wird ein bullisches Signal generiert.

Es wird auch ein Basiswert mit durchschnittlichem Handelsvolumen festgelegt, um Konsolidierungszonen zu identifizieren.

Analyse der Vorteile

  • Verwenden von Volumeninformationen zur Beurteilung der Stimmung der Marktteilnehmer mit theoretischer Grundlage
  • Automatische Identifizierung von Konsolidierungszonen, um wichtige Signale zu vermeiden
  • Anpassbare Parameter passen sich an verschiedene Handelsprodukte und Zeitrahmen an
  • Kann Aufwärts- und Abwärtssignale getrennt erkennen oder nur einer Seite folgen

Risikoanalyse

  • Handelsvolumendaten können manipuliert werden
  • Standardparameter sind möglicherweise nicht für alle Produkte geeignet, eine Optimierung ist erforderlich
  • Unzulässige Konsolidierungserkennungsparameter können Signale verfehlen
  • Falsche Signale können in kurzen Zeitabständen auftreten

Methoden wie die Optimierung von Parametern und die Kombination mit anderen Indikatoren können dazu beitragen, Risiken zu verringern.

Optimierungsrichtlinien

  • Versuche verschiedene Methoden zur Berechnung des Handelsvolumens
  • Versuchen Sie verschiedene Arten von gleitenden Durchschnitten, wie EMA, SMMA usw.
  • Optimierung des Zeitraums der Berechnung des durchschnittlichen Volumens
  • Optimierung der Parameter zur Ermittlung der Konsolidierung
  • Kombination mit anderen technischen Indikatoren zur Filterung von Signalen

Zusammenfassung

Die Volumenenergie-getriebene Strategie beurteilt intelligent die Verteilung des bullischen und bärischen Handelsvolumens, um die Marktstimmung und Trendänderungen zu bestimmen. Sie kann allein oder in Kombination mit anderen Strategien verwendet werden. Weitere Verbesserungen der Stabilität und Rentabilität können durch Parameteroptimierung und Indikatorenkombination erzielt werden.


/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 00:00:00
period: 1d
basePeriod: 1h
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/
// © Shuttle_Club
//@version=5

strategy('Volume fight strategy', default_qty_type=strategy.cash, default_qty_value=10000, currency='USD', commission_value=0.04, calc_on_order_fills=false, calc_on_every_tick=false, initial_capital=10000)

direction = input.string('ANY', 'Direction', options=['LONG', 'SHORT', 'ANY'], tooltip='Select the direction of trade.\n\nВыберите направление торговли.')
ma = input.int(11, 'Search_range', minval=1, tooltip='The range of estimation of the predominance of bullish or bearish volume (quantity bars). The smaller the TF, the higher the range value should be used to filter out false signals.\n\nДиапазон оценки преобладания бычьего или медвежьего объема (количество баров). Чем меньше ТФ, тем выше следует использовать значение диапазона, чтобы отфильтровать ложные сигналы.')
delta = input.float(15, 'Smoothing_for_flat,%', step=0.5, minval=0, tooltip='Smoothing to reduce false signals and highlight the flat zone. If you set the percentage to zero, the flat zones will not be highlighted, but there will be much more false signals, since the indicator becomes very sensitive when the smoothing percentage decreases.\n\nСглаживание для уменьшения ложных сигналов и выделения зоны флета. Если выставить процент равным нулю, то зоны флета выделяться не будут, но будет гораздо больше ложных сигналов, так как индикатор становится очень чувствительным при снижении процента сглаживания')
bgshow = input.bool(true, 'Show background zones', tooltip='Show the color background of the current trading zone.\n\nПоказывать цветовой фон текущей торговой зоны.')
all_signal_show = input.bool(false, 'Show each setup in zone', tooltip='Show every signals into trading zone.\n\nПоказывать каждый сигнал внутри торговой зоны.')

/////   CALCULATION
bull_vol = open < close ? volume : volume * (high - open) / (high - low)  //determine the share of bullish volume
bear_vol = open > close ? volume : volume * (open - low) / (high - low)  //determine the share of bearish volume
avg_bull_vol = ta.vwma(bull_vol, ma)  //determine vwma
avg_bear_vol = ta.vwma(bear_vol, ma)
diff_vol = ta.sma(avg_bull_vol / volume - 1 - (avg_bear_vol / volume - 1), ma)  //normalize and smooth the values
vol_flat = math.abs(avg_bull_vol + avg_bear_vol) / 2  //determine average value for calculation flat-filter

/////   SIGNALS
up = int(na), up := nz(up[1])
dn = int(na), dn := nz(dn[1])
bull = avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100  //determine up zones
bear = avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100  //determine dn zones

if bull
    up += 1, dn := 0
    dn
if bear
    dn += 1, up := 0
    up
if not bull and not bear and all_signal_show
    up := 0, dn := 0
    dn

/////   PLOTTING
plotshape(bull and up == 1, 'UP', location=location.bottom, style=shape.triangleup, color=color.new(color.green, 0), size=size.tiny)
plotshape(bear and dn == 1, 'DN', location=location.top, style=shape.triangledown, color=color.new(color.red, 0), size=size.tiny)
bgcolor(title='Trading zones', color=bgshow and avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 85) : bgshow and avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 85) : na)
plot(diff_vol, 'Volume difference', style=plot.style_area, color=avg_bull_vol > avg_bear_vol and vol_flat / avg_bull_vol < 1 - delta / 100 ? color.new(color.green, 0) : avg_bull_vol < avg_bear_vol and vol_flat / avg_bear_vol < 1 - delta / 100 ? color.new(color.red, 0) : color.new(color.gray, 50))

strategy.close('Short', comment='close', when=bull and up == 1)
strategy.close('Long', comment='close', when=bear and dn == 1)
strategy.entry('Long', strategy.long, when=direction != 'SHORT' and bull and up == 1)
strategy.entry('Short', strategy.short, when=direction != 'LONG' and bear and dn == 1)

if bull and up==1
    alert('Bullish movement! LONG trading zone', alert.freq_once_per_bar_close)
if bear and dn==1
    alert('Bearish movement! SHORT trading zone', alert.freq_once_per_bar_close)
    

Mehr