逆転と線形回帰の交差コンボ戦略

作者: リン・ハーンチャオチャン, 日時: 2023-09-26 15:56:48
タグ:

概要

この戦略は,多要素駆動のコンボ取引戦略を実装するために123逆転戦略と線形回帰截止戦略を組み合わせます.123逆転戦略は,過去2取引日の間の価格関係を判断し,ストック指標を組み合わせて逆転信号を決定します.線形回帰截止戦略は,価格とトレンドラインの関係を判断し,取引信号を生成するために線形回帰分析を使用します.両戦略は互いを検証し,誤った信号を効果的にフィルターすることができます.

戦略原則

123 逆転戦略

戦略は以下の原則に基づいています.

  1. 過去2日間の閉じる価格関係が,今日の閉じる価格が昨日より高く,ストック・ファストラインがスローラインより低い場合,上昇傾向の逆転信号があると考えられます.

  2. 過去2日間の閉じる価格関係が,今日の閉じる価格が昨日の価格より低く,ストック・ファストラインがスローラインより高くなった場合,下落逆転信号があると考えられます.

裁定規則は以下のとおりです

  • 今日の閉じる価格 > 昨日の閉じる価格とストック・ファスト・ライン <ストック・スロー・ラインとストック・ファスト・ライン > の設定パラメータが生成された場合,購入信号が生成されます.

  • 今日の閉店価格 < 昨日の閉店価格とストック・ファストライン > ストック・スローラインとストック・ファストライン < 設定パラメータ,売り信号を生成する

戦略には,STOCH指標のパラメータを設定する必要があります.STOCH計算のためのKラインサイクル長さ,スムージングサイクルKSSTOCHのスムージングサイクル,スムージングサイクルDSTOCHのスローライン長さ,STOCHのスムージングライン判断の値レベル.

線形回帰切断戦略

この戦略は,価格と線形回帰傾向線間の関係を判断するための線形回帰分析に基づいています. 判断規則は以下のとおりです.

  • 閉じる価格が線形回帰切断値よりも大きい場合,買い信号が生成されます.

  • 閉じる価格が線形回帰切断値より小さい場合,売り信号が生成されます.

戦略は,線形回帰サイクル LengthLRI と線形回帰入力データソース xSeria を設定する必要があります.

コンボ戦略

コンボ戦略は,実際の取引オーダーを生成するために123逆転戦略と線形回帰傍受戦略の両方の同時購入/販売信号を必要とし,誤った信号を効果的にフィルタリングし,取引パフォーマンスを向上させます.

利点分析

この戦略には以下の利点があります.

  1. 複数の要因によって 誤った信号を効果的にフィルタリングし 信号の質を向上させる

2つの異なるタイプの戦略の組み合わせにより,実際にオーダーを出すには両方の戦略からの信号が必要です.この多要素検証メカニズムは,戦略から偶発的な間違った信号をフィルタリングし,不必要な取引を削減し,信号品質を効果的に改善することができます.

  1. 価格とトレンドの関係をリアルタイムでモニタリングすることで 罠にはまらない

線形回帰切断は,価格とトレンドラインの関係をリアルタイムで反映することができる.価格がトレンドから大幅に逸脱した場合,ポジション方向を調整する戦略を迅速に提示する. これにより,タイムリーストップ損失を可能にし,歴史的なトレンドに囚われないようにする.

  1. トレンドと逆転の両方の取引機会を考慮する

線形回帰戦略は,トレンドの買い売りポイントを特定するのに優れている. 123の逆転戦略は,逆転点を特定することに焦点を当てている.この2つの戦略は,トレンド取引と逆転取引の利点を組み合わせることができる.

  1. 戦略のパラメータ最適化

両戦略は,組み合わせた戦略の効果を最適化するために,異なる品種と異なるトレンドに最適化できる特定のカスタマイゼーションパラメータを提供します.

リスク分析

この戦略には次のリスクもあります

  1. 多因子運転者は 機会を逃すかもしれない

