二重移動平均反転取引戦略


作成日: 2023-10-16 15:50:35 最終変更日: 2023-10-16 15:50:35
コピー: 1 クリック数: 671
1
フォロー
1617
フォロワー

二重移動平均反転取引戦略

概要

双均線反転取引戦略は,短期と長期の2つの異なる周期の単純な移動平均を計算し,価格と移動平均の関係に基づいて取引信号を生成します. 短期均線の上を長期均線に突破すると,多めに行きます. 短期均線を下を長期均線に突破すると,空いて行きます. この戦略は,トレンドフォロー戦略です.

戦略原則

この戦略は,入力パラメータを使用して,2つの異なる周期長さのシンプル移動平均を設定します.短周期線は快線と呼ばれ,長周期線は慢線と呼ばれます. 速線は,短期的なトレンドを捕捉するために価格の変化をより迅速に反応します. 慢線は,短期的な市場のノイズをフィルターして主要なトレンドを捕捉するために価格の変化をよりゆっくりと反応します.

具体的には,戦略はsma () 関数を使用して2つの平均線を計算し,計算結果をxSMA () 慢線と快線に代入する.戦略は,close価格を使用して平均線を計算する.

各取引に対してストップ・ロスを設定し,ストップ・ロスのポイントに達すると即座にストップ・ロスを設定する.同時に,戦略は,barcolor関数を使用して,価格と慢線の関係をK線で表示する:多ければK線は緑;空ければK線は赤;平ければK線は青である.

優位分析

  • 双線システムを使用することで,トレンドを効果的に追跡し,短期市場の騒音に惑わされない
  • 取引信号の質を向上させるための快速均線配合
  • ストップ・ストップ・ロスを設定して,単一取引のリスクを制御します.
  • 取引時間帯を制限することで,重大事件による大きな波動を回避できます.
  • 取引信号をK線でマークし,視覚的補助を形成し,直感性を向上させる

リスク分析

  • 二線均一システムは偽信号を多く発生し,取引頻度が取引コストの圧力を引き起こす.
  • 均線パラメータを合理的に設定する必要があります. そうでなければ,平滑効果が悪く,または待ち時間の問題が発生します.
  • 平均線システムには遅延があり,トレンドの転換点を逃している可能性があります.
  • 固定ストップ・ストラストポイントは,動的に調整できないほど恣意的かもしれません.
  • 限られた取引時間帯は,他の時間帯の取引機会を逃す可能性があります.

平均線パラメータを調整し,ストップ・ストップ・ロスを最適化し,時間制限を撤回し,またはより合理的な取引期間を設定することでリスクを軽減することができます. フィルター条件として他の指標と組み合わせることを考慮して,偽信号があまり発生しないようにすることもできます.

最適化の方向

  • 異なる均線周期の組み合わせをテストし,最適なパラメータを探します.
  • ストップ・ストップ・ロスを動的な追跡に変更する方法を検討できます.例えばATRとリンクする
  • MACD,KDなどの他の指標をフィルター信号として導入できます.
  • 取引の時間帯を最適化することで,より多くの取引機会を捉えることができます.
  • 突破策と組み合わせて均線の近くで突破信号を探す
  • ダイナミック・オフショット・メカニズムを確立し,価格が区間に入ると積極的にストップします.

要約する

双均線反転取引戦略overallは,シンプルで実用的なトレンド追跡戦略である. 均線の平滑な作用を利用してトレンドの方向性を認識し,均線を配合して取引シグナルを生成する. この戦略は,実行しやすく,考えが明確で,初心者向けである. しかし,偽信号や時延の問題が多く発生する可能性がある. 参数最適化,補助指標の導入などの方法によって改善され,戦略がより安定して信頼性が高くなる. この戦略は,使用されれば,安定した収益を生み出すことができ,全面的にテストされ,最適化される.

ストラテジーソースコード
/*backtest
start: 2023-09-15 00:00:00
end: 2023-10-15 00:00:00
period: 4h
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/
// © HPotter
//  Simple SMA strategy
//
// WARNING:
//      - For purpose educate only
//      - This script to change bars colors
//@version=4
timeinrange(res, sess) => not na(time(res, sess)) ? 1 : 0

strategy(title="Simple SMA Strategy Backtest", shorttitle="SMA Backtest", precision=6, overlay=true)
Resolution = input(title="Resolution", type=input.resolution, defval="D")
Source = input(title="Source", type=input.source, defval=close)
xSeries = security(syminfo.tickerid, Resolution, Source)
Length = input(title="Length", type=input.integer, defval=14, minval=2)
TriggerPrice = input(title="Trigger Price", type=input.source, defval=close)
TakeProfit = input(50, title="Take Profit", step=0.01)
StopLoss = input(20, title="Stop Loss", step=0.01)
UseTPSL = input(title="Use Take\Stop", type=input.bool, defval=false)
BarColors = input(title="Painting bars", type=input.bool, defval=true)
ShowLine = input(title="Show Line", type=input.bool, defval=true)
UseAlerts = input(title="Use Alerts", type=input.bool, defval=false)
timeframe = input(title="Time Frame", defval="15")
timerange = input(title="Time Range", defval="2300-0800")
reverse = input(title="Trade Reverse", type=input.bool, defval=false)
pos = 0
xSMA = sma(xSeries, Length)
pos := iff(TriggerPrice > xSMA, 1,
         iff(TriggerPrice < xSMA, -1, nz(pos[1], 0)))
nRes = ShowLine ? xSMA : na
alertcondition(UseAlerts == true and pos != pos[1] and pos == 1, title='Signal Buy', message='Strategy to change to BUY')
alertcondition(UseAlerts == true and pos != pos[1] and pos == -1, title='Signal Sell', message='Strategy to change to SELL')
alertcondition(UseAlerts == true and pos != pos[1] and pos == 0, title='FLAT', message='Strategy get out from position')
possig =iff(pos[1] != pos,
         iff(reverse and pos == 1, -1,
           iff(reverse and pos == -1, 1, pos)), 0)
if (possig == 1 and timeinrange(timeframe, timerange))
    strategy.entry("Long", strategy.long)
if (possig == -1 and timeinrange(timeframe, timerange))
    strategy.entry("Short", strategy.short)
if (timeinrange(timeframe, timerange) == 0) 
    strategy.close_all()

if (UseTPSL)    
    strategy.close("Long", when = high > strategy.position_avg_price + TakeProfit, comment = "close buy take profit")
    strategy.close("Long", when = low < strategy.position_avg_price - StopLoss, comment = "close buy stop loss")
    strategy.close("Short", when = low < strategy.position_avg_price - TakeProfit, comment = "close buy take profit")
    strategy.close("Short", when = high > strategy.position_avg_price + StopLoss, comment = "close buy stop loss")
nColor = BarColors ? strategy.position_avg_price != 0  and pos == 1 ? color.green :strategy.position_avg_price != 0 and pos == -1 ? color.red : color.blue : na
barcolor(nColor)
plot(nRes, title='SMA', color=#00ffaa, linewidth=2, style=plot.style_line)