買い物・売却戦略の傾向

作者: リン・ハーンチャオチャン,日付: 2023年10月17日 12:59:59
タグ:

img

概要

トレンドフォロー・バイ・セール・ストラテジーは,トレンドフォロー・デイ・トレーディング・ストラテジーのシンプルな手法である.前提は,移動平均値に基づいてトレンド方向を決定し,トレンドのダウンとブリップを購入/販売することである.

戦略の論理

この戦略は,トレンド方向を決定するために,シンプル・ムービング・アベア (SMA) を使用する.アップトレンドでは,キャンドルのアクションがdipを提示すると,現在のキャンドルの高値が前のキャンドルの高値を突破したとき,戦略は長引く.ダウントレンドでは,キャンドルのアクションがblipを提示すると,現在のキャンドルの低値が前のキャンドルの低値を突破したとき,戦略は短引く.

この戦略は,トレンド決定のためにブランチフラワーオシレーターの%Kと%Dも使用する.%Kが%Dを超えるとポジションを閉じて反対方向に取引する.さらに,MACDとシグナルラインはフィルターとして機能し,MACDとシグナルによって決定されたトレンド方向に準拠する取引のみを行う.

ストラテジーは,ロングのみ,ショートのみ,または両方に行うことができます.開始月と年は,その時点から現在までのバックテストを可能にします.SMA期,%K期,%D期,MACDパラメータなどのすべてのパラメータはカスタマイズできます.

利点分析

  • トレンドを決定するためにSMAを使用すると,ウィップソーや不正な取引が回避されます.
  • ブランクフラワーオシレーターを使用すると,トレンドの逆転を及ばなく検知し,リスクを制御します.
  • MACDとシグナルフィルターは,トレンドに反するノイズ取引を減らす
  • 調整可能なパラメータは,異なる価格行動に適応する
  • 長期取引のみ,短期取引のみ,または双方向取引は,市場体制に適応する

リスク分析

この戦略の主なリスクは,

  • SMAの大きな浸透から大きな損失のリスクが SMA期間を増加させリスクを下げることができます
  • 取引頻度を減らすために%K期間を増加させることができます.
  • MACDとシグナルパラメータの設定が悪かったため フィルタリングが不十分です パーツごとにパラメータを最適化すべきです
  • 双方向取引による累積した大きなポジションで損失を伴う. ポジションサイズを制限すべきです.

増進 の 機会

戦略は以下の点で改善できる:

  • トレンド検出能力を保持しながら,ウィップソウをフィルターするためにSMA期間を最適化
  • %K, %D パラメータを最適化して,ウィップソウを削減しながらトレンド逆転を捉える
  • より効果的なノイズフィルタリングのためにMACDパラメータを最適化
  • ポジションのサイズ管理を追加します.例えば,固定量,自己資本の変動%など.
  • ストップ・ロスのメカニズムを追加します.例えば,トラール・ストップ,タイム・ストップ,ATR・ストップなど.

結論

トレンドフォロー・バイ・アンド・セール・ストラテジーは,SMAによって特定され,指標によってフィルタリングされたトレンドで引き下げを取引するためのシンプルで直接的な論理を持っています.細かな調整パラメータとリスク制御は,立派な結果をもたらすことができますが,過剰なフィットメントを防止し,強度を向上させるために,コンバインエンカプスレーションはまだ必要です.全体的に,これは実用的な日中取引戦略です.


/*backtest
start: 2022-10-10 00:00:00
end: 2023-10-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Higher High / Lower Low Strategy", overlay=true)

// Getting inputs
longOnly = input(true, title="Long or Short Only")
useMACD = input(true, title="Use MACD Filter")
useSignal = input(true, title="Use Signal Filter")
//Filter backtest month and year
startMonth = input(10, minval=1, maxval=12, title="Month")
startYear = input(2020, minval=2000, maxval=2100, title="Year")
//Filter funtion inputs
periodA = input(20, minval=1, title="Period SMA")
periodK = input(5, minval=1, title="Period %K")
fast_length = input(title="Period Fast", type=input.integer, defval=5)
slow_length = input(title="Period Slow", type=input.integer, defval=20)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 30)

//Calculations
smoothD = 3 //input(3, minval=1, title="Smooth %D")
smoothK = 2 //input(2, minval=1, title="Smooth %K")
ma50 = sma(close, periodA)
k = sma(stoch(close, high, low, periodK), smoothK) - 50
d = sma(k, smoothD)
macd = ema(close,fast_length) - ema(close,slow_length)
signal = ema(macd,signal_length)
hist = macd - signal

if (not na(k) and not na(d) and not na(macd) and not na(signal) and longOnly and month>=startMonth and year>=startYear)//	if(k > k[1] and k[2] >= k[1] and (ma50 > ma50[1]) and (not useK or k[1] <= -threshold_k) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]) and (not useHHLL or close >= high[1]) and (not useD or d <= -threshold_d))
    if(high[2] >= high[1] and high > high[1] and (ma50 > ma50[1]) and (not useMACD or macd > macd[1]) and (not useSignal or signal > signal[1]))
		strategy.order("HH_LE", strategy.long, when=strategy.position_size == 0, comment="HH_LE")
    if (k < k[1])
		strategy.order("HH_SX", strategy.short, when=strategy.position_size != 0, comment="HH_SX")

if (not na(k) and not na(d) and not na(macd) and not na(signal) and not longOnly and month>=startMonth and year>=startYear)
    if(low[2] <= low[1] and low < low[1] and (ma50 < ma50[1]) and (not useMACD or macd < macd[1]) and (not useSignal or signal < signal[1]))
		strategy.order("HH_SE", strategy.short, when=strategy.position_size == 0, comment="HH_SE")
    if (k > k[1])
		strategy.order("HH_LX", strategy.long, when=strategy.position_size != 0, comment="HH_LX")

//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)


もっと