多重戦略に基づく反転と重力中心統合取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-03 16:51:03
タグ:

img

概要

この戦略は,二重取引信号を統合することで,より安定的かつ効率的な取引決定を実現する.一つは価格逆転信号とストカストティック指標を組み合わせた逆転戦略であり,もう一つはセンターラインと価格チャネルのブレイクアウト戦略である.この2つの戦略の取引信号は論理的に ANDED される.つまり,2つの戦略が同時に同じ方向に信号を発行するときにのみポジションが開かれる.この種のマルチ戦略統合は,いくつかの無効な信号をフィルタリングし,より信頼性の高い取引決定を達成することができます.

戦略原則

逆転戦略の部分は,価格が連続して2日間の逆転パターンを示し,ストキャスト指標がオーバーバイトまたはオーバーセールエリアに入ると取引信号を生成する.これは,価格逆転信号とオーバーバイト/オーバーセール信号の両方を二重確認のために使用することを可能にします.重力の中心部は,チャネルが壊れたときに取引信号を生成するために価格の線形回帰中央線の周りに上下チャネルを構築します.チャネルブレイクシグナルはまた,価格が方向的なトレンド動きを経験し始めていることを暗示します.

この2つの戦略はそれぞれ価値とトレンドの機会を捉える.戦略信号を論理的に AND することで,2つの戦略が同時に同じ方向に信号を発行するときにのみポジションが開く.これはいくつかの不有効な信号を効果的にフィルタリングし,最終戦略をより信頼性のあるものにすることができます.

利点分析

この戦略の最大の利点は,シグナルの安定性と信頼性である.逆転とトレンド戦略の組み合わせは,主要な動きを見逃さずに同時に逆転とトレンド取引の機会を捉える.一方,論理的AND操作は,いくつかの無効な信号をフィルタリングし,最終戦略をより信頼性があり,ノイズに騙されないようにします.

また,逆転とトレンド戦略の組み合わせにより,複数のタイムフレームで安定した運用も達成できます.逆転戦略は,短期的なオーバーバイト/オーバーセールシグナルを使用し,重心戦略は,中期および長期間の移動平均値に基づいています.補完的なタイムフレームは持続的かつ安定した取引機会を生成することができます.

リスク分析

この戦略の最大のリスクは,二重戦略からの信号のマッチングに失敗することであり,取引信号が不十分になる.これは価格が範囲に限定され,明確な方向性トレンドなしに統合されたときに起こる可能性があります.価格が長期間にわたって横向きパターンで振動すると,逆転信号とトレンド信号が生成されることが困難になり,取引機会が少なくなります.

さらに,デュアル戦略の論理的AND操作は,単一の戦略からいくつかの機会を逃すこともあります. 唯一の戦略が有効な取引信号を生成すると,ポジションが開かれません.これは特定の機会コストを引き起こす可能性があります.

リスクを軽減するために,戦略信号のマッチングとポジション開設を容易にするため,パラメータは適度に緩和され,より多くのトレンドシンボルを取引し,より多くの取引機会を得るために,株式選択メカニズムも導入できる.

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

この戦略を最適化できる主な2つの側面があります.

まず,パラメータ最適化である.ストーチ指標やセンターラインチャネルを含むパラメータは,よりアライナインされた信号を得るためにさらにテストおよび最適化することができる.これはより多くのバックテストを通じて達成できる.

2つ目は,株式選定操作に似たメカニズムを導入することである.この戦略は明確なトレンドを持つ株式により適しているため,特定の条件を満たす株が特定の指標に基づいて取引するために選択できれば,全体的な戦略パフォーマンスを大幅に改善する.これは,業界回転トレンド,移動平均システムなどと組み合わせた株式選定モジュールの設計を必要とする.

概要

この戦略は,逆転とトレンド戦略を統合することによって,取引決定の二重確認とマルチタイムフレームマッチングを達成し,同時に信号マッチングの困難により取引機会が減少する問題に直面する.次のステップの最適化は,より強力で安定した戦略パフォーマンスを獲得するために,パラメータとモジュール的な観点からアプローチすることができます.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 18/07/2019
// 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 indicator is based on moving averages. On the basis of these, the 
// "center" of the price is calculated, and price channels are also constructed, 
// which act as corridors for the asset quotations.
//
// 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

CenterOfGravity(Length, m,Percent, SignalLine) =>
    pos = 0
    xLG = linreg(close, Length, m)
    xLG1r = xLG + ((close * Percent) / 100)
    xLG1s = xLG - ((close * Percent) / 100)
    xLG2r = xLG + ((close * Percent) / 100) * 2
    xLG2s = xLG - ((close * Percent) / 100) * 2
    xSignalR = iff(SignalLine == 1, xLG1r, xLG2r)
    xSignalS = iff(SignalLine == 1, xLG1s, xLG2s)
    pos :=  iff(close > xSignalR, 1,
             iff(close < xSignalS, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Center Of Gravity", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthCoF = input(20, minval=1)
m = input(5, minval=0)
Percent = input(1, minval=0)
SignalLine = input(1, minval=1, maxval = 2, title = "Trade from line (1 or 2)")
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(LengthCoF, KSmoothing, DLength, Level)
posCenterOfGravity = CenterOfGravity(Length, m,Percent, SignalLine)
pos = iff(posReversal123 == 1 and posCenterOfGravity == 1 , 1,
	   iff(posReversal123 == -1 and posCenterOfGravity == -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 )

もっと