
この戦略は,空頭でない (多頭のみ,空頭ではない) シンプルな日中の動力の戦略である.それはSMA,EMAと取引量指標を使用して,最適なタイミングで (つまり,価格と動力が同時に上昇するときに) 市場に参入しようとする.その優点は,シンプルであり,トレンドを特定する能力があることである.
この戦略の取引Einty信号生成の論理は,SMA指数がEMA指数より高く,連続した3つのK線または連続した4つのK線が上昇傾向を形成し,中間K線の最低価格が上方K線の開場価格より高くなると,同時にEntry信号を生成する.
エクジット信号生成の論理は,SMA指数の下のEMA指数を通過すると,エクジット信号が生成される.
この策略は空頭ではなく多頭しか作らない.そのEntryとExitの論理は,継続的な上昇の傾向を特定する能力がある.
この戦略の利点は以下の通りです.
戦略の論理はシンプルで,理解し,実行しやすい.
SMA,EMA,取引量などの一般的な技術指標を利用してパラメータの調整の柔軟性;
継続的な上昇の傾向を認識する能力があり,その傾向の機会の一部を掴むことができる.
この戦略には以下のリスクもあります.
市場が下落しているか整合しているかを特定できず,大きな引き下がりを引き起こす可能性がある.
景気後退に備えた空白の機会を利用できず,良い利益の機会を逃してしまう可能性;
交付量指標は高周波データに効果が悪く,パラメータの調整が必要である.
ストップ・ロスを利用してリスクをコントロールできます.
この戦略は以下の点で最適化できます.
空頭取引の機会を増やし,多空頭双方向取引を実現し,景気後退のトレンドを活用する.
MACD,RSIなどのより高度な指標を組み合わせることで,トレンドの判断力を向上させる.
ストップ・ロジックを最適化し,撤回リスクを低減する.
パラメータを調整し,異なる周期のデータをテストし,最適なパラメータの組み合わせを探します.
この戦略は全体的に非常に単純なトレンド追跡戦略であり,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)