2つの要素を組み合わせた反転取引戦略


作成日: 2023-12-27 17:22:31 最終変更日: 2023-12-27 17:22:31
コピー: 0 クリック数: 573
1
フォロー
1621
フォロワー

2つの要素を組み合わせた反転取引戦略

概要

この戦略は,まず価格反転信号を利用して取引し,その後,トレンドフィルタリング指標と組み合わせてフィルタリングを行い,二重要因駆動を実現します. 価格反転部分は123反転取引システム,トレンドフィルタリング部分は抽出トレンド取引システム ((Extracting The Trend,ETT) を採用し,両者は二重要因駆動を形成する反転取引戦略を組み合わせます.

戦略原則

価格反転部分は123反転システムを使用する.このシステムは,Ulf Jensenの”私はどのように先物市場で3倍の資金を稼ぐか”の183ページに由来する.その取引シグナルの生成には以下の条件があります.

  1. 前日閉店価格は前2日閉店価格より低い
  2. 現在の閉店価格は前日の閉店価格より高い
  3. 9日遅いK線50未満

逆に,この条件を満たす場合,

  1. 前日閉店価格が前2日閉店価格より高かった
  2. 現在の閉店価格は前日の閉店価格より低い
  3. 9日,高速K線が50を超えている.

上記の条件を満たす場合,出売シグナルが発生します.

この部分の反転取引システムは,価格が短期的に反転したときにその動きを捉えることを目的としている.

トレンドフィルター部分では,抽出トレンドシステム ((ETT) を使用する. ETTシステムは,業績の波と均線の組み合わせによってトレンドの方向を判断する. この戦略では,その主な役割は,価格逆転シグナルを検証し,明確なトレンドがないときに逆転操作を避けることである.

この戦略は2つの子戦略の取引シグナルを組み合わせ,最終的に二因子駆動の反転取引を実現する.

優位分析

双因子組合の逆転取引戦略は,子戦略の組み合わせによって,それぞれの優位性を統合し,主に以下のように表現される.

  1. 123反転策は,短期的な価格反転の機会を捉える
  2. ETT戦略は,明確なトレンドシナリオを効果的にフィルタリングし,反転取引のリスクを回避します.
  3. 信号の質を向上させる双要素駆動

したがって,この戦略は,トレンドの判断が正しいと仮定して,反転操作を行うため,取引システムの全体的なパフォーマンスを向上させるため,有効な反転信号を効果的にフィルターすることができます.

リスク分析

双要素組合せ反転取引戦略には以下のリスクがある.

  1. 逆転後,価格が元のトレンドを継続するリスク.例えば,コンパイラーのパラメータが正しく設定されず,逆転信号があまりにも頻繁に発生し,トレンドの機会を逃してしまう.
  2. ETT戦略の判断ミスによるリスク.ETT戦略自体が判断ミスを生じ,反転取引の損失を引き起こす.
  3. 双要素駆動機構そのものが存在するリスク。2つの取引信号が同時に誤判する確率は,単一の信号で誤判する確率はより低いが,同時に誤判する確率は依然として存在し,損失を拡大する。

上記のリスクを軽減するために,コンパイラパラメータを調整し,反転戦略とETT戦略を最適化し,判断をより正確なものにするとともに,反転取引の止損範囲を適切に緩和することを考えることができます.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 逆転システムのパラメータを最適化して,最適なパラメータの組み合わせを見つける
  2. ETTシステムのパラメータを最適化し,トレンド判断の精度を向上させる
  3. ETTと他の価格逆転策を試す
  4. ポジションスケール制御の追加
  5. 動機付けの要素を増やすこと

戦略的思考と主要な取引信号の論理を保持する前提で,パラメータと組み合わせで最適化することで,より良い反射結果が得られる見込みである.

要約する

双因子組合せ反転取引戦略は,価格反転信号とトレンドフィルター信号の有機的結合により,複数の因子判断に基づく取引システムを実現する.単一の反転信号と比較して,この戦略は,短期間の価格反転を確実に捕捉し,明確なトレンドシナリオの偽信号を回避することで,信号の質を向上させることができる.パラメータの最適化および他の因子を増やすことで,より良いパフォーマンスを期待できる.

ストラテジーソースコード
/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-26 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 03/08/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
// Extracting The Trend
// The related article is copyrighted material from Stocks & Commodities Mar 2010
//
// 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


ETT(Length,Delta,Trigger) =>
    pos = 0
    xBandpassFilter = 0.0
    xPrice = hl2
    beta = cos(3.1415 * (360 / Length) / 180)
    gamma = 1 / cos(3.1415 * (720 * Delta / Length) / 180)
    alpha = gamma - sqrt(gamma * gamma - 1)
    xBandpassFilter := 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(xBandpassFilter[1]) - alpha * nz(xBandpassFilter[2])
    xMean = sma(xBandpassFilter, 2 * Length)
    pos :=iff(xMean > Trigger, 1,
	       iff(xMean < Trigger, -1, nz(pos[1], 0)))     
    pos

strategy(title="Combo Backtest 123 Reversal & Extracting The Trend", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthETT = input(20, minval=1)
Delta = input(0.5)
Trigger = input(0)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posETT = ETT(LengthETT,Delta,Trigger)
pos = iff(posReversal123 == 1 and posETT == 1 , 1,
	   iff(posReversal123 == -1 and posETT == -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 )