Chiến lược giao dịch chỉ báo trung bình động


Ngày tạo: 2023-12-06 17:10:00 sửa đổi lần cuối: 2023-12-06 17:10:00
sao chép: 0 Số nhấp chuột: 605
1
tập trung vào
1619
Người theo dõi

Chiến lược giao dịch chỉ báo trung bình động

Tổng quan về chiến lược

Chiến lược này dựa trên nhiều chỉ số trung bình di chuyển để tạo ra tín hiệu giao dịch. Chiến lược sẽ xem xét các trung bình di chuyển ngắn hạn, trung bình và dài hạn cùng một lúc, để xác định hướng xu hướng và tạo ra tín hiệu giao dịch dựa trên sự giao thoa của chúng.

Tên chiến lược

Chiến lược chéo chéo đa trung bình di chuyển

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

Chiến lược này sử dụng các đường trung bình di chuyển cùng một lúc trong 3 chu kỳ khác nhau, bao gồm đường 7 ngày, đường 13 ngày và đường 21 ngày.

  1. Khi đường 7 ngắn hạn đi qua đường 13 trung hạn và đường 21 dài hạn đi lên, nó tạo ra tín hiệu đa.
  2. Khi đường 7 ngắn hạn vượt qua đường 13 trung bình và đường 21 dài hạn đang có xu hướng giảm, tín hiệu giao dịch sẽ được tạo ra.

Bằng cách kết hợp các đường trung bình di chuyển từ các khoảng thời gian khác nhau, bạn có thể đánh giá chính xác hơn về xu hướng thị trường và tránh giao dịch sai.

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

  1. Sử dụng nhiều nhóm trung bình di chuyển, bạn có thể đánh giá chính xác hơn về xu hướng thị trường và tránh bị lừa bởi các đột phá giả hoặc biến động ngắn hạn trong thị trường.
  2. Chỉ phát tín hiệu khi xu hướng rõ ràng, có thể giảm số lần giao dịch không cần thiết, giảm chi phí giao dịch.
  3. Cài đặt tham số linh hoạt, có thể điều chỉnh chu kỳ trung bình di chuyển theo sở thích cá nhân, thích ứng với các giống và môi trường thị trường khác nhau.

Rủi ro chiến lược

  1. Trong một thị trường có sự biến động, có thể có những tín hiệu sai lệch thường xuyên.
  2. Đường trung bình di chuyển là một chỉ số theo xu hướng, không thể xác định chính xác điểm chuyển hướng.
  3. Đường trung bình di chuyển chéo chậm phát hiện xu hướng, có thể bỏ lỡ một phần lợi nhuận.
  4. Có thể giảm rủi ro bằng cách giới thiệu các tín hiệu xác thực chỉ số kỹ thuật khác, tối ưu hóa các tham số trung bình di chuyển.

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

  1. Cân nhắc giới thiệu các chỉ số biến động để đánh giá cường độ của xu hướng và tránh giao dịch trong thị trường biến động.
  2. Thử sử dụng các kỹ thuật định lượng như học máy để tự động tối ưu hóa các tham số trung bình di chuyển.
  3. Tăng chiến lược dừng lỗ, dừng lỗ kịp thời khi tổn thất mở rộng.
  4. Hãy cân nhắc giảm điểm trượt bằng cách sử dụng đơn giá giới hạn khi giao dịch trên đường trung bình di chuyển.

Tóm tắt

Chiến lược này kết hợp các đường trung bình di chuyển trong ba khoảng thời gian ngắn, trung bình và dài, đánh giá xu hướng thị trường dựa trên mối quan hệ chéo của chúng, là một chiến lược theo xu hướng tương đối ổn định và hiệu quả. Bằng cách tối ưu hóa các tham số chỉ số, cơ chế dừng lỗ và cách đặt hàng, chiến lược có thể được nâng cao hơn nữa tỷ lệ thắng và lợi nhuận.

