資源の読み込みに... 荷物...

K 連続キャンドル ブール・ベア戦略

作者: リン・ハーンチャオチャン開催日:2024年5月17日 13:54:06
タグ:エイマATR

img

概要

この戦略は,連続して上下するキャンドルの数に基づいて牛または熊市場を決定し,それに応じて取引を行います. 閉じる価格が,前回のキャンドルが指定された数回閉じるよりも連続して高くなった場合,ロングポジションに入ります. 閉じる価格が,前回のキャンドルが指定された数回閉じるよりも連続して低い場合,ショートポジションに入ります. ストップ損失と取利益が設定され,利益を保護するためにトレーリングストップメカニズムが導入されます.

戦略原則

  1. 連続した上昇と下落の条件が満たされる回数を記録する. 閉局が前のキャンドルより高くなった場合,上昇カウントは1増加し,下落カウントは0にリセットされます. 閉局が低い場合,上昇カウントは1増加し,下落カウントは0にリセットされます. そうでなければ,両方のカウントは0にリセットされます.
  2. 株価上昇値が k に達すると ストップ・ロストでロングポジションを押して 利益を得ます
  3. ロングポジションでは,エントリー後の最高価格を記録する.最高価格がエントリー価格を iTGT 最低価格変動単位で上回り,閉じる値が最高価格を下回ると iPcnt%で,ポジションを閉じる.
  4. 下落値が指定された数 k2 に達すると,ストップ・ロストでショートポジションを入力し,利益を得ます.
  5. ショートポジションについては,エントリー後の最低価格を記録する.最低価格が iTGT最小価格変動単位によるエントリー価格を下回り,低価格をiPcnt%上回る接近リバウンドが起こると,ポジションを閉じる.

戦略 の 利点

  1. シンプルで理解しやすい 明確な論理で 連続したキャンドルに基づいた 取引の決定をします
  2. 価格が有利な方向に一定の距離を移動した後,利益を積極的に保護するためのトレーリングストップメカニズムを導入します.
  3. ストップ・ロスを設定して 利益を取ることで リスクを効果的に制御し 利益を固定できます
  4. 異なる市場や取引スタイルに合わせて調整可能なパラメータ

戦略リスク

  1. 不安定な市場では,ポジションの頻繁な開閉は,大きなスライドコストを引き起こす可能性があります.
  2. 連続したキャンドル番号の判断は,市場の騒音によって影響され,頻繁に信号が発信される可能性があります.
  3. 固定ストップ・ロース・とテイク・プロフィートのレベルは,市場の変動に適応しない可能性があります.

戦略の最適化方向

  1. 動向の強さと方向性を判断するのに役立つ移動平均値や波動性などのより多くの技術指標を導入する.
  2. ATRをベースに引き戻しパーセントを調整するなど,遅延停止のトリガー条件を最適化する.
  3. よりダイナミックなストップ・ロストと,トライリング・ストップやステップ・テイク・プロフィートなどのメソッドを採用する.
  4. パラメータを最適化して,異なる市場や楽器に最適な組み合わせを見つけます.

概要

この戦略は,リスクを制御するためにストップ・ロスを設定し,利益を得るためにキャンドルの連続性を通じて牛と熊のトレンドを捉える.トレーリング・ストップの導入は利益をより良く保護することができる.しかし,シグナル信頼性のさらなる最適化を要求する不安定な市場で頻繁な信号を生成することがあります.また,ストップ・ロスの設定と利益を得ることは,動的な市場の変化に適応するためにより柔軟であることができます.全体として,戦略は,トレンド市場に適したシンプルで明確なアイデアを持っていますが,最適化のための余地があります.


/*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]))






関連性

もっと