平均逆転ブレイクダウン戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月2日 15:34:22
タグ:

img

概要

この戦略の主な考え方は,価格が指定された期間中の最低価格を突破し,価格が平均値に戻るのを待って長引くかどうかを検出することです.これはトレンドフォロー戦略に属します.

戦略の論理

この戦略は,Pine Script の ta.lowest メソッドを用いて,指定された期間の最低価格 lowestLow を取得し,前期の最低価格 prevLow と比較します.

最新期間の最低価格が最低値Lowが前期間の最低価格のpreVelowよりも低い場合,ロングシグナルが起動します.ロングした後,指定された期間の最高価格 highestHighと比較します. 最新期間の最高価格が前回の最高価格よりも大きい場合は,ポジションを閉じる.

この戦略では,トレード頻度を制御するために,最も低い価格が1,2,3または4つの前の最低価格を連続して破る必要があるというトリガー条件を選択できます.

また,最も低い価格ラインを最も低い価格ラインと最も高い価格ラインを最も高い価格ラインとグラフに表示します.

利点分析

  • この戦略は,比較的高い勝利率で,新しい低点を突破した後,逆転傾向を捉えます.

  • 取引頻度を制御するために最低価格を割った数を選択することができます.

  • 線を描くことは 傾向の変化点を視覚的に判断するのに役立ちます

  • シンプルで明快な戦略論理 分かりやすく実行できます

  • 異なるストックと時間帯で設定して最適化できます

リスク分析

  • 偽底を突破することは 傾向の逆転点を決定できず 損失につながる可能性があります

  • 設定を最適化するために異なるパラメータの組み合わせをテストする必要がある.そうでなければ取引頻度は高すぎたり低くなり得る.

  • パラメータは異なるストックに調整され,機械的に適用されるべきではありません.

  • バックテスト期間が十分でない場合,オーバーフィッティングが発生する可能性があります.

  • ストップ・ロスはリスクをコントロールするために設定する必要があります.

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

  • ストップ・ロスの移動やストップ・ロスの後続などのストップ・ロスのメカニズムを追加し,取引損失を制限します.

  • 取引頻度と信号品質をバランスさせるために ブレイアウトの数を最適化します

  • 試験パラメータは,異なるストックと時間帯で

  • フィルターを追加して,様々な市場で頻繁に取引を避ける.

  • 逆トレンド取引を避けるため,トレンドインジケーターを追加することを検討します.

  • 異なる出口信号をテストします.

結論

この戦略は,典型的な平均逆転ブレイクアウト戦略である最低価格ブレイクアウトを監視することによって逆転機会を捉える.利点としては,シンプルさ,制御可能な頻度,およびさまざまな株に適用可能性がある.しかし,いくつかの偽ブレイクアウトリスクも備わっている.フィルターと最適化を追加し,リスクを制御することが必要である.包括的なテストと最適化により,安定した信頼性の高い取引システムになることができる.


/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © merovinh

//@version=5
strategy(title="Merovinh - Mean Reversion Lowest low",
     overlay = true,
     default_qty_type = strategy.percent_of_equity,
     initial_capital = 10000,
     default_qty_value = 10,
     commission_type = strategy.commission.percent,
     slippage = 1,
     commission_value = 0.04)

GR_TIME = 'Time Period'

bars = input(9, title = "Minimum number of bars", tooltip = "The minimum number of bars before updating lowest low / highest high")

numberOfLows  = input.string(defval='One', title='Number of broken lows', options=['One', 'Two', 'Three', 'Four'])

//Period

var prevLow = .0
var prevHigh = .0
var prevLow2 = .0
var prevLow3 = .0
var prevLow4 = .0

truetime = true


highestHigh = ta.highest(high, bars)
lowestLow = ta.lowest(low, bars)

if numberOfLows == 'One'
    if truetime and prevLow > 0 and lowestLow < prevLow
        strategy.entry('long', strategy.long)
if numberOfLows == 'Two'
    if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2
        strategy.entry('long', strategy.long)
if numberOfLows == 'Three'
    if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3
        strategy.entry('long', strategy.long)
if numberOfLows == 'Four'
    if truetime and prevLow > 0 and lowestLow < prevLow and prevLow < prevLow2 and prevLow2 < prevLow3 and prevLow3 < prevLow4
        strategy.entry('long', strategy.long)

if truetime and prevHigh > 0 and highestHigh > prevHigh
    strategy.close('long')


if prevLow != lowestLow
    prevLow4 := prevLow3
    prevLow3 := prevLow2
    prevLow2 := prevLow
    prevLow := lowestLow
prevHigh := highestHigh

plot(lowestLow, color=color.green, linewidth=1, title="Lowest Low Line")
plot(highestHigh, color=color.green, linewidth=1, title="Highest High Line")




もっと