移動平均チャネルブレイクアウト取引戦略


作成日: 2024-01-29 14:31:25 最終変更日: 2024-01-29 14:31:25
コピー: 0 クリック数: 631
1
フォロー
1617
フォロワー

移動平均チャネルブレイクアウト取引戦略

概要

この戦略は,シンプルな移動平均の金叉死叉の原理に基づいて,7日平均線と14日平均線の交差によって買付決定を行う. 7日平均線が下方から14日平均線を突破すると買付信号を発信し,7日平均線が上方から下方から14日平均線を突破すると売付信号を発信する. この戦略は,利益をロックし,リスクを制御するために,停止,停止,追跡停止機能を同時に備えている.

戦略原則

この戦略の取引の中心的論理は,7日平均線と14日平均線の交差原理に基づいている。7日平均線反応価格の短期傾向と14日平均線反応価格の中間傾向。短期平均線が下方から中期平均線を突破すると,短期平均線がより強くなっていることを示す,多頭位を確立する良い時である.逆に,短期平均線が上方から下方から中期平均線を突破すると,短期傾向が弱くなったことを示す,清算するか空頭位を確立するべきである。

具体的には,この戦略は,SMA指数を使用して7日と14日の単純移動平均を計算する.各K線が形成された後,現在の7日線と14日線の大きさの関係を比較する.7日線で14日線を貫く場合は,多信号を発して,ロングポジションに入ります.7日線の下で14日線を貫く場合は,空き信号を発して,ショートポジションに入ります.

さらに,戦略は,利益とリスクの制御をロックするために,止損,停止,および追跡停止を設定しています. 特定のパラメータは,フィードバック結果に基づいて最適化することができます.

戦略的優位性

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

  1. 規則はシンプルでわかりやすく,理解しやすく,初心者のためのものです.
  2. 平均線交差の原理が有効で,勝利率は高い.
  3. リスクを効果的に制御する ストップ・ストップ・ストップ・ストップ・ストップ・ストップ・ストップ・ストップ
  4. パラメータが少ないので,テストや最適化が簡単です.

リスクと対策

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

  1. トレンドが逆転すると,均線交差信号が遅れており,トレンドの転換に及ばず,大きな損失を招く可能性がある.
  2. 重度の横軸市場では,均線交差信号が頻繁であり,より多くの偽信号を生じ,戦略の効果に影響する.

上記のリスクに対処するために,以下の対策を考慮することができます.

  1. 他の指標のフィルタリング均線交差信号,例えばMACD,KDJなどと組み合わせて,トレンドの転換点で誤信号を生じないようにする.
  2. 単一損失の影響を軽減するために,ストップ・ロスの幅を拡大し,ポジションの周期を短縮する.
  3. 異なる市場状況に応じて平均線パラメータを最適化し,横盤市場で平均線周期を適切に増やし,交差信号の頻度を減らす.

最適化の方向

この戦略は以下の方向から最適化できます.

  1. 異なる均線組合せとパラメータをテストし,最適のパラメータを見つけます.
  2. 戦略の効果を高めるために,信号フィルタリングのための他の指標を追加します.
  3. ストップ・ロスを最適化し,引き下げを減らし,収益率を上げる.
  4. 異なる品種と取引時期に応じてパラメータを微調整する.

要約する

この戦略は全体的に初心者の学習に適しており,原理はシンプルで,容易に理解し,実施できる.また,市場への適応性も良好で,パラメータの調整と最適化により大きな空間があり,安定した収益を期待できる.Quantitative Tradingの初心者の入門と学習に適している.

ストラテジーソースコード
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bensonsuntw

strategy("Strategy Template[Benson]", pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

backtest_year = input(2019, type=input.integer, title='backtest_year')
backtest_month = input(01, type=input.integer, title='backtest_month', minval=1, maxval=12)
backtest_day = input(01, type=input.integer, title='backtest_day', minval=1, maxval=31)
start_time = timestamp(backtest_year, backtest_month, backtest_day, 00, 00)
stop_loss_and_tp = input(title="Enable Stop Loss and Take Profit", type=input.bool, defval=true)
trail_stop = input(title="Enable Trail Stop", type=input.bool, defval=true)
buy_stop_loss = input(0.2, type=input.float, title='buy_stop_loss')
sell_stop_loss = input(0.1, type=input.float, title='sell_stop_loss')
buy_tp = input(0.4, type=input.float, title='buy_tp')
sell_tp =input(0.2, type=input.float, title='sell_tp')
trail_stop_long = input(1.1, type=input.float, title='trail_stop_long')
trail_stop_short = input(0.9, type=input.float, title='trail_stop_short')
trail_stop_long_offset = input(0.05, type=input.float, title='trail_stop_long_offset')
trail_stop_short_offset = input(0.05, type=input.float, title='trail_stop_short_offset')


// you can set your own logic here
shortCondition = crossunder(sma(close,7),sma(close,14))
longCondition = crossover(sma(close,7),sma(close,14))

strategy.entry("Buy", strategy.long, when=longCondition  )
strategy.close("Buy", when=shortCondition)
strategy.exit("Close Buy","Buy", limit= stop_loss_and_tp?strategy.position_avg_price * (1+buy_tp):na, stop = stop_loss_and_tp?strategy.position_avg_price * (1-buy_stop_loss):na,trail_price=trail_stop?strategy.position_avg_price *trail_stop_long:na,trail_offset=trail_stop?-strategy.position_avg_price *trail_stop_long_offset:na)

strategy.entry("Sell", strategy.short, when=shortCondition)
strategy.close("Sell", when=longCondition)
strategy.exit("Close Sell","Sell", limit= stop_loss_and_tp?strategy.position_avg_price * (1-sell_tp):na, stop = stop_loss_and_tp?strategy.position_avg_price * (1+sell_stop_loss):na,trail_price=trail_stop?strategy.position_avg_price *trail_stop_short:na,trail_offset=trail_stop?strategy.position_avg_price *trail_stop_short_offset:na)


net_profit = strategy.netprofit + strategy.openprofit

plot(net_profit, title="Net Profit", linewidth=2, style=plot.style_area, transp=50, color=net_profit >= 0 ? #26A69A : color.red)