二重逆転仲裁戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-06 09:58:04
タグ:

img

概要

ダブルリバーサル・アービタージ戦略は,ダブルリバーサル・インディケーターを統合したアービタージアルゴリズムである.123リバーサル・システムとガン・スウィング・オシレーターサブ戦略を組み合わせ,両サブ戦略が同時にシグナルを発し,アービタージ操作を行うときに取引信号を生成する.

戦略の論理

この戦略は2つのサブ戦略で構成されています.

  1. 123リバースシステム: ウルフ・ジェンセン著の"How I Tripped My Money in The Futures Market" (先物市場での自分のお金を3倍にした方法) の183ページから.その取引規則は,閉じる価格が前閉じる価格より高く,2日前の閉じる価格より低くなったとき,スローK線が50を下回るときにロング;閉じる価格が前閉じる価格より低く,2日前の閉じる価格より高くなったとき,高速K線が50を超えるとショートする.

  2. ガン・スウィング・オシレーター: ロバート・クラウシュの著書"A W.D. Gann Treasure Discovered"から改訂された.特定の期間における最高値と最低値の上昇と減少を計算することによって,市場の変動の方向性を判断する.

このアービトラージ戦略の取引論理は,二つのサブ戦略の信号方向が一致しているとき,実際の取引信号が生成される.長信号は,両方のサブ戦略が同時に長信号を発信するときに,ショート信号は,両方のサブ戦略が同時に短信号を発信するときに発生する.

利点分析

この戦略の最大の利点は,2つのサブ戦略のシグナルを統合することで,誤ったシグナルを効果的にフィルタリングし,取引シグナルの精度を向上させることができるということです.この2つのサブ戦略にはそれぞれ独自の強みがあります.123逆転システムは突然の逆転傾向を捉えることができ,ガンスウィングオシレーターはトレンド逆転の成熟度を決定することができます.両方を組み合わせることで,取引シグナルがより信頼性が高くなり,それによって戦略の安定性が向上します.

リスク分析

この戦略の主なリスクは,両サブ戦略からの不一致な取引信号の方向性の確率が比較的大きいことであり,取引信号が不十分になる可能性があります.また,サブ戦略自体も,誤った信号の一定のリスクがあります.これらの2つの要因の組み合わせは,戦略のための取引数が不十分になり,市場機会を完全に把握できない可能性があります.

リスクを軽減するために,サブ戦略のパラメータを適度に取引頻度を増やすように調整したり,偽信号をフィルタリングするのに役立つ他の指標を組み合わせることもできます.二つのサブ戦略の間の信号に大きな偏差がある場合,より信頼性の高いものだけに従うことも検討できます.

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

戦略は以下の側面で最適化できます.

  1. 取引頻度を最適化するために,サブ戦略のパラメータを調整する.
  2. 信号の質を改善するために他の技術指標の判断を追加する.
  3. 異なる製品と時間枠に基づいて,サブ戦略の重みを最適化する.
  4. 単一の取引の損失を制御するためにストップ損失メカニズムを追加します.

概要

ダブルリバーサル・アービタージ戦略は,二つの異なるタイプのリバーサル戦略を統合することで,比較的強い取引信号を形成する.それはノイズを効果的にフィルタリングし,市場のリバーサル機会を把握するのに適した信号品質を改善することができる.しかし,サブ戦略からの不一致な信号の確率は比較的大きいため,取引頻度が不十分になる可能性があります.また,組み合わせ戦略のパラメータ設定自体はかなり複雑であり,最適な結果を達成するために十分なテストと最適化が必要です.


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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 04/11/2020
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// The Gann Swing Oscillator has been adapted from Robert Krausz's book, 
// "A W.D. Gann Treasure Discovered". The Gann Swing Oscillator helps 
// define market swings. 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

    
GannSO(Length) =>
    pos = 0.0
    xGSO = 0.0
    xHH = highest(Length)
    xLL = lowest(Length)
    xGSO:= iff(xHH[2] > xHH[1] and xHH[0] > xHH[1], 1,
             iff(xLL[2] < xLL[1] and xLL[0] < xLL[1], -1, nz(xGSO[1],0)))
    pos := iff(xGSO > 0, 1,
    	     iff(xGSO < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Gann Swing Oscillator", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthGSO = input(5, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posGannSO = GannSO(LengthGSO)
pos = iff(posReversal123 == 1 and posGannSO == 1 , 1,
	   iff(posReversal123 == -1 and posGannSO == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

もっと