移動平均ブレイクアウト戦略


作成日: 2023-09-26 16:18:37 最終変更日: 2023-09-26 16:18:37
コピー: 0 クリック数: 884
1
フォロー
1617
フォロワー

概要

均線突破戦略は,移動平均を用いて判断するショートライン取引戦略である.この戦略は均線長さを設定し,均線突破時に取引を行う.その特徴は操作がシンプルで,習得しやすいことである.

戦略原則

この戦略は,主に2つの移動平均,快線と慢線を設定して,価格の動きを判断する.快線は周期が短く,反応が敏感である.慢線は周期が長く,反応が平穏である.

コードでは,入力パラメータを設定することで,快線周期shortPeriodと慢線周期longPeriodを定義し,その後に2つの均線の値shortSMAとlongSMAを計算する.

短周期平均線が下から上へ突破すると,価格動向が下から転がり,多し,短周期平均線が上から下へ突破すると,価格動向が上から転がり,空し,空する.

複数のポジションへのアクセス条件:

快线由下向上突破慢线
快线>慢线

ポジションの条件は以下の通りです.

快线由上向下跌破慢线  
快线<慢线

また,ストップ・ロスト,ストップ・ストップ,金額などのパラメータを設定してリスクを制御します.

戦略的優位性

  • 操作がシンプルで,習得しやすい,初心者向けです.
  • 平均線は,ある種の傾向フィルタリング能力を持ち,部分的なノイズをフィルターします.
  • 均線周期を柔軟に調整し,異なる周期操作に対応
  • リスクコントロールの為の,事前に設定可能な止損停止点

戦略リスク

  • 偽の突破が起こり,誤った信号が生成される可能性
  • 大幅な波動の市場には適さない. 傾向がはっきりしたときに使用する.
  • 平均線が遅れて,入場時間は不十分
  • 強いトレンドの反転を効果的にフィルターできない

リスク対策:

  • 他の指標と組み合わせたフィルタリングにより,偽信号を避ける
  • トレンドが目立つ時に使用し,波動的な市場では使用しないでください.
  • 平均線パラメータを適切に調整し,入場タイミングを最適化
  • 適切な緩解の範囲を設けることで,封じ込めを避ける

戦略最適化の方向性

  • 均線系のパラメータを最適化して,最適な周期組をみつける
  • BOLL通道,KDなどの他の指標判断を追加します.
  • ポジション管理戦略を最適化し,収益を最大化する
  • 異なる品種の契約のパラメータの強さをテストする
  • 機械学習のアルゴリズムを増やし,ビッグデータを利用して最適化

要約する

均線突破戦略の概念はシンプルで,速やかに均線判断することで空き時間を増やす操作は簡単である。しかし,偽突破,滞りなども問題がある。パラメータ最適化,他の指標の組み合わせなどの方法によって改善することができる。全体的に,この戦略は初心者の入門第一段階の戦略に適しており,基本原理を掌握した後,さらに最適化して収益性を向上させることができる。

ストラテジーソースコード
/*backtest
start: 2023-08-26 00:00:00
end: 2023-09-25 00:00:00
period: 1h
basePeriod: 15m
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/
// © YohanNaftali

//@version=5

///////////////////////////////////////////////////////////////////////////////
// Heikin Ashi Candle Startegy
// ver 2021.12.29
// © YohanNaftali
// This script composed by Yohan Naftali for educational purpose only 
// Reader who will use this signal must do own research
///////////////////////////////////////////////////////////////////////////////
strategy(
     title = 'Heikin Ashi Candle Startegy Long',  
     shorttitle = 'HA Strategy Long',  
     format = format.price,
     precision = 0,
     overlay = true)

// Input
validationPeriod = input.int( 
     defval = 3, 
     title = 'Validation Period', 
     group = 'Candle')

qtyOrder = input.float(
     defval = 1.0,
     title = 'Qty', 
     group = 'Order')

maxActive = input.float(
     defval = 1.0,
     title = 'Maximum Active Open Position', 
     group = 'Order')

// Long Strategy
tpLong = input.float(
     defval = 1,
     title = "Take Profit (%)",
     minval = 0.0, 
     step = 0.1, 
     group = "Long") * 0.01

slLong = input.float(
     defval = 25,
     title = "Stop Loss (%)", 
     minval=0.0, 
     step=0.1,
     group="Long") * 0.01

trailingStopLong = input.float(
     defval = 0.2,
     title = "Trailing Stop (%)",
     minval = 0.0, 
     step = 0.1,
     group = 'Long') * 0.01

// Calculation
haTicker = ticker.heikinashi(syminfo.tickerid)
haClose = request.security(haTicker, timeframe.period, close)
haOpen = request.security(haTicker, timeframe.period, open)

// Long
limitLong = tpLong > 0.0 ? strategy.position_avg_price * (1 + tpLong) : na
stopLong = slLong > 0.0 ? strategy.position_avg_price * (1 - slLong) : na
float trailLong = 0.0
trailLong := if strategy.position_size > 0
    trailClose = close * (1 - trailLong)
    math.max(trailClose, trailLong[1])
else
    0

isGreen = true
for i = 0 to validationPeriod-1
    isGreen := isGreen and haClose[i] > haOpen[i]        
isLong = isGreen and haClose[validationPeriod] < haOpen[validationPeriod]



plot(
     limitLong,
     title = 'Limit', 
     color = color.rgb(0, 0, 255, 0), 
     style = plot.style_stepline,
     linewidth = 1)

plot(
     trailLong,
     title = 'Trailing', 
     color = color.rgb(255, 255, 0, 0), 
     style = plot.style_stepline,
     linewidth = 1)

plot(
     stopLong,
     title = 'Stop', 
     style = plot.style_stepline,
     color = color.rgb(255, 0, 0, 0), 
     linewidth = 1)

// plotshape(
//      isLong, 
//      title = 'Entry', 
//      style = shape.arrowup, 
//      location = location.belowbar, 
//      offset = 1, 
//      color = color.new(color.green, 0), 
//      text = 'Long Entry',
//      size = size.small)

// Strategy
strategy.risk.max_position_size(maxActive)
strategy.risk.allow_entry_in(strategy.direction.long)

strategy.entry(
     id = "Long", 
     direction = strategy.long, 
     qty = qtyOrder,  
     when = isLong,       
     alert_message = "LN")
if (strategy.position_size > 0)
    strategy.exit(
         id = "Long Exit",
         from_entry = "Long",
         limit = limitLong,
         stop = stopLong,
         trail_price = trailLong,
         alert_message = "LX")