Chiến lược giá đóng cửa hàng tháng và giao cắt trung bình động


Ngày tạo: 2023-11-23 17:09:01 sửa đổi lần cuối: 2023-11-23 17:09:01
sao chép: 0 Số nhấp chuột: 572
1
tập trung vào
1621
Người theo dõi

Chiến lược giá đóng cửa hàng tháng và giao cắt trung bình động

Tổng quan

Chiến lược này sử dụng giao điểm giữa giá tròn và đường trung bình di chuyển để tạo ra tín hiệu giao dịch. Khi đường tròn vượt qua đường trung bình di chuyển ở trên giá tròn, hãy làm nhiều; khi đường tròn vượt qua đường trung bình di chuyển ở dưới giá tròn, hãy giữ vị trí bằng phẳng.

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

Lập luận cốt lõi của chiến lược này là:

  1. Nhập tham số chu kỳ của đường trung bình di chuyển, có thể chọn SMA hoặc EMA
  2. Bạn có thể chọn để hiển thị đường trung bình di chuyển
  3. Bạn có thể chọn giá đóng cửa của một cổ phiếu khác làm tín hiệu
  4. Đánh giá tín hiệu giao dịch dựa trên mối quan hệ giữa giá đóng cửa đường trăng và đường trung bình di chuyển
    • Đường trung bình di chuyển trên giá đóng cửa, làm nhiều hơn
    • Đường trung bình di chuyển dưới giá đóng cửa, lỗ hổng

Chiến lược này sử dụng tính chất mịn của đường trung bình di chuyển, lọc ra một phần tiếng ồn của giá, để bắt được sự biến đổi trong xu hướng trung bình của giá cổ phiếu. Khi giá cổ phiếu vượt qua đường trung bình, nó cho thấy giá cổ phiếu đang hình thành xu hướng thị trường bò; khi giá cổ phiếu vượt qua đường trung bình, nó cho thấy xu hướng giá cổ phiếu đang chuyển sang thị trường gấu.

Lợi thế chiến lược

Chiến lược này có những lợi thế chính như sau:

  1. Sử dụng dữ liệu đường trăng, có thể lọc hiệu quả tiếng ồn qua đêm, nắm bắt xu hướng trung và dài hạn của giá cổ phiếu
  2. Chu kỳ trung bình di chuyển tùy chỉnh, tùy chỉnh các tham số để phù hợp với các cổ phiếu khác nhau
  3. Có thể chọn một cổ phiếu khác làm nguồn tín hiệu, giúp tăng sự ổn định
  4. Sử dụng công nghệ chống tái sơn tiên tiến để ngăn chặn sự quay trở lại
  5. Có thể nhập bất kỳ khoảng thời gian phản hồi để dễ dàng kiểm tra và tối ưu hóa

Nhìn chung, khung chiến lược đơn giản và thực tế, có thể áp dụng cho hầu hết các cổ phiếu thông qua tối ưu hóa tham số, đặc biệt phù hợp với các nhà đầu tư trung bình và dài hạn.

Rủi ro chiến lược

Chiến lược này cũng có một số rủi ro, chủ yếu tập trung vào các khía cạnh sau:

  1. Dữ liệu hàng tháng được cập nhật chậm và không thể phản ánh sự thay đổi giá trong thời gian thực.
  2. Có một số chậm trễ, có thể bỏ lỡ cơ hội giao dịch ngắn
  3. Đường trung bình di động có độ trễ, không thể kiểm soát thời điểm phát ra tín hiệu
  4. Chọn tham số không đúng có thể dẫn đến quá bảo thủ hoặc bỏ lỡ cơ hội

Để giảm thiểu rủi ro, có thể tối ưu hóa các khía cạnh sau:

  1. Các chỉ số kỹ thuật kết hợp với khung thời gian thấp hơn để đưa ra phán đoán hỗ trợ
  2. Điều chỉnh chu kỳ đường trung bình di chuyển để tìm ra sự kết hợp tham số tốt nhất
  3. Sử dụng các dấu hiệu ổn định hơn như một nguồn tín hiệu
  4. Điều chỉnh đúng quy mô vị trí, kiểm soát tổn thất đơn lẻ

