二重移動平均価格ブレイクアウト戦略


作成日: 2023-11-21 15:33:52 最終変更日: 2023-11-21 15:33:52
コピー: 1 クリック数: 601
1
フォロー
1617
フォロワー

二重移動平均価格ブレイクアウト戦略

概要

この戦略は,価格のトレンドとブレイクを判断するために2つの移動平均を使用します.価格が上から軌道に乗るときは空き,価格が下から軌道に乗るときは余分に空き,リスクを管理するためにストップダストの出口を設定します.

戦略原則

  1. sma() 関数を使用して,短期および長期の2つの移動平均を計算し,それぞれ取引戦略の上下軌道として用いられる.
  2. 買取価格と売出価格を計算する.買取価格は下線に1より小さい係数で,売出価格は上線に1より大きい係数で掛ける.
  3. 価格が上を走る時,市場価格で空仓を開く.価格が下を走る時,制限価格で多仓を開く.
  4. 年,月,日付の範囲を設定して,戦略の取引周期を制御します.
  5. 返済が終了し,日付の範囲を超えると,すべてのポジションをクリアします.

優位分析

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

  1. 市場騒音をフィルタリングし,トレンドを識別する双線システムを使用します.
  2. 価格突破の判断により,偽信号を減らすことができます.
  3. 市場への衝撃のコストを削減する為,限価券を利用する.
  4. 取引サイクルを簡単に調整し,戦略上のリスクをコントロールできます.

リスク分析

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

  1. 双線突破は連続的な損失のリスクを容易にする. 損失を制御するために止損エクジットを設定できます.
  2. 取引標識の入札時,過度の取引のリスクが生じやすい。上下線間隔を適切に緩めることができる。
  3. 制限価格のリストは,購入の機会の一部を逃す可能性があります. 市場価格のリストを使用することを検討してください.

最適化の方向

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

  1. 異なる長さの移動平均の組み合わせをテストし,最適なパラメータを見つけます.
  2. Volumesの指標を追加して取引量突破を判断する.
  3. 自動ストップ機能の追加で,ストップ価格をリアルタイムで調整する.
  4. 機械学習のモデルを導入し,トレンドを判断する.

要約する

この戦略の全体的な考え方は明確で分かりやすく,トレンドを識別し,価格を突破し,入場タイミングを判断し,ノイズをフィルターして安定した利益を達成し,改善を最適化する余地があります.全体的に,実戦価値のある再現可能な量化取引戦略です.

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

//Noro
//2018

//@version=3
strategy(title = "Noro's Shift MA Strategy v1.0", shorttitle = "Shift MA str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, defval = 1, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
buylevel = input(-5.0, defval = -5.0, minval = -100, maxval = 0, title = "Buy line (lime)")
selllevel = input(0.0, defval = 0.0, minval = -100, maxval = 100, title = "Sell line (red)")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//SMAs
sma = sma(src, per) 
buy = sma * ((100 + buylevel) / 100)
sell = sma * ((100 + selllevel) / 100)
plot(buy, linewidth = 2, color = lime, title = "Buy line")
plot(sell, linewidth = 2, color = red, title = "Sell line")

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0
    strategy.entry("L", strategy.long, lot, limit = buy)
    
if (not na(close[per]))    
    strategy.entry("Close", strategy.short, 0, limit = sell)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()