市場反転のキーポイント戦略


作成日: 2023-12-15 10:37:01 最終変更日: 2023-12-15 10:37:01
コピー: 0 クリック数: 754
1
フォロー
1621
フォロワー

市場反転のキーポイント戦略

概要

この戦略は,ウィリアム指数の突破原理を採用し,特定の形状のK線と組み合わせて,高効率の多空開設ポジションと平置ポジションのモデルを設計し,市場状況が逆転する重要なポイントで正確に多空を行うことができ,中短線トレンドを捕捉し,余分な利益を得ることができる.

戦略原則

この策略は,ウィリアム指数の分岐点を用いて反転信号を判断する.上または下分岐が発生すると,K線実体方向と一致した場合,取引信号を生成する.

具体的には,策略ではカスタム指標WMX Williams Fractalsを定義している.この指標は,上型 (upFractal) と下型 (dnFractal) を判断するために因数関数を使用している.

上型判定の論理は,現在のK線の最高値が,前のn根K線の最高値より高い (nは可調参数である) であり,このようにして突破上型が形成される.

下型判断の論理は,現在のK線の最低値が,以前のn根K線の最低値より低いので,突破下型が形成される.

上型と下型を分別した後は,それらの変化があったかどうかを判断する.すなわち,無から有へ,または有から無へ.このときの分型は,まだ形成されていなかったので,逆転の可能性が高いことを意味する.

その後,K線実体方向を組み合わせて,特定の取引信号を判断する.上型が形成され,CloseがOpenより高いときは,多行;下型が形成され,CloseがOpenより低いときは,空行する.

戦略的優位性

  1. ウィリアムズ指数の分型点を用いて逆転のタイミングを判断する,これは成熟した信頼できる技術指標である

  2. K線実体方向と結合して取引信号を確認し,非トレンドゾーンでの乱切を避ける

  3. パラメータが少なく,タイプ化周期をn回調整するだけで,テストと最適化が容易

  4. ポジション開設規則の柔軟な設定,例えばポジションサイズ,平仓条件など,現場で簡単に適用できる

戦略リスク

  1. 格差が形成された後,状況が完全に逆転するとは限らないが,トレンドの判断が必要である.

  2. 止損位置の設定は,騒音の大きな幅で止損を防ぐために注意が必要です.

  3. パラメータnは,異なる品種に応じて調整する必要があります.周期が大きすぎるとか小さすぎると,効果に影響します.

解決策は

  1. 移動平均などの指標を足して大トレンドを判断し,逆転のポジションを避ける

  2. ダイナミック・トラッキング・ストップまたは合理的な撤回制限・ストップ

  3. ウォーク・フォワード・アナリシス (Walk Forward Analysis) を使ってパラメータを最適化して,最適なパラメータを見つける.

戦略最適化の方向性

  1. 分類型に基づく反転戦略は,複数の利益を得て再び反転して損失を招くような状況が容易である.トレンドフィルターを追加し,取引範囲をさらに制限し,不要な反転取引を減らすことを考えることができます.

  2. 現在,止損方法は比較的単純で,動きを効果的に追跡できない.移動止損,時間止損,動的止損などの止損方法を追加してみることができます.

  3. 現在では,K線の実体方向のみを判断する.影線,閉盘位置など,より多くのK線情報を考慮すれば,より正確な取引信号を設計することができる.

要約する

この戦略は,技術指標に基づく逆転戦略の1つである.これは,ウィリアム指数の分型を使用して,指標の株の重要な時点での変化の傾向を捉え,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 )