Hướng tối ưu hóa chiến lược

Chiến lược này cũng có rất nhiều khả năng tối ưu hóa, chủ yếu từ các khía cạnh sau:

  1. Tăng các chiến lược dừng lỗ để khóa lợi nhuận và kiểm soát rủi ro
  2. Kết hợp với các chỉ số khác, như KD, MACD, để tăng độ chính xác của tín hiệu giao dịch
  3. Sử dụng công nghệ học máy để tối ưu hóa động của các tham số đường trung bình di chuyển
  4. Thêm mô-đun quản lý vị trí để vị trí thay đổi theo xu hướng allocatorsize
  5. Thêm chức năng chuyển đổi đa không gian, có thể điều chỉnh linh hoạt theo điều kiện thị trường
  6. K-line với khung thời gian thấp hơn, cho phép giao dịch nhạy cảm hơn

Tóm tắt

Chiến lược giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch giao dịch.

Mã nguồn chiến lược
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 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/
// © universique

//@version=4
strategy("Monthly MA Close ", shorttitle="MMAC", overlay=true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
//MAY 6 2020 18:00

// No repaint function 
// Function to securely and simply call `security()` so that it never repaints and never looks ahead.
f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)
//sec10 = f_secureSecurity(syminfo.tickerid, higherTf, data)

// ————— Converts current chart resolution into a float minutes value.
f_resInMinutes() => 
    _resInMinutes = timeframe.multiplier * (
      timeframe.isseconds ? 1. / 60             :
      timeframe.isminutes ? 1.                  :
      timeframe.isdaily   ? 60. * 24            :
      timeframe.isweekly  ? 60. * 24 * 7        :
      timeframe.ismonthly ? 60. * 24 * 30.4375  : na)
// ————— Returns the float minutes value of the string _res.
f_tfResInMinutes(_res) =>
    // _res: resolution of any TF (in "timeframe.period" string format).
    // Dependency: f_resInMinutes().
    security(syminfo.tickerid, _res, f_resInMinutes())

// —————————— Determine if current timeframe is smaller that higher timeframe selected in Inputs.
// Get higher timeframe in minutes.
//higherTfInMinutes = f_tfResInMinutes(higherTf)
// Get current timeframe in minutes.
currentTfInMinutes = f_resInMinutes()
// Compare current TF to higher TF to make sure it is smaller, otherwise our plots don't make sense.
//chartOnLowerTf = currentTfInMinutes < higherTfInMinutes

// Input
switch1=input(true, title="Show MA")
exponential = input(true, title="Exponential MA")
ticker = input(false, title="Other ticker MA")

tic_ma = input(title="Ticker MA", type=input.symbol, defval="BTC_USDT:swap")
res_ma = input(title="Time MA (W, D, [min])", type=input.string, defval="M")
len_ma = input(8, minval=1, title="Period MA")

ma_cus = exponential?f_secureSecurity(tic_ma, res_ma, ema(close,len_ma)) : f_secureSecurity(tic_ma, res_ma, sma(close,len_ma))
ma_long = exponential?f_secureSecurity(syminfo.tickerid, res_ma, ema(close,len_ma)) : f_secureSecurity(syminfo.tickerid, res_ma, sma(close,len_ma))

cl1 = f_secureSecurity(syminfo.tickerid, 'M', close)
cl2 = f_secureSecurity(tic_ma, 'M', close)

// Input Backtest Range
showDate  = input(defval = false, title = "Show Date Range", type = input.bool)
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 1995, title = "From Year",       type = input.integer, minval = 1850)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1850)

// Funcion Example
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

// Calculation
bullish_cross = ticker?cl2>ma_cus : cl1>ma_long
bearish_cross = ticker?cl2<ma_cus : cl1<ma_long

MAColor = bullish_cross ? color.green : bearish_cross ? color.red : color.orange

// Strategy
strategy.entry("long", strategy.long, when = window() and bullish_cross)
strategy.close("long", when = window() and bearish_cross)

// Output
plot(switch1?ma_long:na,color = MAColor,linewidth=4)

// Alerts
alertcondition(bullish_cross, title='Bullish', message='Bullish')
alertcondition(bearish_cross, title='Bearish', message='Bearish')