Chiến lược động lực đơn giản dựa trên SMA, EMA và khối lượng

Tác giả:ChaoZhang, Ngày: 2023-12-08 11:15:30
Tags:

img

Tổng quan

Đây là một chiến lược động lực nội ngày đơn giản chỉ đi dài và không ngắn. Nó sử dụng chỉ số SMA, EMA và khối lượng để cố gắng vào thị trường tại thời điểm tối ưu khi cả giá và động lực đang có xu hướng tăng. Lợi thế của nó là đơn giản trong khi có một số khả năng nhận dạng xu hướng.

Nguyên tắc chiến lược

Logic tín hiệu đầu vào là: khi SMA cao hơn EMA, và có một mô hình xu hướng tăng liên tiếp 3 bar hoặc 4 bar, với giá thấp nhất của các thanh giữa cao hơn giá mở của thanh xu hướng tăng khởi động, một tín hiệu đầu vào được tạo ra.

Logic tín hiệu thoát là: khi SMA vượt dưới EMA, một tín hiệu thoát được tạo ra.

Chiến lược này chỉ đi dài và không ngắn. Logic vào và ra của nó có một số khả năng trong việc nhận ra xu hướng tăng liên tục.

Phân tích lợi thế

Những lợi thế của chiến lược này:

  1. Logic là đơn giản và dễ hiểu và thực hiện;

  2. Sử dụng các chỉ số kỹ thuật phổ biến như SMA, EMA và khối lượng để linh hoạt trong điều chỉnh tham số;

  3. Có một số khả năng nắm bắt một số cơ hội trong xu hướng tăng liên tục.

Phân tích rủi ro

Những rủi ro của chiến lược này:

  1. Không có khả năng phát hiện xu hướng giảm hoặc thị trường hợp nhất, dẫn đến việc rút vốn lớn;

  2. Không thể tận dụng các cơ hội mua bán ngắn, không thể phòng ngừa chống lại xu hướng giảm, bỏ lỡ cơ hội lợi nhuận tốt;

  3. Chỉ số âm lượng không hoạt động tốt trên dữ liệu tần số cao, các thông số cần điều chỉnh;

  4. Có thể sử dụng stop loss để kiểm soát rủi ro.

Hướng dẫn tối ưu hóa

Chiến lược này có thể được tối ưu hóa trong các khía cạnh sau:

  1. Thêm khả năng mua ngắn cho các cơ hội đảo ngược trung bình;

  2. Sử dụng các chỉ số tiên tiến hơn như MACD và RSI để phát hiện xu hướng tốt hơn;

  3. Tối ưu hóa logic dừng lỗ để giảm rút tiền;

  4. Điều chỉnh các tham số và thử nghiệm các khung thời gian khác nhau để tìm ra các bộ tham số tối ưu.

Kết luận

Tóm lại, đây là một xu hướng rất đơn giản sau chiến lược sử dụng SMA, EMA và khối lượng cho thời gian nhập cảnh. Ưu điểm của nó là đơn giản và dễ thực hiện, tốt cho người mới bắt đầu học, nhưng nó không thể phát hiện sự hợp nhất hoặc xu hướng giảm và có rủi ro.


/*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)

Thêm nữa