avatar of 发明者量化-小小梦 发明者量化-小小梦
Suivre Messages privés
4
Suivre
1271
Abonnés

Idées de trading alternatives – Stratégie de trading de la zone K-line

Créé le: 2023-11-03 17:12:42, Mis à jour le: 2024-11-08 09:08:54
comments   0
hits   1617

Idées de trading alternatives – Stratégie de trading de la zone K-line

En examinant une idée de trading pas très fiable - la stratégie de trading de la zone K-line, dans cet article, nous discuterons de cette idée et essaierons de mettre en œuvre ce script.

L’idée principale de la stratégie de la zone K-line

La stratégie de zone K-line est une stratégie de trading basée sur la relation de zone entre la ligne K du prix et la moyenne mobile. Son idée principale est de prédire l’évolution possible des cours des actions en analysant l’amplitude et les changements des tendances des prix, ainsi que la conversion des sentiments d’achat et de vente, afin de déterminer le moment d’ouverture et de sortie des positions. Cette stratégie s’appuie sur la zone entre le chandelier et la moyenne mobile, ainsi que sur la valeur de l’indicateur KDJ, pour générer des signaux de trading longs et courts.

Le principe de la stratégie de la zone K-line

La zone du chandelier fait référence à l’espace entre le chandelier de prix et la moyenne mobile, qui est calculé en soustrayant la valeur de la moyenne mobile du prix de clôture de chaque barre, puis en les additionnant. Lorsque le prix augmente pendant une longue période et dans une grande amplitude, la zone de la ligne K deviendra plus grande, tandis que dans un marché volatil ou un retournement après volatilité, la zone de la ligne K sera plus petite . Selon le principe « tout va vers l’extrême opposé », plus la tendance à la hausse est forte et plus le temps est long, plus la zone de la ligne K correspondante est grande et plus la probabilité d’inversion est grande, tout comme un ressort, plus il est long. est étiré, plus la force de rebond est grande. Par conséquent, un seuil est défini pour la zone de la ligne K. Lorsque ce seuil est atteint, la tendance des prix peut être complétée et la possibilité d’un renversement est plus grande.

Afin de confirmer davantage que la tendance est sur le point de s’inverser, l’indicateur KDJ est introduit pour juger de la conversion du sentiment d’achat et de vente. Les paramètres de seuil et de valeur de l’indicateur KDJ de cette stratégie peuvent être ajustés en fonction de circonstances et de besoins spécifiques pour améliorer la précision de la stratégie.

Avantages de la stratégie de la zone K-line

L’avantage de la stratégie de zone K-line est qu’elle combine l’amplitude et les changements des tendances de prix, ainsi que la conversion du sentiment d’achat et de vente, offrant une stratégie de trading quantitative relativement complète. Ses avantages incluent :

  • Il fournit un moyen simple et intuitif d’identifier la possibilité d’un renversement de tendance, aidant les traders à mieux comprendre les tendances du marché.
  • La combinaison des indicateurs de zone K-line et KDJ augmente la fiabilité et la précision de la stratégie.
  • Il est très flexible et peut ajuster les paramètres en fonction des conditions du marché pour répondre à différents besoins commerciaux.

Risques de la stratégie de la zone K-line

Bien que la stratégie de zone de chandelier présente certains avantages, elle comporte également certains risques, notamment :

  • La définition du seuil peut nécessiter une certaine expérience et des ajustements, et s’il n’est pas défini correctement, cela peut conduire à une mauvaise évaluation des tendances du marché.
  • La précision de l’indicateur KDJ est affectée par les fluctuations et le bruit du marché, et de faux signaux peuvent se produire.
  • Les performances d’une stratégie peuvent varier en fonction des conditions de marché et nécessitent une optimisation et un ajustement constants.

Orientation d’optimisation de la stratégie de la zone K-line

Afin d’optimiser la stratégie de la zone K-line, les directions suivantes peuvent être envisagées :

  • Optimisation des paramètres : ajustez et optimisez en permanence les paramètres du seuil et de l’indicateur KDJ pour vous adapter aux différentes conditions du marché et aux besoins de trading.
  • Gestion des risques : mettre en œuvre des stratégies efficaces de gestion des risques, notamment des règles de stop-loss et de take-profit, pour réduire le risque de pertes.
  • Combinaison multi-stratégies : combinez la stratégie de zone K-line avec d’autres stratégies pour améliorer les performances de la stratégie de trading globale.
  • Suivi et ajustement en temps réel : Surveillez régulièrement les performances de la stratégie et apportez des ajustements et des améliorations en fonction des conditions réelles.

Mettre en œuvre cette stratégie à l’aide de JavaScript

  • Calculer l’aire du chandelier

  • Signal d’ouverture d’une position longue :

(1) La « zone K-line » de la tendance à la baisse atteint le seuil, qui peut être établi avant

(2) La valeur de l’indicateur KDJ est supérieure à 80

  • Signal d’ouverture d’une position courte :

(1) La « zone K-line » de la tendance à la hausse atteint le seuil, qui peut être établi avant

(2) La valeur de l’indicateur KDJ est inférieure à 20

  • Sortie long/short : ATR suivant le stop loss et le take profit

Implémentation du code

// 参数
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)
    }
}

