avatar of 发明者量化-小小梦 发明者量化-小小梦
konzentrieren Sie sich auf Private Nachricht
4
konzentrieren Sie sich auf
1271
Anhänger

Alternative Handelsideen - Handelsstrategie für den K-Linienbereich

Erstellt in: 2023-11-03 17:12:42, aktualisiert am: 2024-11-08 09:08:54
comments   0
hits   1617

Alternative Handelsideen - Handelsstrategie für den K-Linienbereich

Wir betrachten eine nicht sehr zuverlässige Handelsidee – die K-Line-Bereichshandelsstrategie. In diesem Artikel werden wir diese Idee diskutieren und versuchen, dieses Skript umzusetzen.

Die Hauptidee der K-Line-Bereichsstrategie

Die K-Linien-Bereichsstrategie ist eine Handelsstrategie, die auf der Bereichsbeziehung zwischen der Preis-K-Linie und dem gleitenden Durchschnitt basiert. Die Hauptidee besteht darin, durch Analyse der Amplitude und der Änderungen der Preisentwicklung sowie der Konvertierung der Kauf- und Verkaufsstimmungen den möglichen Trend der Aktienkurse vorherzusagen, um so den Zeitpunkt der Eröffnung und Schließung von Positionen zu bestimmen. Diese Strategie basiert auf dem Bereich zwischen der Kerze und dem gleitenden Durchschnitt sowie dem Wert des KDJ-Indikators, um Long- und Short-Handelssignale zu generieren.

Das Prinzip der K-Line-Bereichsstrategie

Der Candlestick-Bereich bezeichnet den Abstand zwischen der Preiskerze und dem gleitenden Durchschnitt. Er wird berechnet, indem der gleitende Durchschnittswert vom Schlusskurs jedes Balkens abgezogen und die Ergebnisse dann aufsummiert werden. Wenn der Preis über einen langen Zeitraum und in einer großen Amplitude steigt, wird der Bereich der K-Linie größer, während in einem volatilen Markt oder einer Umkehr nach Volatilität der Bereich der K-Linie kleiner wird . Nach dem Prinzip „alles geht ins entgegengesetzte Extrem“: Je größer der Aufwärtstrend und je länger die Zeit, desto größer der entsprechende K-Linienbereich und desto größer die Wahrscheinlichkeit einer Umkehr, genau wie bei einer Feder, desto länger ist sie gedehnt wird, desto größer ist die Rückprallkraft. Daher wird ein Schwellenwert für den K-Linienbereich festgelegt. Wenn dieser Schwellenwert erreicht wird, ist der Preistrend möglicherweise abgeschlossen und die Möglichkeit einer Umkehr größer.

Um weiter zu bestätigen, dass sich der Trend umkehren wird, wird der KDJ-Indikator eingeführt, um die Umwandlung der Kauf- und Verkaufsstimmung zu beurteilen. Die Schwellenwert- und KDJ-Indikatorwerteinstellungen dieser Strategie können entsprechend den spezifischen Umständen und Anforderungen angepasst werden, um die Genauigkeit der Strategie zu verbessern.

Vorteile der K-Line-Bereichsstrategie

Der Vorteil der K-Line-Bereichsstrategie besteht darin, dass sie die Amplitude und Änderungen der Preistrends sowie die Umwandlung der Kauf- und Verkaufsstimmung kombiniert und so eine relativ vollständige quantitative Handelsstrategie bietet. Zu seinen Vorteilen zählen:

  • Es bietet eine einfache und intuitive Möglichkeit, die Möglichkeit einer Trendumkehr zu erkennen und hilft Händlern, Markttrends besser zu verstehen.
  • Die Kombination aus K-Line-Bereich und KDJ-Indikatoren erhöht die Zuverlässigkeit und Genauigkeit der Strategie.
  • Es ist äußerst flexibel und kann Parameter entsprechend den Marktbedingungen anpassen, um unterschiedlichen Handelsanforderungen gerecht zu werden.

Risiken der K-Line-Bereichsstrategie

Obwohl die Candlestick-Area-Strategie gewisse Vorteile hat, birgt sie auch einige Risiken, darunter:

  • Das Festlegen des Schwellenwerts kann einige Erfahrung und Anpassung erfordern und wenn er nicht richtig festgelegt wird, kann dies zu einer Fehleinschätzung der Markttrends führen.
  • Die Genauigkeit des KDJ-Indikators wird durch Marktschwankungen und Rauschen beeinträchtigt und es können falsche Signale auftreten.
  • Die Leistung einer Strategie kann unter verschiedenen Marktbedingungen variieren und erfordert eine ständige Optimierung und Anpassung.

