ピボットポイントと最小二乗移動平均に基づくロングショートバランス戦略


作成日: 2023-12-25 17:47:11 最終変更日: 2023-12-25 17:47:11
コピー: 0 クリック数: 597
1
フォロー
1623
フォロワー

ピボットポイントと最小二乗移動平均に基づくロングショートバランス戦略

概要

これは,多頭だけの量的な取引戦略であり,枢軸点逆転戦略と最小二乗移動平均戦略の優位性を組み合わせている.この戦略は,牛市で主要トレンドをフォローして場内に入り,枢軸点上軌道形成を観察した後に逆転信号を判断する.同時に,閉盘価格が最小二乗移動平均よりも高いことを要求し,戦略をより安定させる.

戦略原則

この戦略は,枢軸反転策と最小二倍移動平均策を融合している.枢軸反転策は,過去ある取引日の最高値と最低価格を計算し,上軌道と下軌道を得る.価格が上軌道を破るとき,反転信号として判断する.最小二倍移動平均は,価格により近い傾向判断指標である.この戦略は,枢軸上軌道形成時に,閉盘価格が最小二倍線より高い場合,より多くする.

具体的には,この戦略は,まず過去3つのK線の最高値と過去16のK線の最低値を計算し,枢軸の点上軌道と下軌道を得る.上軌道が形成されたときに,ポジションを多く開く.次の下軌道が形成されたときに,平仓する.同時に,閉店価格が20日間の最小二倍移動平均より高いことを要求する.

戦略的優位性

  1. 2つの戦略を組み合わせることで,取引の意思決定がより安定し,信頼性が高くなります.

  2. ターニングポイントを判断する枢軸戦略,最小二乗移動平均のフィルタリング 偽突破,取引リスクを減らす

  3. 心理的に多くの人の期待に合致する

  4. 戦略はシンプルでわかりやすく,理解し,最適化できます.

  5. 取引頻度が適し,中長線操作に適した

リスク分析

  1. 市場が急激に下落するチャンスを掴むことができない

  2. 遅延があり,収入の機会を逃している可能性もあります.

  3. 牛とクマの交換は大きな損失を伴う

解決策は

  1. 計算周期を適切に短縮し,遅延を減らす

  2. 移動平均のパラメータを調整し,参加率を最適化する

  3. 単一損失を減らすために ストップ・ローズ戦略を強化する

最適化の方向

  1. 複数のトレンド指標の組み合わせを組み込み,判断の正確さを向上させる

  2. 機械学習モデルの予測結果を増やし,意思決定を導く

  3. 波動率指数と組み合わせて,ポジションの規模を制御する

  4. パラメータを最適化し,戦略の勝利率を高めます.

  5. 安定性を検証するために,より長い周期データをテストします.

要約する

この戦略は,枢軸反転戦略と最小二乗移動平均戦略の優位性を統合し,トレンド反転を判断しながらリスクを制御し,安定型戦略に属します. 構造はシンプルで,理解しやすく,テストし,量化取引の初心者の学習と実践に適しています. しかし,この戦略は多すぎ,下落の動きを利用できない,これが主な制限です.

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

//@version=4
//@author exlux99

strategy(title = "Pivot Reversal Upgraded long only", overlay = true,  pyramiding=1,initial_capital = 100, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.1)
/////////////
//time

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2010, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2031, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
//

length = input(title="Length MA", type=input.integer, defval=20)
offset = 0//input(title="Offset", type=input.integer, defval=0)
src = input(close, title="Source")
lsma = linreg(src, length, offset)

//LSMA
leftBars = input(3)
rightBars = input(16)
swh = pivothigh(leftBars, rightBars)
swl = pivotlow(leftBars, rightBars)
swh_cond = not na(swh)
hprice = 0.0
hprice := swh_cond ? swh : hprice[1]
le = false
le := swh_cond and time_cond? true : (le[1] and high > hprice ? false : le[1])
//leverage
multiplier=input(1.0, step=0.5)
g(v, p) => round(v * (pow(10, p))) / pow(10, p)
risk     = input(100)
leverage = input(1.0, step = 0.5)
c = g((strategy.equity * leverage / open) * (risk / 100), 4)

//entry
strategy.entry("long", strategy.long,c, when=le and close > lsma, comment="long", stop=(hprice + syminfo.mintick) * multiplier)

    
swl_cond = not na(swl)
lprice = 0.0
lprice := swl_cond ? swl : lprice[1]
se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])
strategy.close("long", when=se)