Stratégie de jugement haussier et baissier à nombre continu K-line

EMA ATR
Date de création: 2024-05-17 13:54:06 Dernière modification: 2024-05-17 13:54:06
Copier: 1 Nombre de clics: 682
1
Suivre
1617
Abonnés

Stratégie de jugement haussier et baissier à nombre continu K-line

Aperçu

Cette stratégie permet de juger si le marché est haussier ou baissier en fonction du nombre de lignes K qui se succèdent et de négocier en fonction de ce nombre. Une position de plus de 1 est ouverte lorsque le prix de clôture est supérieur au prix de clôture de la ligne K précédente et atteint un nombre spécifié.

Principe de stratégie

  1. Enregistrez le nombre de fois où les conditions de tête multiple et de tête blanche se sont produites. Si le prix de clôture est supérieur à la ligne K précédente, le nombre de têtes multiples plus 1 et le nombre de têtes blanches sont réinitialisés à 0, si le prix de clôture est inférieur à la ligne K précédente, le nombre de têtes blanches plus 1 et le nombre de têtes multiples sont réinitialisés à 0, sinon les deux sont réinitialisés à 0.
  2. Lorsque le compte de plusieurs têtes atteint le nombre k indiqué, ouvrez la position de plusieurs têtes et définissez le stop loss et le stop stop.
  3. Pour les positions multiples, le prix le plus élevé après l’ouverture de la position est enregistré. La position est levée lorsque le prix le plus élevé dépasse le prix d’ouverture iTGT par unité de moindre variation et que le prix de clôture est ramené à iPcnt% en dessous du prix le plus élevé.
  4. Lorsque le nombre de têtes vides atteint le nombre spécifié de k2, ouvrez la position de tête vide et définissez un stop loss et un stop stop.
  5. Pour une position en position vide, le prix le plus bas enregistré après l’ouverture de la position est le prix le plus bas inférieur au prix d’ouverture iTGT par unité de moindre variation et le prix de clôture rebondit à iPcnt% au-dessus du prix le plus bas.

Avantages stratégiques

  1. La logique est claire, simple et compréhensible, les décisions de transaction sont basées sur la continuité des lignes K.
  2. La mise en place d’un mécanisme d’arrêt de mouvement protège activement les bénéfices après que le prix a roulé dans une direction favorable pendant un certain temps.
  3. Les paramètres Stop Loss et Stop Stop permettent de contrôler efficacement le risque et de bloquer les bénéfices.
  4. Les paramètres sont réglables pour différents marchés et styles de négociation.

Risque stratégique

  1. En cas de choc, la fréquence des positions ouvertes peut entraîner des coûts de dérapage plus élevés.
  2. Le jugement sur le nombre de lignes K consécutives est influencé par le bruit du marché et peut être influencé par des signaux fréquents.
  3. Les points d’arrêt et d’arrêt fixes peuvent ne pas s’adapter aux fluctuations du marché.

Orientation de l’optimisation de la stratégie

  1. L’introduction de plus d’indicateurs techniques, tels que la ligne moyenne, le taux de fluctuation, etc., pour aider à déterminer la force et la direction des tendances.
  2. Optimiser les conditions de déclenchement de l’arrêt mobile, par exemple en ajustant le pourcentage de rétractation en fonction de l’adaptation ATR.
  3. L’utilisation de méthodes plus dynamiques pour arrêter les pertes et les arrêts, comme le suivi des pertes, l’arrêt en échelle, etc.
  4. Optimiser les paramètres pour trouver la combinaison optimale de paramètres adaptée aux différents marchés et variétés.

Résumer

La stratégie capte les tendances haussières et baissières par la continuité de la ligne K, tout en mettant en place des stop-loss pour contrôler les risques. L’introduction de stop-loss mobiles peut mieux protéger les bénéfices. Cependant, il peut y avoir des signaux fréquents dans les marchés instables, ce qui nécessite une optimisation supplémentaire de la fiabilité du signal.

Code source de la stratégie
/*backtest
start: 2024-04-16 00:00:00
end: 2024-05-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("K Consecutive Candles 數來寶V2", max_bars_back=300, overlay=true)

// 定義用戶輸入
k = input.int(3, title="Number of Consecutive Candles for Long", minval=1)
k2 = input.int(3, title="Number of Consecutive Candles for Short", minval=1)
stopLossTicks = input.int(500, title="Stop Loss (Ticks)")
takeProfitTicks = input.int(500, title="Take Profit (Ticks)")
iTGT = input.int(200,"iTGT")  // 移動停利點
iPcnt = input.int(50,"iPcnt")  // 移動停利%

var float TrailValue = 0
var float TrailExit = 0
var float  vMP = 0

BarsSinceEntry = ta.barssince(strategy.position_size == 0)

vMP := strategy.position_size

// 创建一个包含键值对的字典
addArrayData(type, value) =>
    alert_array = array.new_string()
    array.push(alert_array, '"timenow": ' + str.tostring(timenow))
    array.push(alert_array, '"seqNum": ' + str.tostring(value))
    array.push(alert_array, '"type": "' + type + '"')
    alertstring = '{' + array.join(alert_array,', ') + '}'


// 定義條件變量
var int countLong = 0  // 記錄連續多頭條件成立的次數
var int countShort = 0 // 記錄連續空頭條件成立的次數

// 計算連續大於或小於前一根的收盤價格的次數
if close > close[1]
    countLong += 1
    countShort := 0 // 重置空頭計數
else if close < close[1]
    countShort += 1
    countLong := 0 // 重置多頭計數
else
    countLong := 0
    countShort := 0

// 開設多頭倉位條件
if countLong >= k
    strategy.entry("Long Entry", strategy.long)
    strategy.exit("Exit Long", "Long Entry", loss=stopLossTicks, profit=takeProfitTicks)
    

if vMP>0
    TrailValue := ta.highest(high,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue > strategy.position_avg_price + iTGT * syminfo.minmove/syminfo.pricescale and close < TrailExit
        
        strategy.close("Long Entry", comment = "Trl_LX"+ str.tostring(close[0]))
// 開設空頭倉位條件
if countShort >= k2
    strategy.entry("Short Entry", strategy.short)
    strategy.exit("Exit Short", "Short Entry", loss=stopLossTicks, profit=takeProfitTicks)

if vMP<0    
    TrailValue := ta.lowest(low,BarsSinceEntry)
    TrailExit := TrailValue - iPcnt*0.01*(TrailValue - strategy.position_avg_price)
    if TrailValue < strategy.position_avg_price - iTGT * syminfo.minmove/syminfo.pricescale and close > TrailExit
        
        strategy.close("short60", comment = "Trl_SX"+ str.tostring(close[0]))