Optimierungsrichtung der K-Line-Bereichsstrategie

Um die K-Line-Bereichsstrategie zu optimieren, können die folgenden Richtungen berücksichtigt werden:

  • Parameteroptimierung: Passen Sie die Schwellenwert- und KDJ-Indikatorparameter kontinuierlich an und optimieren Sie sie, um sie an unterschiedliche Marktbedingungen und Handelsanforderungen anzupassen.
  • Risikomanagement: Implementieren Sie effektive Risikomanagementstrategien, einschließlich Stop-Loss- und Take-Profit-Regeln, um das Verlustrisiko zu reduzieren.
  • Kombination mehrerer Strategien: Kombinieren Sie die K-Line-Bereichsstrategie mit anderen Strategien, um die Leistung der umfassenden Handelsstrategie zu verbessern.
  • Echtzeitüberwachung und -anpassung: Überwachen Sie regelmäßig die Leistung der Strategie und nehmen Sie basierend auf den tatsächlichen Bedingungen Anpassungen und Verbesserungen vor.

Implementieren Sie diese Strategie mit JavaScript

  • Berechnen Sie die Fläche des Kerzenhalters

  • Signal zum Eröffnen einer Long-Position:

(1) Der “K-Linienbereich” des Abwärtstrends erreicht die Schwelle, die vor

(2) Der KDJ-Indikatorwert ist größer als 80

  • Signal zum Eröffnen einer Short-Position:

(1) Der “K-Linienbereich” des Aufwärtstrends erreicht die Schwelle, die vor

(2) Der KDJ-Indikatorwert liegt unter 20

  • Long/Short-Ausstieg: ATR-Tracking von Stop-Loss und Take-Profit

Code-Implementierung

// 参数
var maPeriod = 30
var threshold = 50000
var amount = 0.1

// 全局变量
let c = KLineChart({})
let openPrice = 0
let tradeState = "NULL"  // NULL BUY SELL

function calculateKLineArea(r, ma) {
    var lastCrossUpIndex = null
    var lastCrossDownIndex = null
    for (var i = r.length - 1 ; i >= 0 ; i--) {
        if (ma[i] !== null && r[i].Open < ma[i] && r[i].Close > ma[i]) {
            lastCrossUpIndex = i
            break
        } else if (ma[i] !== null && r[i].Open > ma[i] && r[i].Close < ma[i]) {
            lastCrossDownIndex = i
            break
        }

        if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close < ma[i - 1] && r[i].Close > ma[i]) {
            lastCrossUpIndex = i
            break
        } else if (i >= 1 && ma[i] !== null && ma[i - 1] !== null && r[i - 1].Close > ma[i - 1] && r[i].Close < ma[i]) {
            lastCrossDownIndex = i
            break
        }
    }

    var area = 0
    if (lastCrossDownIndex !== null) {
        for (var i = r.length - 1 ; i >= lastCrossDownIndex ; i--) {
            area -= Math.abs(r[i].Close - ma[i])
        }
    } else if (lastCrossUpIndex !== null) {
        for (var i = r.length - 1 ; i >= lastCrossUpIndex ; i--) {
            area += Math.abs(r[i].Close - ma[i])
        }
    }

    return [area, lastCrossUpIndex, lastCrossDownIndex]
}

