シンプルなモメンタム戦略,SMA,EMA,ボリュームに基づく

作者: リン・ハーンチャオチャン開催日:2023年8月12日11時15分30分
タグ:

img

概要

これは簡単な日中モメンタム戦略で,短くではなく長くしか動かない.価格とモメンタムの両方が上昇傾向にある最適なタイミングで市場に参入しようと SMA,EMA,ボリュームインジケーターを使用する.その利点は,トレンド認識能力のある一方でシンプルである.

戦略原則

入力シグナル論理は,SMAがEMAより高く,3バーまたは4バーの上昇傾向パターンがあり,中間バーの最低価格がスタートアップトレンドバーのオープン価格よりも高くなる場合,入力シグナルが生成されます.

エクジットシグナル論理は,SMAがEMAを下回ると,エクジットシグナルが生成される.

この戦略は,長期に限らず,短期に限らず, 継続的な上昇傾向を認識する能力がある.

利点分析

この戦略の利点は

  1. 論理は単純で理解し実行するのが簡単です

  2. SMA,EMA,ボリュームなどの一般的な技術指標を利用し,パラメータ調整に柔軟性があります.

  3. 持続的な上昇傾向の時に 機会を掴む能力があります

リスク分析

この戦略のリスクは

  1. ダウントレンドや統合市場を検出できず,大幅な引き上げにつながります.

  2. ショートシートチャンスを利用できず,下落傾向に対してヘッジできず,良い利益の機会を逃す.

  3. 音量表示は高周波データでうまく動作しない パラメータは調整する必要がある

  4. ストップ・ロスを利用してリスクをコントロールできます

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

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

  1. 平均逆転の機会に対するショートカット能力を追加する.

  2. 傾向をより良く検出するためにMACDやRSIのようなより高度な指標を使用する.

  3. ストップ・ロスのロジックを最適化して 引き下げを減らす

  4. パラメータを調整し 異なるタイムフレームをテストして 最適なパラメータセットを見つけます

結論

概要すると,これは,SMA,EMA,ボリュームを入力タイムリングに使用する戦略をフォローする非常に単純なトレンドです.その利点は,シンプルで簡単に実装され,初心者が学ぶのが良いですが,統合やダウントレンドを検出できず,リスクがあります.ショートシート,インジケーターの最適化,ストップロスの導入などにより改善することができます.


/*backtest
start: 2023-11-07 00:00:00
end: 2023-12-02 00:00:00
period: 2h
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/
// © slip_stream

//@version=4

// Simple strategy for riding the momentum and optimising the timings of truer/longer price moves upwards for an long posistions on a daily basis (can be used, but with less effect
// on other time frames. Volume settings would have to be adjusted by the user accordingly. (short positions are not used).
// This strategy has default settings of a short(er) SMA of 10, a long(er) EMA of 20, and Volume trigger of 10 units and above. All these settings can be changed by the user
// using the GUI settings and not having to change the script.

// The strategy will only open a long position when there is a clear indication that price momentum is upwards through the SMA moving and remaining above the EMA (mandatory) and price period indicators
// of either 1) a standard 3 bar movement upwards, 2) a standard but "aggressive" 3 or 4 bar play where the low of the middle resting bars can be equal to or higher than (i.e. not
// the more standard low of about half) of the opening of the ignition bar. The "aggression" of the 3/4 bar play was done in order to counteract the conservatisme of having a mandatory
// SMA remaining higher than the EMA (this would have to be changed in the script by the user if they want to optimise to their own specifications. However, be warned, all programmatic
// settings for the maximum acceptable low of the middle resting bars runs a risk of ignoring good entry points due to the low being minutely e.g. 0.01%, lower than the user defined setting)


strategy(title = "Simple Momentum Strategy Based on SMA, EMA and Volume", overlay = true, pyramiding = 1, initial_capital = 100000, currency = currency.USD)


// Obtain inputs
sma_length = input(defval = 10, minval=1, type = input.integer, title = "SMA (small length)")
ema_length = input(defval = 20,minval=1, type = input.integer, title = "EMA (large length)")
volume_trigger = input(defval = 10, title = "Volume Trigger", type = input.integer)
sma_line = sma(close, sma_length)
ema_line = ema(close, ema_length)


// plot SMA and EMA lines with a cross for when they intersect
plot(sma_line, color = #8b0000, title = "SMA")
plot(ema_line, color = #e3d024, title = "EMA")
plot(cross(sma_line, ema_line) ? sma_line : na, style = plot.style_cross, linewidth = 4, color = color.white)


// Create variables
// variables to check if trade should be entered
//three consecutive bar bar moves upwards and volume of at least one bar is more than 10
enter_trade_3_bar_up = sma_line > ema_line and close[1] >= close [2] and close[3] >= close[4] and close[2] >= close[3] and (volume[1] >= volume_trigger or volume[2] >= volume_trigger or volume[3] >= volume_trigger)
// aggressive three bar play that ensures the low of the middle bar is equal to or greater than the open of the instigator bar. Volume is not taken into consideration (i.e. aggressive/risky)
enter_3_bar_play = sma_line > ema_line and close[1] > close[3] and low[2] >= open[3]
// aggressive four bar play similar to the 3 bar play above
enter_4_bar_play = sma_line > ema_line and close[1] > close[4] and low[2] >= open[4]
trade_entry_criteria = enter_trade_3_bar_up or enter_3_bar_play or enter_4_bar_play // has one of the trade entry criterias returned true?

// exit criteria for the trade: when the sma line goes under the ema line
trade_exit_criteria = crossunder (sma_line, ema_line)


if (year >= 2019)
    strategy.entry(id = "long", long = true, qty = 1, when = trade_entry_criteria)
    strategy.close(id = "long", when = trade_exit_criteria, qty = 1)
    // for when you want to brute force close all open positions: strategy.close_all (when = trade_exit_criteria)

もっと