ダブル・タートル・ブレークスルー戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月28日 16:25:41
タグ:

img

概要

ダブルタートルブレークスルー戦略は,タートルトレードブレークスルー戦略とリンダ・ラシュケの移動ストップ損失原則を統合し,優れたブレークスルーパフォーマンスと厳格なリスク管理を備えています.この戦略は,同時に価格のブレークスルーを上下に監視し,ブレークスルーが発生するとロングまたはショートポジションを確立し,ポジションを管理するために移動ストップ損失と移動テイクプロフィートを使用します.

戦略原則

基本論理は,大きなサイクルの高点で小サイクルの高点を突破するとショート,大きなサイクルの低点で小サイクルの低点を突破するとロングである.ポジションを開いた後,移動ストップ損失を設定し,移動利益を得て,リスクを確認するために最初にストップ損失を設定する.保有量がセットに蓄積すると,利益を得て,次のサイクルのストップ損失オーダーをキャンセルし,その後ポジションの半分を終了し,利益をロックし,スプレッドを追跡するために移動ストップ損失と移動利益を得て設定する.

具体的な操作段階は以下の通りです.

  1. 大サイクルの高点前高点 (20サイクル) と小サイクルの高点前高点 (4サイクル) を計算します

  2. 最新のK線の高値が prevHighより大きく, prevHighが smallPeriodHighより大きくなった場合,大サイクルの高値が小サイクルの高値を突破することを示します.この時点で,ポジションがない場合はショートします.

  3. ポジションを開いた後,移動ストップ・ロスを設定します.ストップ・ロスをキャンセルする前に,ポジションが逆転するのを待って,ストップ・アウトを防止します.

  4. 保有量が設定された移動取利益サイクル番号 (現在0サイクル) に達すると,次のサイクルでポジションの半分を退場し,移動ストップ損失と移動取利益を設定してスプレッドを追跡し,利益をロックします.

  5. 低点の突破の場合,大きなサイクル低点と小さなサイクル低点の突破関係に基づいて,ロングポジションが確立されます.

利点分析

これは非常に包括的な突破戦略であり,以下の利点があります.

  1. 双サイクルタートル取引を組み合わせることで 突破シグナルを効果的に識別できます

  2. 移動ストップ損失と移動取利益の技術を使用することで リスクを厳格に制御し 大きな損失を回避できます

  3. 2つの段階で退場し 利益の半分を一度に取ります その後,利益を引き取り,利益を閉じ込めて 完全に退場します

  4. 長期取引と短期取引の両方を考慮し,交替する多重空き市場の特徴を合わせる.

  5. 優れたバックテスト結果と 強力な実際の取引パフォーマンス

リスク分析

主なリスクと対策は以下のとおりです.

  1. 誤った突破の危険性.突破の有効性を確保するためにサイクルパラメータを適切に調整する.

  2. 追いかけるリスクは上昇し,殺すリスクは低下します.傾向とパターンとフィルタリングを組み合わせ,傾向の終わりにポジションを開くのを避ける必要があります.

  3. ストップ損失が消える危険性.十分なスペースを確保するために,ストップ損失幅を適切に緩める.

  4. 過度に敏感な移動ストップ損失の危険性.不要なストップアウトを避けるためにストップ損失後にスライド設定を調整する.

オプティマイゼーションの方向性

戦略は,次の側面でも最適化できます.

  1. ボリュームブレークスルーフィルターを追加してブレークスルーの真性を確認します.

  2. トレンドの終わりにポジションを開くのを避けるために,トレンド判断指標を追加します.

  3. 突破時のタイミングを決めるために 複数の時間サイクルを組み合わせます

  4. パラメータのダイナミック最適化のための機械学習アルゴリズムを増やす.

  5. 統計的仲裁のための他の戦略と組み合わせます

概要

ダブルタートルブレークスルー戦略は,安定したリターンを確保しながら高い勝利率を確保するために,ダブルサイクル技術,ブレークスルー理論,厳格なリスク管理方法を包括的に使用する.この戦略モデルはシンプルで明確で,理解し適用しやすい,そして優れた定量戦略である.この戦略には依然として最適化の可能性が大きい.投資家は,さらにより良い取引システムを作成するために,この基盤で革新することができます.


/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Turtle soup plus one", shorttitle = "Turtle soup plus one", overlay=true)

bigPeriod = input(20)
smallPeriod = input(4)
takeProfitBars = input(0)
trailingStop = input(5, title = "Trailing stop percentages")
if (strategy.position_size == 0)
    strategy.cancel("Long")
    strategy.cancel("Short")
    strategy.cancel("Stop")



stopLossPrice = 0.1
stopLossPrice := nz(stopLossPrice[1])
takeProfitStarted = false
takeProfitStarted := nz(takeProfitStarted[1])

prevHigh = highest(high, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodHigh = highest(high, smallPeriod - 1)[1]
if (high > prevHigh and prevHigh > smallPeriodHigh and close > prevHigh and strategy.position_size == 0)
    strategy.order("Short", strategy.short, stop = prevHigh)

if strategy.position_size < 0 and strategy.position_size[1] == 0
    stopLossPrice := high[1]
    strategy.order("Stop", strategy.long, qty = -strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size < 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close < strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.long, qty = ceil(-strategy.position_size / 2), stop = close)
    if (strategy.position_size != -1)
        strategy.exit("ExitFull", "Short", qty = -strategy.position_size - ceil(-strategy.position_size / 2), loss = stopLossPrice, trail_price  = close, trail_offset = -(close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)
        

prevLow = lowest(low, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodLow = lowest(low, smallPeriod - 1)[1]
if (low < prevLow and prevLow < smallPeriodLow and close < prevLow and strategy.position_size == 0)
    strategy.order("Long", strategy.long, stop = prevLow)

if strategy.position_size > 0 and strategy.position_size[1] == 0
    stopLossPrice := low[1]
    strategy.order("Stop", strategy.short, qty = strategy.position_size, stop = stopLossPrice)
    takeProfitStarted := false

if (strategy.position_size > 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close > strategy.position_avg_price and not takeProfitStarted)
    takeProfitStarted := true
    strategy.cancel("Stop")
    strategy.order("ExitHalf", strategy.short, qty = ceil(strategy.position_size / 2), stop = close)
    if (strategy.position_size != 1)
        strategy.exit("ExitFull", "Long", qty = strategy.position_size - ceil(strategy.position_size / 2),loss = stopLossPrice, trail_price  = close, trail_offset = (close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2038, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()

もっと