function onTick() {
    var r = _C(exchange.GetRecords)
    if (r.length < maPeriod) {
        LogStatus(_D(), "K线数量不足")
        return 
    }
    var ma = TA.MA(r, maPeriod)
    var atr = TA.ATR(r)
    var kdj = TA.KDJ(r)
    var lineK = kdj[0]
    var lineD = kdj[1]
    var lineJ = kdj[2]
    var areaInfo = calculateKLineArea(r, ma)
    var area = _N(areaInfo[0], 0)
    var lastCrossUpIndex = areaInfo[1]
    var lastCrossDownIndex = areaInfo[2]
    
    r.forEach(function(bar, index) {
        c.begin(bar)
        c.plotcandle(bar.Open, bar.High, bar.Low, bar.Close, {overlay: true})
        let maLine = c.plot(ma[index], "ma", {overlay: true})
        let close = c.plot(bar.Close, 'close', {overlay: true})
        c.fill(maLine, close, {color: bar.Close > ma[index] ? 'rgba(255, 0, 0, 0.1)' : 'rgba(0, 255, 0, 0.1)'})
        if (lastCrossUpIndex !== null) {
            c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
        } else if (lastCrossDownIndex !== null) {
            c.plotchar(bar.Time, {char: '$:' + area, overlay: true})
        }
        c.plot(lineK[index], "K")
        c.plot(lineD[index], "D")
        c.plot(lineJ[index], "J")

        c.close()
    })
    
    if (tradeState == "NULL" && area < -threshold && lineK[lineK.length - 1] > 70) {
        // long
        let tradeInfo = $.Buy(amount)
        if (tradeInfo) {
            openPrice = tradeInfo.price
            tradeState = "BUY"
        }
    } else if (tradeState == "NULL" && area > threshold && lineK[lineK.length - 1] < 30) {
        // short
        let tradeInfo = $.Sell(amount)
        if (tradeInfo) {
            openPrice = tradeInfo.price
            tradeState = "SELL"
        }
    }
    
    let stopBase = tradeState == "BUY" ? Math.max(openPrice, r[r.length - 2].Close) : Math.min(openPrice, r[r.length - 2].Close)
    if (tradeState == "BUY" && r[r.length - 1].Close < stopBase - atr[atr.length - 2]) {
        // cover long
        let tradeInfo = $.Sell(amount)
        if (tradeInfo) {
            tradeState = "NULL"
            openPrice = 0
        }        
    } else if (tradeState == "SELL" && r[r.length - 1].Close > stopBase + atr[atr.length - 2]) {
        // cover short 
        let tradeInfo = $.Buy(amount)
        if (tradeInfo) {
            tradeState = "NULL"
            openPrice = 0
        }        
    }

    LogStatus(_D(), "area:", area, ", lineK[lineK.length - 2]:", lineK[lineK.length - 2])
}


function main() {    
    if (exchange.GetName().includes("_Futures")) {
        throw "not support Futures"
    }
    while (true) {
        onTick()
        Sleep(1000)
    }
}

Die Strategielogik ist sehr einfach:

  1. Zunächst werden einige globale Variablen und Parameter definiert, darunter:

Strategieparameter

  • maPeriod: Der Zeitraum des gleitenden Durchschnitts.
  • Schwellenwert: Der Schwellenwert, der verwendet wird, um zu bestimmen, wann gekauft oder verkauft werden soll.
  • Betrag: Der Betrag jeder Transaktion.

Globale Variablen

  • c: K-Linien-Diagrammobjekt, das zum Zeichnen von Diagrammen verwendet wird.
  • openPrice: zeichnet den Eröffnungspreis auf.
  • tradeState: zeichnet den Transaktionsstatus auf, der „NULL“ (leere Position), „BUY“ (kaufen) oder „SELL“ (verkaufen) sein kann.

Berechnungsfunktion

  • Funktion calculateKLineArea: Mit dieser Funktion wird der Bereich zwischen dem Preis und dem gleitenden Durchschnitt über einen bestimmten Zeitraum im Candlestick-Chart berechnet. Sie gibt den Flächenwert, den Candlestick-Index der letzten Aufwärtskreuzung und den Candlestick-Index von die letzte Quer-Abwärts-Überquerung. Diese Werte werden bei nachfolgenden Entscheidungen herangezogen, um den Kauf- und Verkaufszeitpunkt festzulegen.

Hauptschleifenfunktion

  • onTick-Funktion: Dies ist die Hauptfunktion zur Strategieausführung. Innerhalb der Funktion sind folgende Operationen möglich:

a. Holen Sie sich die neuesten K-Line-Daten und stellen Sie sicher, dass die Anzahl der K-Lines nicht kleiner als maPeriod ist. Andernfalls zeichnen Sie den Status auf und kehren Sie zurück.

b. Berechnen Sie den gleitenden Durchschnitt ma und den ATR-Indikator atr sowie den KDJ-Indikator.

c. Holen Sie sich die Bereichsinformationen, den letzten Cross-Up-K-Line-Index und den letzten Cross-Down-K-Line-Index aus areaInfo.

d. Verwenden Sie das Candlestick-Chartobjekt c, um die Candlestick- und Indikatorlinien zu zeichnen, und füllen Sie sie entsprechend der Beziehung zwischen dem Preis und dem gleitenden Durchschnitt mit unterschiedlichen Farben.

