Strategie mit niedrigem und hohem Trend

Schriftsteller:ChaoZhang, Datum: 2023-11-23 11:03:18
Tags:

img

Übersicht

Diese Strategie basiert auf dem Marktprinzip, niedrig zu kaufen und hoch zu verkaufen. Sie verfolgt die höchsten und niedrigsten Preise über einen bestimmten Zeitraum, stellt eine Long-Position ein, wenn der Preis den niedrigsten Preis durchbricht, und schließt die Position, wenn der Preis unter den höchsten Preis fällt oder die Gewinnbedingung erfüllt ist. Gleichzeitig fügt diese Strategie einen optionalen Trendfilter hinzu, der nur den Kauf erlaubt, wenn der Preis in einem Aufwärtstrend ist.

Strategie Logik

Berechnung des höchsten und des niedrigsten Preises

  • Niedrigster Preis (lowcriteria): Die Funktion ta.lowest wird aufgerufen, um den niedrigsten Preis über den vom Benutzer festgelegten Rückblickzeitraum (standardmäßig 20 Balken) zu berechnen und die niedrigste Preislinie zu ermitteln.

  • Höchster Preis (höchste Kriterien): Die Funktion ta.highest wird aufgerufen, um den höchsten Preis über den vom Benutzer festgelegten Rückblickzeitraum zu berechnen (Standard 10 Balken) und die höchste Preislinie zu zeichnen.

Eintrittssignal

Wenn der aktuelle Preis die niedrigste Preislinie durchbricht, wird ein Kaufsignal ausgelöst, um eine Long-Position zu etablieren.

Ausfahrtssignal

Für die Option sind zwei Ausgangsmethoden vorgesehen:

  1. Festverzinsung: Schließen der Position für den Gewinn, wenn der Preis die vorgegebene Verzinsung erreicht (z. B. 8% über dem Einstiegspreis).

  2. Aufschlüsselung des höchsten Preises: Schließen der Position, um Verluste zu reduzieren, wenn der Preis unter die höchste Preislinie fällt, wenn eine Trendwende zu erwarten ist.

Trendfilter

Fügen Sie eine EMA-Linie hinzu, um die Trendrichtung zu bestimmen. Ermöglichen Sie den Kauf nur, wenn der Preis über der EMA-Linie liegt (ein Aufwärtstrend). Dieser Filter kann aktiviert oder deaktiviert werden.

Analyse der Vorteile

  • Die klassische Strategie, niedrig zu kaufen und hoch zu verkaufen, entsprechend den Grundlagen des Marktes.

  • Hinzufügen von Trendbeurteilungen, um häufiges Öffnen bei Preisschwankungen zu vermeiden.

  • Bereitstellen Sie zwei Ausgangsmöglichkeiten, um hohe Gewinne zu erzielen oder Verluste zu reduzieren.

  • Anpassungsfähige Parameter passen sich mehr Marktumgebungen an.

  • Großer Raum für die Optimierung der Strategie durch Parameter-Tuning, Filterdesign usw.

Risikoanalyse

  • Die festgelegte Gewinnspanne ändert sich nicht anhand der tatsächlichen Marktbewegungen, was zu einer vorzeitigen Gewinnspanne oder zu einem unzureichenden Gewinnziel führt.

  • Der Verkauf zum höchsten Preis kann bereits zu enormen Verlusten führen, da die Verluste nicht wirksam kontrolliert werden können.

  • Die EMA-Trendbeurteilung blickt nur auf einen bestimmten Zeitraum zurück, möglicherweise hinter der tatsächlichen Trendänderung zurück.

  • Die Ergebnisse der Backtests können nicht die Zukunft repräsentieren.

Optimierungsrichtlinien

  • Um die Gewinnspanne dynamisch anzupassen, werden Profit-Taking-Methoden wie Trailing Stop, partieller Exit usw. hinzugefügt.

  • Optimierung der Ausfahrtssignale, z. B. teilweise Ausfahrten, durch Hinzufügen anderer Indikatoren.

  • Verbessern Sie die Beurteilung von Trends, indem Sie mehr Indikatoren oder maschinelles Lernen integrieren.

  • Optimieren Sie die Parameter durch umfangreichere Backtests, um optimale Sätze zu finden.

  • Hinzufügen von Stop-Loss-Methoden, um Verluste besser zu kontrollieren.

Zusammenfassung

Diese Strategie wendet im Allgemeinen das klassische Prinzip des niedrigen Kaufs und des hohen Verkaufs an und kann unter bestimmten Bedingungen gut funktionieren. Aber es gibt immer noch Raum für Verbesserungen durch Parameter-Tuning, Exit-Optimierung, Stop-Loss-Mechanismen usw. Dieser Artikel bietet eine eingehende Analyse der Logik, Vor- und Nachteile und Optimierungsrichtungen der Strategie, mit dem Ziel, die Strategieidee zu teilen und Investoren an die Risiken zu erinnern und mit quantitativen Strategien vorsichtig zu handeln.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 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/
// @version=5
// Author = TradeAutomation


strategy(title="Low-High-Trend Strategy", shorttitle="Low-High-Trend Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_order, commission_value=1, slippage=3, initial_capital = 25000, margin_long=50, margin_short=50, default_qty_type=strategy.percent_of_equity, default_qty_value=110)


// Backtest Date Range Inputs // 
StartTime = input(defval=timestamp('01 Jan 2000 05:00 +0000'), title='Start Time')
EndTime = input(defval=timestamp('01 Jan 2099 00:00 +0000'), title='End Time')
InDateRange = true

// Strategy Calculations //
lowcriteria = ta.lowest(close, input(20, "Lowest Price Lookback", tooltip="The strategy will BUY when the price crosses over the lowest it has been in the last X amount of bars"))[1]
highcriteria = ta.highest(close, input(10, "Highest Price Lookback", tooltip="If Take-Profit is not checked, the strategy will SELL when the price crosses under the highest it has been in the last X amount of bars"))[1]
plot(highcriteria, color=color.green)
plot(lowcriteria, color=color.red)

// Take Profit //
TakeProfitInput = input(true, "Sell with Take-Profit % intead of highest price cross?")
TakeProfit = ta.crossover(close,strategy.position_avg_price*(1+(.01*input.float(8, title="Take Profit %", step=.25))))

// Operational Functions //
TrendFilterInput = input(true, "Only buy when price is above EMA trend?")
ema = ta.ema(close, input(200, "EMA Length"))
TrendisLong = (close>ema)
plot(ema)

// Entry & Exit Functions//
if (InDateRange and TrendFilterInput==true)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria) and TrendisLong)
if (InDateRange and TrendFilterInput==false)
    strategy.entry("Long", strategy.long, when = ta.crossover(close, lowcriteria))
if (InDateRange and TakeProfitInput==true)
    strategy.close("Long", when = TakeProfit)
if (InDateRange and TakeProfitInput==false)
    strategy.close("Long", when = ta.crossunder(close, highcriteria))
if (not InDateRange)
    strategy.close_all()
    

Mehr