モメンタム価格トレンドフォロー戦略


作成日: 2023-11-13 16:44:58 最終変更日: 2023-11-13 16:44:58
コピー: 0 クリック数: 648
1
フォロー
1617
フォロワー

モメンタム価格トレンドフォロー戦略

概要

動力価格トレンド追跡戦略は,価格のトレンドを識別するために複数の動力指標を使用し,トレンドの開始段階でポジションを確立し,ストップ・ストップ・ロスを設定して利益をロックし,価格のトレンドを追跡します.

戦略原則

動量価格トレンドトラッキング戦略は,主に以下の技術指標を適用します.

  1. ROC指標:この指標は,一定の期間における価格変化の速度のパーセントを計算することによって,価格動力を判断する.ROCが正であるときは,価格が上昇していることを示し,ROCが負であるときは,価格が低下していることを示します.戦略は,ROC指標によって価格の傾向の方向を判断する.

2.多空エネルギー指数:この指数は多頭と空頭力の対比関係を反映している.多空エネルギー>0は多頭力の空頭力より大きいことを示し,価格が上昇し,逆に価格は下落する.この指数を使用して多空力の比較を判断し,価格の方向を予測する.

  1. 逸脱指標:この指標は,価格と取引量の逸脱を計算して,トレンドの逆転を判断する. 策略は,逸脱信号を入場時として利用する.

4.Donchian Channel:この指標は,価格の最高価格と最低価格でチャネルを構築し,チャネル境界はサポートとレジスタンスとして使用できます. 戦略はチャネルを利用してトレンドの方向を判断します.

  1. 移動平均:この指標は,価格がサポートされているときの波動を排除し,主要トレンドの方向を明らかにします. 戦略は,価格の全体的な動きを判断するためにそれを使用します.

策略は,上記の複数の指標に基づいて価格の傾向と逆転のタイミングを判断し,トレンドの開始段階で指標信号に基づいて多頭または空頭ポジションを確立する. そして,ストップ・ストップ・ロスのポイントに基づいて,時宜平仓を利潤にロックし,価格の傾向をキャプチャする.

優位分析

この戦略の利点は以下の通りです.

  1. 傾向を判断し,誤判の可能性を減らすために,複数の指標を適用する.

  2. ターニングポイントを正確に捉えるために,指数から離れる.

  3. 移動平均線とチャネルを組み合わせて,大トレンドの方向を判断する.

  4. 停止止損ポイントを設定し,時間内に停止し,撤回拡大を回避する.

  5. パラメータによって調整され,異なる周期と品種の取引に適用されます.

  6. 戦略の論理が明確で理解しやすいので,後期に最適化できます.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. 複数の指標の組み合わせ判断は誤信号の確率を高め,パラメータの最適化指標の重さを調整する必要がある.

  2. ストップポイントが小さすぎるとストップの確率が増加し,大きすぎると撤回が拡大する可能性がある.合理的なストップポイントを決定するには総合的な考慮が必要である.

  3. 異なる市場周期のパラメータは調整を必要とし,盲目的に適用すると,市場環境への適応が困難になる可能性がある.

  4. 複数のユニットの同期取引をサポートする十分な資金が必要で,そうでなければ,excess returns を得るのは困難である.

  5. プログラム取引には,再測された適合リスクがあり,実盤効果には一定の不確実性がある.

最適化の方向

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

  1. 指数パラメータを最適化して,異なる周期と品種のパラメータの最適な組み合わせを見つけます.

  2. 機械学習アルゴリズムを追加し,最適参数を探し出す.

  3. 市場状況に応じてストップポイントを調整する自己適応のストップメカニズムを追加する.

  4. 高頻度因子と基本指標を組み合わせ,戦略のAlphaを向上させる.

  5. 自動テストフレームワークを開発し,パラメータの組み合わせを調整し,取引の有効性を検証する.

  6. リスク管理モジュールを導入し,ポジションの規模を制御し,撤回を減らす.

  7. 戦略の安定性を高めるため,模擬取引と実態検証のリンクを追加します.

要約する

この戦略は,複数の動態指標を総合的に使用して価格の傾向を判断し,利益をロックするためにストップ・ストップを設定します.この戦略は,価格の傾向を効果的に捕捉し,強い安定性を持っています.パラメータの調整,構造の最適化,およびリスク管理により,この戦略は,効果をさらに高め,取引リスクを軽減することができます.この戦略は,取引を量化するために,信頼性の高い,操作の簡単なトレンド追跡プログラムを提供します.

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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mbagheri746

