WMX ウィリアムズ・フラクタル 逆転ピボット戦略

作者: リン・ハーンチャオチャン開催日:2023年12月15日 10:37:01
タグ:

img

概要

この戦略は,ウィリアムス指標のフラクタルブレイクアウト原理を採用し,特定のK線パターンを組み合わせて,効率的な長と短の開閉・閉閉閉モデルを設計する.中期・短期的トレンドを把握し,過剰な収益を得るために,市場の動きの重要な逆転点で正確に長と短を走ることができます.

戦略原則

この戦略は,反転信号を決定するためにウィリアムス指標のフラクタルポイントを使用する.上または下のフラクタルが現れ,K線エンティティ方向に一致すると,取引信号が生成される.

具体的には,WMX ウィリアムズフラクタルと呼ばれるカスタム指標が戦略で定義されている.それは上方フラクタル (upFractal) と下部フラクタル (dnFractal) を決定するために因数関数を使用する.

上のフラクタル論理は,現在のK線の最高価格が前のnK線の最高価格 (nは調整可能なパラメータ) より高く,上側のブレイクアウトフラクタルを形成する.

底辺フラクタル論理は,現在のK線の最低価格が前のnK線の最低価格よりも低いので,底辺ブレイクアウトフラクタルを形成します.

上のフラクタルと下のフラクタルを取得した後,それらは変化するか,つまり,ゼロから存在するか,その逆か判断します.この時点で,フラクタルが形成され,逆転の可能性が大きいことを示しています.

次に,特定の取引シグナルを決定するために,K線エンティティ方向と組み合わせます.上方フラクタルが形成され,Closeがオープンより高くなったとき,ロングします.下部フラクタルが形成され,Closeがオープンより低くなったとき,ショートします.

戦略 の 利点

  1. 逆転タイミングを決定するには,ウィリアムズ指標フラクタルポイントを使用します.それは成熟し信頼性の高い技術指標です.

  2. 取引シグナルを確認し,トレンドではない不安定な領域を避けるために,K線エンティティ方向を組み合わせます.

  3. 数少ないパラメータで フレクトル周期 n を調整するだけです テストし最適化しやすいです

  4. ポジションのサイズ,閉店条件など 柔軟な設定で リアルタイムの取引で簡単に適用できます

戦略リスク

  1. 市場が完全に逆転しない場合 傾向判断と組み合わせる必要があります

  2. ストップ・ロスのポジション設定は 騒々しい大きな変動によってノックアウトされるのを防ぐために慎重でなければなりません

  3. n パラメータは異なる製品に調整する必要があります. 期間が大きすぎたり小さすぎたりすると結果に影響します.

解決策:

  1. トレンドを判断し トレンドに反する取引を避けることができます

  2. ダイナミック・トライリング・ストップ・ロスを使用するか,合理的な引き下げベースのストップ・ロスを設定します.

  3. パラメータを最適化し,最適な値を見つけるためにウォーク・フォワード分析を使用します.

戦略の最適化方向

  1. フラクタル逆転戦略は,複数の利益を作り,その後再び逆転して損失を形成する傾向があります. 取引範囲をさらに制限し,不要な逆転取引を減らすためにトレンドフィルターを追加することを検討することができます.

  2. 現在のシンプルなストップ・ロスは,市場の動きを効果的に追跡することはできません. 移動ストップ・ロース,時間ベースのストップ・ロース,ダイナミックストップ・ロースなど,より高度なストップ・ロスのテクニックを試すことができます.

  3. 現在,K線エンティティ方向のみを使用します.ウィークや近所などのより多くのK線情報を考慮すると,さらに正確な取引信号を設計することができます.

結論

これは技術指標に基づいた逆転戦略である.これは,重要なピボットポイントで基軸のトレンドの変化を把握するためにウィリアムズ指標フラクタルを使用し,取引信号を形成するためにK線エンティティ方向と組み合わせ,過剰な収益を達成することを目的としています.

この戦略は,他の逆転戦略と比較して,明確な論理と分かりやすいパラメータ化デザインを特徴としています.便利なテストのために柔軟なパラメータ調整があり,ライブ取引でも直接適用できます.次のステップは,トレンドフィルタリング,ストップ損失方法などのさらなる最適化により戦略のパフォーマンスを改善することができます.


/*backtest
start: 2023-11-14 00:00:00
end: 2023-12-14 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/
// © WMX_Q_System_Trading

//@version=4
SystemName="WMX Williams Fractals strategy V4"
InitCapital = 1000000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 10
strategy(title=SystemName, shorttitle=SystemName, overlay=true, initial_capital=InitCapital, default_qty_type=strategy.percent_of_equity, default_qty_value=InitPosition, commission_type=strategy.commission.percent, commission_value=InitCommission)


//study("WMX Williams Fractals", shorttitle="WMX Fractals", format=format.price, precision=0, overlay=true)
// Define "n" as the number of periods and keep a minimum value of 2 for error handling.
n = input(title="Periods", defval=2, minval=2, type=input.integer)
h=close
l=close

factorh(High)=>
    upFractal = (                                                                                                          (High[n+2]  < High[n]) and (High[n+1]  < High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
             or (                                                                               (High[n+3]  < High[n]) and (High[n+2]  < High[n]) and (High[n+1] == High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
             or (                                                    (High[n+4]  < High[n]) and (High[n+3]  < High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
             or (                          (High[n+5] < High[n]) and (High[n+4]  < High[n]) and (High[n+3] == High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
             or ((High[n+6] < High[n]) and (High[n+5] < High[n]) and (High[n+4] == High[n]) and (High[n+3] <= High[n]) and (High[n+2] == High[n]) and (High[n+1] <= High[n]) and (High[n-1] < High[n]) and (High[n-2] < High[n]))
    upFractal
upFractal=factorh(h)
factorl(Low)=>
    dnFractal = (                                                                                                  (Low[n+2]  > Low[n]) and (Low[n+1]  > Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
             or (                                                                         (Low[n+3]  > Low[n]) and (Low[n+2]  > Low[n]) and (Low[n+1] == Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
             or (                                                (Low[n+4]  > Low[n]) and (Low[n+3]  > Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
             or (                        (Low[n+5] > Low[n]) and (Low[n+4]  > Low[n]) and (Low[n+3] == Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
             or ((Low[n+6] > Low[n]) and (Low[n+5] > Low[n]) and (Low[n+4] == Low[n]) and (Low[n+3] >= Low[n]) and (Low[n+2] == Low[n]) and (Low[n+1] >= Low[n]) and (Low[n-1] > Low[n]) and (Low[n-2] > Low[n]))
    
dnFractal=factorl(l)

U=valuewhen(upFractal[0]!= upFractal[1],l[0],3)
L=valuewhen(dnFractal[0]!=dnFractal[1],h[0],3)

longcon=crossover(close ,L) and close>open
shortcon=crossunder(close ,U) and close<open

if longcon
    
    strategy.entry("Long", strategy.long,   when = strategy.position_size <= 0 )
    
if  shortcon
    strategy.entry("Short", strategy.short,  when = strategy.position_size >= 0 )
        






もっと