e. Bestimmen Sie den Zeitpunkt des Kaufs und Verkaufs anhand der Bedingungen:

Wenn tradeState „NULL“ ist, der Bereich kleiner als -threshold und der KDJ-Candlestick-Wert größer als 70 ist, wird eine Kaufoperation ausgeführt. Wenn tradeState „NULL“ ist, der Bereich größer als der Schwellenwert ist und der KDJ-Candlestick-Wert kleiner als 30 ist, führen Sie eine Verkaufsoperation aus. f. Legen Sie Stop-Loss- und Take-Profit-Bedingungen fest und schließen Sie die Position, wenn die Bedingungen erfüllt sind:

Befindet sich der Trader im Kaufzustand, wird die Position geschlossen, wenn der Kurs niedriger ist als der Schlusskurs des vorherigen Handelstages abzüglich des ATR des Vortages. Befindet sich der Trader in einem Verkaufszustand, wird die Position geschlossen, wenn der Preis höher ist als der Schlusskurs des vorherigen Handelstages zuzüglich des ATR des Vortages. Hauptfunktion: Dies ist der Haupteinstiegspunkt für die Ausführung. Er prüft, ob der Börsenname „“ enthält._Futures“ löst, falls enthalten, eine Ausnahme aus, tritt andernfalls in eine Endlosschleife ein, führt in jeder Schleife die Funktion onTick aus und schläft 1 Sekunde lang.

Im Allgemeinen stützt sich diese Strategie hauptsächlich auf K-Liniendiagramme und technische Indikatoren, um Kauf- und Verkaufsentscheidungen zu treffen, während Stop-Loss- und Take-Profit-Strategien zum Risikomanagement verwendet werden. Bitte beachten Sie, dass dies nur eine Beispielstrategie ist und die tatsächliche Nutzung basierend auf Marktbedingungen und spezifischen Anforderungen angepasst und optimiert werden muss.

Dieses Modell konnte problemlos mit JavaScript auf FMZ.COM implementiert werden, ohne dass viele Codezeilen verwendet werden mussten. Und die grafische Darstellung des K-Linienbereichs lässt sich ganz einfach mit der Funktion KLineChart erreichen. Die Strategie ist für den Spotmarkt für Kryptowährungen konzipiert und verwendet die Vorlage „Digital Currency Spot Trading Library“. Das Platzieren von Aufträgen mithilfe der in der Vorlage enthaltenen Funktionen ist ebenfalls sehr einfach, leicht zu verwenden und zu verstehen.

Strategie-Backtesting

Alternative Handelsideen - Handelsstrategie für den K-Linienbereich

Alternative Handelsideen - Handelsstrategie für den K-Linienbereich

Ich habe nach dem Zufallsprinzip einen Backtesting-Zeitraum ausgewählt. Obwohl ich kein Geld verloren habe, habe ich auch nicht kontinuierlich Gewinne angehäuft, sodass das Drawdown-Problem immer noch ziemlich groß war. Es sollte andere Optimierungsrichtungen und Spielraum für diese Strategie geben. Interessierte können versuchen, diese Strategie zu erweitern.

Alternative Handelsideen - Handelsstrategie für den K-Linienbereich

Durch diese Strategie haben wir nicht nur eine alternative Handelsidee gelernt, sondern auch, wie man Diagramme zeichnet, den von der K-Linie und dem gleitenden Durchschnitt umschlossenen Bereich darstellt, den KDJ-Indikator zeichnet usw.

Zusammenfassen

Die K-Linien-Bereichsstrategie ist eine Handelsstrategie, die auf der Preistrendamplitude und dem KDJ-Indikator basiert. Sie hilft Händlern, Markttrends vorherzusagen, indem sie den Bereich zwischen der K-Linie und dem gleitenden Durchschnitt sowie die Umwandlung von Kauf- und Verkaufsstimmung analysiert. Obwohl gewisse Risiken bestehen, kann diese Strategie durch kontinuierliche Optimierung und Anpassung ein leistungsstarkes Handelsinstrument darstellen, das Händlern hilft, mit Marktschwankungen besser umzugehen. Es ist wichtig, dass Händler die Parameter und Regeln ihrer Strategien flexibel an die jeweilige Situation und die Marktbedingungen anpassen, um eine bessere Handelsleistung zu erzielen.