La logique de la stratégie est très simple :

  1. Tout d’abord, certaines variables et paramètres globaux sont définis, notamment :

Paramètres de la stratégie

  • maPeriod : La période de la moyenne mobile.
  • seuil : Le seuil utilisé pour déterminer quand acheter ou vendre.
  • montant : Le montant de chaque transaction.

Variables globales

  • c : objet graphique K-line, utilisé pour dessiner des graphiques.
  • openPrice : enregistre le prix d’ouverture.
  • tradeState : enregistre l’état de la transaction, qui peut être « NULL » (position vide), « BUY » (acheter) ou « SELL » (vendre).

Fonction de calcul

  • Fonction calculateKLineArea : Cette fonction est utilisée pour calculer la zone entre le prix et la moyenne mobile sur une période de temps sur le graphique en chandeliers, et renvoie la valeur de la zone, l’indice du chandelier du dernier croisement et l’indice du chandelier du dernier croisement. croix vers le bas . Ces valeurs sont utilisées dans les décisions ultérieures pour déterminer quand acheter et vendre.

Fonction de boucle principale

  • Fonction onTick : Il s’agit de la fonction d’exécution de la stratégie principale. Voici les opérations au sein de la fonction :

a. Obtenez les dernières données de la ligne K et assurez-vous que le nombre de lignes K n’est pas inférieur à maPeriod, sinon enregistrez le statut et renvoyez.

b. Calculez la moyenne mobile ma et l’indicateur ATR atr, ainsi que l’indicateur KDJ.

c. Obtenez les informations de zone, le dernier index de ligne K croisée vers le haut et le dernier index de ligne K croisée vers le bas à partir de areaInfo.

d. Utilisez l’objet graphique en chandeliers c pour dessiner les lignes du chandelier et de l’indicateur, et remplissez-les de différentes couleurs en fonction de la relation entre le prix et la moyenne mobile.

e. Déterminer le moment de l’achat et de la vente en fonction des conditions :

Si tradeState est « NULL », et que la zone est inférieure à -threshold et que la valeur du chandelier KDJ est supérieure à 70, une opération d’achat est effectuée. Si tradeState est « NULL », que la zone est supérieure au seuil et que la valeur du chandelier KDJ est inférieure à 30, exécutez une opération de vente. f. Définissez les conditions de stop loss et de take profit et fermez la position si les conditions sont remplies :

Si la position est dans un état d’achat, elle est clôturée lorsque le prix est inférieur au prix de clôture du jour de négociation précédent moins l’ATR du jour précédent. Si la position est dans un état de vente, elle est clôturée lorsque le prix est supérieur au prix de clôture du jour de négociation précédent plus l’ATR du jour précédent. fonction principale : il s’agit du point d’entrée d’exécution principal, vérifiant si le nom d’échange contient « _« Futures », s’il est inclus, génère une exception, sinon entre dans une boucle infinie, exécute la fonction onTick dans chaque boucle et dort pendant 1 seconde.

En général, cette stratégie s’appuie principalement sur des graphiques K-line et des indicateurs techniques pour prendre des décisions d’achat et de vente, tout en utilisant des stratégies de stop-loss et de take-profit pour gérer les risques. Veuillez noter qu’il s’agit simplement d’un exemple de stratégie et que son utilisation réelle doit être ajustée et optimisée en fonction des conditions du marché et des besoins spécifiques.

Ce modèle a été facilement implémenté à l’aide de JavaScript sur FMZ.COM sans utiliser de nombreuses lignes de code. Et la représentation graphique de la zone K-line est facilement réalisée à l’aide de la fonction KLineChart. La stratégie est conçue pour le marché spot des crypto-monnaies et utilise le modèle « Digital Currency Spot Trading Library ». Le placement d’ordres à l’aide des fonctions encapsulées dans le modèle est également très simple, facile à utiliser et à comprendre.

Backtesting de stratégie

Idées de trading alternatives – Stratégie de trading de la zone K-line

Idées de trading alternatives – Stratégie de trading de la zone K-line

J’ai choisi au hasard une période de backtesting. Même si je n’ai pas perdu d’argent, je n’ai pas accumulé de bénéfices en continu, donc le problème de drawdown était quand même assez important. Il devrait y avoir d’autres directions d’optimisation et d’espace pour cette stratégie. Ceux qui sont intéressés peuvent essayer de mettre à niveau cette stratégie.

Idées de trading alternatives – Stratégie de trading de la zone K-line

Grâce à cette stratégie, en plus d’apprendre une idée de trading plus alternative, nous avons également appris à dessiner des graphiques ; représenter la zone délimitée par la ligne K et la moyenne mobile ; dessiner l’indicateur KDJ, etc.

Résumer

La stratégie de zone K-line est une stratégie de trading basée sur l’amplitude de la tendance des prix et l’indicateur KDJ. Elle aide les traders à prédire les tendances du marché en analysant la zone entre la ligne K et la moyenne mobile et la conversion du sentiment d’achat et de vente. Bien qu’il existe certains risques, grâce à une optimisation et un ajustement continus, cette stratégie peut fournir un outil de trading puissant pour aider les traders à mieux faire face aux fluctuations du marché. Il est important que les traders ajustent de manière flexible les paramètres et les règles de leurs stratégies en fonction de la situation spécifique et des conditions du marché pour obtenir de meilleures performances de trading.