Động cơ trung bình chuyển động Dinamic Moving Average Retracement Chiến lược Martin

Tác giả:ChaoZhang, Ngày: 2023-11-24 10:19:21
Tags:

img

Tổng quan

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 logic

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.

Phân tích lợi thế

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

  1. Khám phá xu hướng ngắn hạn bằng cách sử dụng tín hiệu chéo trung bình động, cho phép giao dịch thường xuyên.
  2. Cơ chế dừng lỗ có thể kiểm soát lỗ đơn.
  3. Đặt lợi nhuận có thể khóa trong lợi nhuận một phần.
  4. Các hướng giao dịch có thể được chọn phù hợp với các giai đoạn khác nhau.
  5. Hiển thị các điểm vào và ra khỏi biểu đồ để rõ ràng hơn.

Phân tích rủi ro

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

  1. Các chiến lược MA ngắn hạn có xu hướng bị cắt đứt.
  2. Khả năng tín hiệu chậm lại từ các đường trung bình động.
  3. Các tổn thất liên tiếp có thể dẫn đến tổn thất trầm trọng hơn.
  4. Tỷ lệ stop loss đặt sai có thể quá lỏng lẻo hoặc quá chặt chẽ.

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.

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

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

  1. Kiểm tra thêm các kết hợp MA để tìm các thông số tối ưu.
  2. Thêm các chỉ số khác như RSI, KD vv để cải thiện chất lượng tín hiệu.
  3. Điều chỉnh tỷ lệ dừng lỗ theo các sản phẩm và khung thời gian khác nhau.
  4. Thêm kiểm soát kích thước vị trí như số lượng cố định hoặc vốn cố định.
  5. Thêm các quy tắc thứ tự nhập.
  6. Tối ưu hóa và đánh giá mức dừng lỗ hoặc lấy lợi nhuận.

Tóm lại

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)



Thêm nữa