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

作者: リン・ハーンチャオチャン,日付: 2024-01-29 14:31:25
タグ:

img

概要

この戦略は,シンプルな移動平均値の黄金十字と死亡十字原理に基づい,7日および14日移動平均値のクロスオーバーに基づいて購入および販売決定を下します. 7日MAが下から14日MAを超えると購入信号を発生し,7日MAが上から14日MAを超えると販売信号を発生します. この戦略には,利益とリスクの制御を目的としたストップ・ロスト,テイク・プロフィート,トライリング・ストップ機能も搭載されています.

戦略の論理

この戦略のコア・トレードロジックは,7日間および14日間の移動平均値のクロスオーバー原則に基づいています. 7日間のMAは短期間の価格動向を反映し,14日間のMAは中期間の動向を反映しています.短期間のMAが中期間のMAを下から越えると,短期間のMAが強くなっていることを示します.また,短期間のMAが上から中期間のMAを下に越えると,短期間のトレンドが弱くなっていることを示します.したがって,ポジションを閉じるかショートに行く必要があります.

この戦略は,SMA指標を使用して7日および14日間の単純な移動平均を計算する.各キャンドルスタイクが形成された後, 7日間のラインと14日間のラインの現在の値を比較する. 7日間のラインが14日間のラインを超えると,ロング信号が生成される. 7日間のラインが14日間のラインを下回ると,ショート信号が生成される.

さらに,ストラテジーは,ストップ・ロスト,テイク・プロフィート,およびトライリング・ストップ関数を設定し,利益をロックし,リスクを制御する.パラメータはバックテスト結果に基づいて最適化することができます.

利点

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

  1. シンプルで明快なルール 分かりやすく実行し 初心者が学ぶのに適しています
  2. 移動平均のクロスオーバー原理は 試行錯誤され 効果があり 勝率も比較的高い
  3. ストップ・ロスト,テイク・プロフィート,トラッキング・ストップで リスクを効果的にコントロールします
  4. テストや最適化に便利です

リスク と 対策

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

  1. 動向平均値は傾向の変化を反映するのに遅れており,傾向が逆転すると大きな損失を引き起こす可能性があります.
  2. 複数の市場における頻繁なクロスオーバー信号は,より多くの誤った信号を生み出し,戦略の有効性を損なう.

これらのリスクに対処するために,次の対策を検討できます.

  1. MACDやKDJのような他の指標を追加してクロスオーバー信号をフィルタリングし,トレンドターニングポイントで間違った信号を避ける.
  2. ストップ・ロスの範囲を拡大し 保持期間を短縮して 単一の損失の影響を減らす
  3. 変動する市場状況に基づいて移動平均パラメータを最適化し,市場範囲の長期期間を使用する.

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

この戦略は,次の側面で最適化できます.

  1. 最適な設定を見つけるために,異なるMA組み合わせとパラメータをテストする.
  2. 戦略の有効性を向上させるため,信号フィルタリングのための他の指標を追加します.
  3. ストップ・ロスを最適化し 利益パラメータを採取して 引き下げを減らして 利益率を上げます
  4. 異なる製品と取引セッションに基づいて パラメータを調整します

結論

結論として,この戦略は,初心者が学ぶのに非常に適しています.論理はシンプルで,理解し,実装するのが簡単です.また,パラメータ調整と最適化のために十分な余地があり,安定した利益を達成するために比較的良い市場適応性があります.量的な取引初心者が開始し学習するために使用することは価値があります.


/*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)






もっと