両方の戦略の取引シグナルを満たす必要性は,単一の戦略に頼ることで利益を得ることができるいくつかの機会を逃すことになります.もし一つの戦略が弱まれば,それは全体的な取引パフォーマンスを引きずり下げるでしょう.

  1. 線形回帰には遅延がある

線形回帰は,計算のためにいくつかの歴史的データを必要とし,突然の出来事に対してリアルタイムで反応できないため,いくつかの遅れが生じる.大きな価格ギャップがある場合,線形回帰トレンドラインの調整に時間がかかるため,この期間中に間違った信号を生む可能性があります.

  1. 合理的なパラメータ最適化が必要

両方とも適切なパラメータ選択を必要とし,いくつかの品種では独立して調整する必要がある場合があります.間違ったパラメータ選択は戦略の有効性を大幅に低下させます.

リスクは以下の方法によって軽減できます.

  1. 適切なコンボ信号をリラックスし,多くの機会を逃すのを防ぐために条件をトリガー

  2. 線形回帰を代替する傾向指標を組み合わせて,よりリアルタイムな傾向判断を得ます

  3. パラメータ最適化やパラメータ選択の改善を支援するために機械学習方法を使用する

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

この戦略は,次の方法でさらに最適化できます.

  1. パラメータ最適化のために機械学習方法を使用する

歴史データを収集し,パラメータ最適化目標を設計し,遺伝子アルゴリズムやベイジアン最適化などの機械学習アルゴリズムを使用して,最適なパラメータ組み合わせを探します.

  1. ストップ・ロスのメカニズムを追加

ストップ・ロスのルールは,ATR,トレンドインジケーターなどに基づいて設定され,取引ごとに最大損失を制御できます.

  1. 入口と出口ロジックを最適化

移動平均フィルターやボリンジャー帯などの補助条件は,取引信号に基づいて追加され,ポジション調整の頻度を削減し,罠にはまらないようにすることができます.

  1. 感情の分析を組み合わせる

市場参加者の感情を判断し,取引決定を支援するために自然言語処理技術を使用します.

  1. 機械学習予測モジュールを追加する

戦略決定の重要な基準として価格を予測するために LSTM や GRU などのディープラーニングモデルを使用します

概要

この戦略は123逆転戦略と線形回帰傍受戦略を組み合わせ,多要素駆動量的な取引を実装する.検証メカニズムは誤った信号を効果的にフィルタリングし,逆転とトレンド取引機会を捕捉することができます.しかし,戦略にはパラメータ最適化とリスク制御メカニズムの拡大に注意を払う必要がある特定の遅れリスクもあります.パラメータ最適化と機能拡張のための機械学習と他のテクノロジーを組み合わせることは,戦略を探求するための価値のあるさらなる最適化方向です.


/*backtest
start: 2023-09-18 00:00:00
end: 2023-09-19 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 25/01/2021
// 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
// Linear Regression Intercept is one of the indicators calculated by using the 
// Linear Regression technique. Linear regression indicates the value of the Y 
// (generally the price) when the value of X (the time series) is 0. Linear 
// Regression Intercept is used along with the Linear Regression Slope to create 
// the Linear Regression Line. The Linear Regression Intercept along with the Slope 
// creates the Regression line.
//
// 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

LRI(Length,xSeria) =>
    pos = 0.0
    xX = Length * (Length - 1) * 0.5
    xDivisor = xX * xX - Length * Length * (Length - 1) * (2 * Length - 1) / 6
    xXY = 0.0
    for i = 0 to Length-1
    	xXY := xXY + (i * xSeria[i])
    xSlope = (Length * xXY - xX * sum(xSeria, Length)) / xDivisor
    xLRI = (sum(xSeria, Length) - xSlope * xX) / Length
    pos:= iff(close > xLRI, 1,
           iff(close < xLRI, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Line Regression Intercept", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Line Regression Intercept ----")
LengthLRI = input(14, minval=1)
xSeria = input(title="Source", type=input.source, defval=close)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posLRI = LRI(LengthLRI,xSeria)
pos = iff(posReversal123 == 1 and posLRI == 1 , 1,
	   iff(posReversal123 == -1 and posLRI == -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 )

もっと