Strategie für den Trend-Identifikator von MyQuant

Schriftsteller:ChaoZhang, Datum: 2024-02-22 16:04:04
Tags:

img

Übersicht

Die MyQuant Trend Identifier Strategie ist eine Strategie für den täglichen Bitcoin-Handel. Sie identifiziert Markttrends durch Berechnung des gleitenden Durchschnitts und seiner Erst- und Zweitorder-Derivate des Preises und trifft entsprechend Kauf- und Verkaufsentscheidungen.

Strategieprinzip

Die Strategie berechnet zunächst den Adaptive Moving Average (ALMA) des Preises und seiner ersten Ordnung und zweiter Ordnung Derivate. Die erste Ordnung Derivat spiegelt die Rate der Veränderung des Preises, und die zweite Ordnung Derivat spiegelt die Krümmung des Preises. Es beurteilt dann den aktuellen Trend aufwärts, nach unten oder schwankend basierend auf den Werten der ersten und zweiten Ordnung Derivate. Kombiniert mit Aktienindikatoren, bestimmt es, ob die Kauf- oder Verkaufsbedingungen erfüllt sind.

Insbesondere werden in der Strategie folgende Indikatoren berechnet:

  • ALMA: Adaptiver gleitender Durchschnitt des Preises, Länge 140, schneller Faktor 1.1, Sigma 6
  • dema: Ersterordentlicher Derivat von ALMA
  • d2ema: Erstordentliche Derivate von dema, die die zweitordentliche Derivate des Preises widerspiegeln
  • Index: Schwingungsindex des Dema-Indikators
  • Ind: Index der Abweichung des Preises von seinem gleitenden Durchschnitt

Wenn die Kaufbedingung erfüllt ist, berechnet sie die Anzahl der zu kaufenden Aktien anhand der Signale von CAUSED Accumulation/Distribution Bands und Caused Exposure Top and Bottom Finder.

Vorteile der Strategie

Durch die Kombination von Trend- und Indikatorurteilen kann diese Strategie Wendepunkte in den Markttrends effektiv identifizieren. Die Verwendung von Preisderivaten erster und zweiter Ordnung zur Bestimmung von Trends vermeidet die Auswirkungen von Kursschwankungen und macht die Signale klarer. Im Vergleich zu gängigen gleitenden Durchschnittsstrategien hat sie Vorteile wie höhere Genauigkeit.

Risikoanalyse

Diese Strategie ist sehr empfindlich gegenüber der Auswahl der Handelszeit und Parameteranpassungen. Wenn die Zeitspanne falsch ausgewählt wird und wichtige Kurswendepunkte nicht abgedeckt werden, wird die Strategie nicht sehr effektiv sein. Wenn die Indikatorparameter falsch eingestellt sind, werden die Kauf- und Verkaufssignale stärker von Lärm beeinflusst, was sich auf die Strategierendite auswirkt. Darüber hinaus beeinflussen die in der Strategie vorgegebenen Stop-Loss-Bedingungen auch die endgültigen Renditen.

Richtungen für die Optimierung

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Optimieren Sie die Logik für die Auswahl von Zeiträumen durch eine intelligentere Auswahl von Backtest- und Live-Handelszeiten.
  2. Optimierung der Indikatorparameter, z. B. Anpassung der Länge von ALMA und dema usw.
  3. Zusätzliche Stop-Loss-Bedingungen zur Kontrolle der maximalen Verluste.
  4. Beurteilen Sie die Auswirkungen verschiedener Kryptowährungen und wählen Sie die, die am besten funktionieren.

Schlussfolgerung

Durch die Berechnung der Erst- und Zweitorder-Derivate des adaptiven gleitenden Durchschnitts der Preise identifiziert die MyQuant Trend Identifier Strategie effektiv die Markttrends für Bitcoin und trifft entsprechende Kauf- und Verkaufsentscheidungen.


/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 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/
// © spacekadet17
// 
//@version=5

strategy(title="Trend Identifier Strategy", shorttitle="Trend Identifier Strategy", format=format.price, precision=4, overlay = false, initial_capital = 1000, pyramiding = 10, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, commission_value = 0.03)

//start-end time
startyear = input.int(2020,"start year")
startmonth = input.int(1,"start month")
startday = input.int(1,"start day")
endyear = input.int(2025,"end year")
endmonth = input.int(1,"end month")
endday = input.int(1,"end day")

timeEnd = time <= timestamp(syminfo.timezone,endyear,endmonth,endday,0,0)
timeStart = time >= timestamp(syminfo.timezone,startyear,startmonth,startday,0,0)
choosetime = input(false,"Choose Time Interval")
condTime = (choosetime ? (timeStart and timeEnd) : true)

// time frame?
tfc = 1
if timeframe.isdaily
    tfc := 24

// indicators: price normalized alma, and its 1st and 2nd derivatives
ema = ta.alma(close,140,1.1,6)
dema = (ema-ema[1])/ema
stodema = ta.ema(ta.ema(ta.stoch(dema,dema,dema,100),3),3)

d2ema = ta.ema(dema-dema[1],5)
stod2ema = ta.ema(ta.ema(ta.stoch(d2ema,d2ema,d2ema,100),3),3)

ind = (close-ta.ema(close,120*24/tfc))/close
heat = ta.ema(ta.stoch(ind,ind,ind,120*24/tfc),3)
index = ta.ema(heat,7*24/tfc)

//plot graph
green = color.rgb(20,255,100)
yellow = color.yellow
red = color.red
blue = color.rgb(20,120,255)
tcolor = (dema>0) and (d2ema>0)? green : (dema>0) and (d2ema<0) ? yellow : (dema < 0) and (d2ema<0) ? red : (dema < 0) and (d2ema>0) ? blue : color.black
demaema = ta.ema(dema,21)
plot(demaema, color = tcolor)

//strategy buy-sell conditions
cond1a = strategy.position_size <= 0
cond1b = strategy.position_size > 0

if (condTime and cond1a and ( ( ((tcolor[1] == red and demaema<0.02) or (tcolor[1] == blue and demaema < 0.02) or (tcolor[1] == yellow and demaema>-0.02) ) and tcolor == green) or (tcolor[1] == red and tcolor == blue and demaema < -0.01) ) and index<85 and ind<0.4)
    strategy.entry("buy",strategy.long, (strategy.equity-strategy.position_size*close)/1/close)
    
if (condTime and cond1b and ( (((tcolor[1] == yellow and demaema > -0.02) or (tcolor[1] == blue and demaema < 0.02) or (tcolor[1] == green and demaema < 0.02)) and tcolor == red) or (tcolor[1] == green and tcolor == yellow and demaema > 0.015) ) and index>15 and ind>-0.1)
    strategy.order("sell",strategy.short, strategy.position_size)


Mehr