Chiến lược chuyển động trung bình động (Dynamic Moving Average Retracement Martin) là một chiến lược giao dịch thường xuyên kết hợp các dấu hiệu chéo trung bình động và tín hiệu pullback để tạo ra tín hiệu nhập và ra. Chiến lược này sử dụng sự chéo và phân kỳ của các đường trung bình động đơn giản 3 ngày và 8 ngày để nắm bắt xu hướng ngắn hạn, và áp dụng dừng và lấy lợi nhuận để kiểm soát rủi ro. Chiến lược này cho phép lựa chọn hướng giao dịch theo các điều kiện thị trường khác nhau.
Chiến lược này sử dụng trung bình di chuyển đơn giản 3 ngày và 8 ngày và các tín hiệu chéo của chúng. Một tín hiệu dài được tạo ra khi MA 3 ngày vượt qua trên MA 8 ngày, và một tín hiệu ngắn được tạo ra khi MA 3 ngày vượt qua dưới MA 8 ngày.
Nếu không có vị trí, chiến lược sẽ xác định nhập vào dựa trên tín hiệu chéo. Sau khi nhập vào, giá dừng lỗ và giá lấy lợi nhuận sẽ được tính dựa trên giá đóng gần nhất, tỷ lệ giảm lỗ dừng và tỷ lệ lấy lợi nhuận. Ví dụ, khi nắm giữ vị trí dài, giá dừng lỗ là giá đóng gần nhất trừ tỷ lệ giảm lỗ dừng nhân MA 8 ngày; giá lấy lợi nhuận là giá đóng gần nhất cộng với tỷ lệ lấy lợi nhuận nhân MA 8 ngày.
Nếu có một vị trí dài hiện có, khi giá kích hoạt lấy lợi nhuận hoặc dừng lỗ, nếu một tín hiệu pullback của MA 8 ngày xảy ra, vị trí sẽ được đóng.
Chiến lược này cũng vẽ các điểm vào và ra trên biểu đồ. Ví dụ, một mục dài được vẽ như một tam giác tăng lên và một lối ra dài như một tam giác giảm xuống. Điều này giúp đánh giá trực quan các mục nhập và lối ra.
Những lợi thế của chiến lược này là:
Những rủi ro chính của chiến lược này là:
Các rủi ro có thể được giảm bằng cách mở rộng tỷ lệ dừng lỗ một cách hợp lý, tối ưu hóa các tham số MA, giới thiệu các điều kiện lọc bổ sung, v.v. Ngoài ra, đánh giá chính xác dung nạp cá nhân và tránh quá mức giao dịch là rất quan trọng.
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
Chiến lược Martin là một chiến lược giao dịch ngắn hạn. Nó nắm bắt các xu hướng ngắn hạn được hình thành bởi các đường chéo trung bình chuyển động, và quản lý rủi ro bằng các điểm dừng và lợi nhuận thích hợp. Bản chất giao dịch thường xuyên mang lại cơ hội lợi nhuận cũng như rủi ro. Bằng cách tối ưu hóa các tham số, lọc tín hiệu và kiểm soát rủi ro, chiến lược này có thể được cải thiện hơn nữa để có độ tin cậy cao hơn.
/*backtest start: 2022-11-17 00:00:00 end: 2023-11-23 00:00:00 period: 1d basePeriod: 1h 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/ // © blackcat1402 //@version=5 strategy('[blackcat] L1 MartinGale Scalping Strategy', overlay=true, pyramiding = 5) // Define input variables takeProfit = input(1.03, title='Take Profit') stopLoss = input(0.95, title='Stop Loss') inputTradingMode = input.string(defval='Long', options=['Long', 'Short', 'BiDir'], title='Trading Mode') //The purpose of this rule is to forbid short entries, only long etries will be placed. The rule affects the following function: 'entry'. strategy.risk.allow_entry_in(inputTradingMode == 'Long' ? strategy.direction.long : inputTradingMode == 'Short' ? strategy.direction.short : strategy.direction.all) // Define strategy logic entryPrice = 0.0 stopPrice = 0.0 takeProfitPrice = 0.0 stopLossPrice = 0.0 // Define SMA crossover and crossunder signals sma3 = ta.sma(close, 3) sma8 = ta.sma(close, 8) plot(sma3, color=color.yellow) plot(sma8, color=color.fuchsia) crossoverSignal = ta.crossover(sma3, sma8) crossunderSignal = ta.crossunder(sma3, sma8) crossoverState = sma3 > sma8 crossunderState = sma3 < sma8 if strategy.position_size == 0 if crossoverState strategy.entry('Buy', strategy.long) entryPrice := close stopPrice := close - stopLoss * sma8[1] takeProfitPrice := close + takeProfit * sma8[1] stopLossPrice := stopPrice stopLossPrice if crossunderState strategy.entry('Sell', strategy.short) entryPrice := close stopPrice := close + stopLoss * sma8[1] takeProfitPrice := close - takeProfit * sma8[1] stopLossPrice := stopPrice stopLossPrice if strategy.position_size > 0 if (close > takeProfitPrice or close < stopLossPrice) and crossunderState strategy.close('Buy') entryPrice := 0.0 stopPrice := 0.0 takeProfitPrice := 0.0 stopLossPrice := 0.0 stopLossPrice else strategy.entry('Buy', strategy.long) entryPrice := close stopPrice := close - stopLoss * sma8[1] takeProfitPrice := close + takeProfit * sma8[1] stopLossPrice := stopPrice stopLossPrice if strategy.position_size < 0 if (close > takeProfitPrice or close < stopLossPrice) and crossoverState strategy.close('Sell') entryPrice := 0.0 stopPrice := 0.0 takeProfitPrice := 0.0 stopLossPrice := 0.0 stopLossPrice else strategy.entry('Sell', strategy.short) entryPrice := close stopPrice := close + stopLoss * sma8[1] takeProfitPrice := close - takeProfit * sma8[1] stopLossPrice := stopPrice stopLossPrice // Plot entry and exit points plotshape(strategy.position_size > 0 and crossoverSignal, 'Buy Entry', shape.triangleup, location.belowbar, color.new(color.green, 0), size=size.small) plotshape(strategy.position_size > 0 and (close >= takeProfitPrice or close <= stopLossPrice), 'Buy Exit', shape.triangledown, location.abovebar, color.new(color.red, 0), size=size.small) plotshape(strategy.position_size < 0 and crossunderSignal, 'Sell Entry', shape.triangledown, location.abovebar, color.new(color.red, 0), size=size.small) plotshape(strategy.position_size < 0 and (close >= takeProfitPrice or close <= stopLossPrice), 'Sell Exit', shape.triangleup, location.belowbar, color.new(color.green, 0), size=size.small)