//@version=4
strategy("Bagheri IG Ether v2", overlay=true, margin_long=100, margin_short=100)

TP = input(3000, minval = 1 , title ="Take Profit")
SL = input(2200, minval = 1 , title ="Stop Loss")


//_________________ RoC Definition _________________


rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=186)
smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=50)
src = input(title="Source", type=input.source, defval=close)

ma = ema(src, smoothingLength)
mom = change(ma, rocLength)

sroc = nz(ma[rocLength]) == 0
     ? 100
     : mom == 0
         ? 0
         : 100 * mom / ma[rocLength]

//srocColor = sroc >= 0 ? #0ebb23 : color.red
//plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0)
//hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898)


//_________________ Donchian Channel _________________

length1 = input(53, minval=1, title="Upper Channel")
length2 = input(53, minval=1, title="Lower Channel")
offset_bar = input(91,minval=0, title ="Offset Bars")

upper = highest(length1)
lower = lowest(length2)

basis = avg(upper, lower)


DC_UP_Band = upper[offset_bar]
DC_LW_Band = lower[offset_bar]

l = plot(DC_LW_Band, style=plot.style_line, linewidth=1, color=color.red)
u = plot(DC_UP_Band, style=plot.style_line, linewidth=1, color=color.aqua)

fill(l,u,color = color.new(color.aqua,transp = 90))

//_________________ Bears Power _________________


wmaBP_period = input(65,minval=1,title="BearsP WMA Period")
line_wma = ema(close, wmaBP_period)

BP = low - line_wma


//_________________ Balance of Power _________________

ES_BoP=input(15, title="BoP Exponential Smoothing")
BOP=(close - open) / (high - low)

SBOP = rma(BOP, ES_BoP)

//_________________ Alligator _________________

//_________________ CCI _________________

//_________________ Moving Average _________________

sma_period = input(74, minval = 1 , title = "SMA Period")
sma_shift = input(37, minval = 1 , title = "SMA Shift")

sma_primary = sma(close,sma_period)

SMA_sh = sma_primary[sma_shift]

plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow)

//_________________ Long Entry Conditions _________________//

MA_Lcnd = SMA_sh > low and SMA_sh < high

ROC_Lcnd = sroc < 0

DC_Lcnd = open < DC_LW_Band

BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2]

BOP_Lcnd = SBOP[1] < SBOP[0]

//_________________ Short Entry Conditions _________________//

MA_Scnd = SMA_sh > low and SMA_sh < high

ROC_Scnd = sroc > 0

DC_Scnd = open > DC_UP_Band

BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2]

BOP_Scnd = SBOP[1] > SBOP[0]

//_________________ OPEN POSITION __________________//

if strategy.position_size  == 0
    strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd)
    strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd)

//_________________ CLOSE POSITION __________________//

strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL)

strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL)

//_________________ TP and SL Plot __________________//

currentPL= strategy.openprofit
pos_price = strategy.position_avg_price
open_pos = strategy.position_size

TP_line = (strategy.position_size  > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0
SL_line = (strategy.position_size  > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0

// hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false)
// hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false)


Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1)
Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1)
Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1)


fill(Tline , Pline, color = color.new(color.green,transp = 90))
fill(Sline , Pline, color = color.new(color.red,transp = 90))

//_________________ Alert __________________//

//alertcondition(condition = , title = "Position Alerts", message = "Bagheri IG Ether\n Symbol: {{ticker}}\n Type: {{strategy.order.id}}")

//_________________ Label __________________//


inMyPrice           = input(title="My Price", type=input.float, defval=0)
inLabelStyle        = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right")

posColor = color.new(color.green, 25)
negColor = color.new(color.red, 25)
dftColor = color.new(color.aqua, 25)
posPnL   = (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0
posDir   = (strategy.position_size  > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat"
posCol   = (strategy.openprofit > 0) ? posColor : (strategy.openprofit < 0) ? negColor : dftColor
myPnL    = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0

var label lb = na
label.delete(lb)
lb := label.new(bar_index, close,
   color=posCol,
   style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left,
   text=
      "╔═══════╗" +"\n" + 
      "Pos: "  +posDir +"\n" +
      "Pos Price: "+tostring(strategy.position_avg_price) +"\n" +
      "Pos PnL: "  +tostring(posPnL, "0.00") + "%" +"\n" +
      "Profit: "  +tostring(strategy.openprofit, "0.00") + "$" +"\n" +
      "TP: "  +tostring(TP_line, "0.00") +"\n" +
      "SL: "  +tostring(SL_line, "0.00") +"\n" +
      "╚═══════╝")