Mã nguồn chiến lược
/*backtest
start: 2022-11-29 00:00:00
end: 2023-12-05 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/
// © Crypto-Oli

//@version=4
strategy("CryptOli 3 MAs long/short Backtest", initial_capital=5000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, overlay=true)

// this is an educational Script - basicly its very simple - you can see how minimal changes impact results, thats why i posted it
// Credits to Quantnomad to publish tons of free educational script
// this Script is based on https://www.tradingview.com/script/0NgUadGr-Ultimate-MA-Cross-Indicator/ Quantnomads Ultimate MA Indicator 
// HA - Option for calcucaltion based on HA-Candles (very famous recently)
// Source Input - Option (Candletype for calculation, close, ohlc4 ect.) --- there are huge differences --- try it by your own

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE

// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2015, title="From Year", minval=1970)

// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2030, title="To Year", minval=1970)

// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate

////////////////////////////////////////////////////////////////////////////////

h = input(false, title = "Signals from Heikin Ashi Candles")

ma_type      = input(title = "MA Type",         type = input.string,  defval = "SMMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA'])
src = input(ohlc4)

short_ma_len = input(title = "Short MA Length", type = input.integer, defval = 7,     minval = 1)
short_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close
middle_ma_len  = input(title = "Middle MA Length",  type = input.integer, defval = 13,    minval = 2)
middle_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close
long_ma_len  = input(title = "Long MA Length",  type = input.integer, defval = 21,    minval = 2)
long_ma_src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, src, lookahead = false) : close


tick_round(x) => 
    round(x / syminfo.mintick) * syminfo.mintick

// Set initial values to 0
short_ma = 0.0
middle_ma = 0.0
long_ma  = 0.0

// Simple Moving Average (SMA)
if ma_type == 'SMA' 
    short_ma := sma(short_ma_src, short_ma_len)
    middle_ma := sma(middle_ma_src, middle_ma_len)
    long_ma  := sma(long_ma_src,  long_ma_len)

// Exponential Moving Average (EMA)
if ma_type == 'EMA'
    short_ma := ema(short_ma_src, short_ma_len)
    middle_ma := ema(middle_ma_src, middle_ma_len)
    long_ma  := ema(long_ma_src,  long_ma_len)

// Weighted Moving Average (WMA)
if ma_type == 'WMA'
    short_ma := wma(short_ma_src, short_ma_len)
    middle_ma := wma(middle_ma_src, middle_ma_len)
    long_ma  := wma(long_ma_src,  long_ma_len)

// Hull Moving Average (HMA)
if ma_type == 'HMA'
    short_ma := wma(2*wma(short_ma_src, short_ma_len/2)-wma(short_ma_src, short_ma_len), round(sqrt(short_ma_len)))
    middle_ma := wma(2*wma(middle_ma_src, middle_ma_len/2)-wma(middle_ma_src, middle_ma_len), round(sqrt(middle_ma_len)))
    long_ma  := wma(2*wma(long_ma_src,  long_ma_len /2)-wma(long_ma_src,  long_ma_len),  round(sqrt(long_ma_len)))

// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
    short_ma := vwma(short_ma_src, short_ma_len)
    middle_ma := vwma(middle_ma_src, middle_ma_len)
    long_ma  := vwma(long_ma_src,  long_ma_len)


// Smoothed Moving Average (SMMA)    
if ma_type == 'SMMA'
    short_ma := na(short_ma[1]) ? sma(short_ma_src, short_ma_len) : (short_ma[1] * (short_ma_len - 1) + short_ma_src) / short_ma_len
    middle_ma := na(middle_ma[1]) ? sma(middle_ma_src, middle_ma_len) : (middle_ma[1] * (middle_ma_len - 1) + middle_ma_src) / middle_ma_len
    long_ma  := na(long_ma[1])  ? sma(long_ma_src,  long_ma_len)  : (long_ma[1]  * (long_ma_len  - 1) + long_ma_src)  / long_ma_len

// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
    e1_short = ema(short_ma_src, short_ma_len)
    e1_middle = ema(middle_ma_src, middle_ma_len)
    e1_long  = ema(long_ma_src,  long_ma_len)
    
    short_ma := 2 * e1_short - ema(e1_short, short_ma_len)
    middle_ma := 2 * e1_middle - ema(e1_middle, middle_ma_len)
    long_ma  := 2 * e1_long  - ema(e1_long,  long_ma_len)

// Plot MAs
plot(short_ma, color = color.green,   linewidth = 1)
plot(middle_ma, color = color.yellow,   linewidth = 1)
plot(long_ma,  color = color.red, linewidth = 1)

if close>long_ma and short_ma>middle_ma and time_cond
    strategy.entry("Long", strategy.long)


if close<long_ma and short_ma<middle_ma and time_cond
    strategy.entry("Short", strategy.short)