Stratégie de la balle d'argent basée sur la rupture de la boîte

Auteur:ChaoZhang est là., Date: 15 janvier 2024
Les étiquettes:

img

Résumé

La stratégie détecte principalement la rupture de la boîte formée par les points hauts et bas de la ligne K pour juger de la direction et de la force du marché. Lorsqu'il y a une rupture de la boîte ascendante, la stratégie définira une position longue autour du point de rupture. Lorsqu'il y a une rupture de la boîte descendante, la stratégie définira une position courte autour du point de rupture. Une fois un signal de trading généré, la stratégie passera des ordres pour ouvrir des positions et définira un stop loss et un profit pour contrôler les risques.

La logique de la stratégie

  1. La stratégie définit une période de négociation et ne recherche que des opportunités de négociation au cours de cette période.

  2. Après chaque formation de la ligne K, la stratégie évalue s'il existe une percée significative entre les prix les plus élevés et les plus bas des deux lignes K précédentes.

    2.1 Si le prix le plus bas de la 2e ligne K est supérieur au prix le plus élevé de la 1re ligne K, il y a une rupture à la hausse.

    2.2 Si le prix le plus élevé de la 2e ligne K est inférieur au prix le plus bas de la 1re ligne K, il y a une rupture à la baisse.

  3. Après confirmation du signal de rupture de la case, la stratégie fixe un point d'entrée long ou court autour du prix le plus élevé ou le plus bas de la ligne K actuelle.

  4. Une fois la position ouverte, la stratégie définit le profit basé sur le double de la fourchette de rupture pour capturer l'accélération de la tendance.

  5. La stratégie fixe également le stop loss au prix le plus bas ou le plus élevé de la 2e ligne K pour réduire le risque de perte.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. La logique est simple et facile à mettre en œuvre.

  2. L'utilisation de K-line box breakouts pour juger de la direction et de la force du marché a une grande précision.

  3. Le paramètre de prise de profit capture les opportunités de l'accélération de la tendance.

  4. Il existe une logique de stop loss claire pour contrôler une seule perte.

  5. L'idée de stratégie est flexible et peut être personnalisée en fonction du style personnel.

Analyse des risques

Toutefois, la stratégie présente certains risques:

  1. Les signaux de rupture peuvent être de fausses ruptures, les pertes ne peuvent pas être complètement évitées.

  2. Le stop loss près du point d'entrée peut être facilement déclenché par des marchés agressifs.

  3. Il ne peut pas juger de la structure de la tendance et les arrêts peuvent être fréquemment déclenchés sur les marchés à fourchette.

  4. Il ne tient pas compte de l'impact des différents produits et des différentes périodes.

Directions d'optimisation

Pour optimiser davantage la stratégie, nous pouvons améliorer les aspects suivants:

  1. Définir des paramètres de stop loss et de profit adaptatif pour différents produits et périodes de temps.

  2. Ajoutez des indicateurs techniques pour juger de la tendance afin d'éviter d'être pris au piège dans les marchés à fourchette.

  3. Mettre en place des opportunités supplémentaires pour suivre les tendances.

  4. Combiner les indicateurs de volume pour juger de l'authenticité des signaux de rupture et de filtre.

  5. Ajouter des algorithmes d'apprentissage automatique pour aider à déterminer la direction de la tendance.

Résumé

La stratégie est conçue sur la base du principe de rupture simple pour capturer les runs accélérés après les ruptures pour des rendements excessifs. Elle utilise des arrêts et des profits pour contrôler les risques.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Dvitash

//@version=5
strategy("Casper SMC Silver Bullet", shorttitle = "Casper SB", overlay=true, calc_on_order_fills = true)

startTime = input(defval = "1000", title = "Start Time")
endTime = input(defval = "1600", title = "End Time")
contractAmt = input.int(defval = 2, title = "Contract Amount")
fvgCol = input.color(defval = color.rgb(63, 61, 179, 41), title = "FVG Color")
borderCol = input.color(defval = color.rgb(35, 33, 172, 41), title = "FVG Border Color")
fvgExtendLength = input.int(defval = 0, minval = 0, title = "FVG Extend Length")

allowedTime = not na(time(timeframe.period, startTime + "-" + endTime +":23456", "America/New_York"))
newDay = bool(ta.change(time('D')))
h = hour(time('1'), "America/New_York")

var bool fvgDrawn = na
var float entryPrice = na 
var float stopPrice = na 
var float tpPrice = na 

if newDay
    fvgDrawn := false
    // a_allBoxes = box.all
    // if array.size(a_allBoxes) > 0
    //     for i = 0 to array.size(a_allBoxes) - 1
    //         box.delete(array.get(a_allBoxes, i))

if allowedTime and barstate.isconfirmed and h <= 16
    //Long FVG
    if high[2] < low and not fvgDrawn
        // box.new(bar_index[2], low, bar_index + fvgExtendLength, high[2], bgcolor = fvgCol, border_color = borderCol)
        stopPrice := low[2]
        entryPrice := low
        tpPrice := entryPrice + (math.abs(low[2] - entryPrice) * 2)
        // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice))
        strategy.entry("long", strategy.long, contractAmt, limit = entryPrice, comment = "Long Entry")
        fvgDrawn := true

    if low[2] > high and not fvgDrawn
        // box.new(bar_index[2], high, bar_index + fvgExtendLength, low[2], bgcolor = fvgCol, border_color = borderCol)
        stopPrice := high[2]
        entryPrice := high
        tpPrice := entryPrice - (math.abs(high[2] - entryPrice) * 2)
        // log.info("SL: " + str.tostring(stopPrice) + " Entry: " + str.tostring(entryPrice) + " TP: " + str.tostring(tpPrice))
        strategy.entry("short", strategy.short, contractAmt, limit = entryPrice, comment = "Short Entry")
        fvgDrawn := true
if h >= 16
    strategy.close_all()
    strategy.cancel_all()

strategy.exit("long exit", from_entry = "long", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Long Exit")
strategy.exit("short exit", from_entry = "short", qty = contractAmt, limit = tpPrice, stop = stopPrice, comment = "Short Exit")

Plus de