Chiến lược theo dõi xu hướng tăng của Golden Cross

Tác giả:ChaoZhang, Ngày: 2024-01-03 11:46:44
Tags:

img

Tổng quan

Chiến lược này được thiết kế dựa trên nguyên tắc chéo vàng của đường trung bình động. Cụ thể, nó sử dụng hai đường trung bình động đơn giản của các giai đoạn khác nhau, cụ thể là đường 50 giai đoạn và đường 200 giai đoạn. Khi đường 50 giai đoạn vượt qua đường 200 giai đoạn từ dưới, một tín hiệu mua được tạo ra. Khi đường 50 giai đoạn vượt qua đường 200 giai đoạn từ trên, một tín hiệu bán được tạo ra.

Chiến lược logic

Chiến lược được viết bằng ngôn ngữ Pine Script, với logic chính như sau:

  1. Tính toán hai SMA: SMA 50 giai đoạn và SMA 200 giai đoạn
  2. Xác định đường chéo vàng: khi SMA 50 giai đoạn vượt qua SMA 200 giai đoạn, mua dài
  3. Xác định đường chéo chết: khi SMA 50 giai đoạn vượt dưới SMA 200 giai đoạn, vị trí đóng

Sự quan trọng của việc sử dụng chỉ số SMA ở đây là nó có thể lọc hiệu quả tiếng ồn thị trường và nắm bắt xu hướng dài hạn. Khi đường SMA nhanh hơn vượt qua đường SMA chậm hơn, nó chỉ ra đà tăng ngắn hạn đánh bại xu hướng giảm dài hạn, tạo ra tín hiệu mua.

Ưu điểm

Chiến lược có những lợi thế sau:

  1. Nguyên tắc đơn giản và dễ hiểu, dễ thực hiện.
  2. Các thiết lập PARAMETERS hợp lý, có thể tùy chỉnh hai giai đoạn SMA, thích nghi với các thị trường khác nhau.
  3. Được viết bằng ngôn ngữ Pine ổn định, chạy hiệu quả.
  4. Thiết lập hình ảnh phong phú, dễ sử dụng.

Rủi ro và giải pháp

Chiến lược này cũng có một số rủi ro:

  1. Có thể xảy ra đột phá sai, tạo ra tín hiệu sai. Có thể điều chỉnh hai thông số SMA để giảm xác suất đột phá sai.

  2. Không thể đáp ứng thị trường ngắn hạn, chỉ phù hợp với các nhà đầu tư dài hạn. Có thể rút ngắn đúng thời gian SMA nhanh.

  3. Có thể đặt dừng lỗ, hoặc điều chỉnh đúng cách quản lý vị trí.

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

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

  1. Thêm các chỉ số khác để lọc, kết hợp nhiều điều kiện mua / bán để giảm tín hiệu sai.

  2. Thêm cơ chế dừng lỗ bắt buộc dừng lỗ khi giá phá vỡ một mức nhất định.

  3. Tối ưu hóa quản lý vị trí. chẳng hạn như kim tự tháp dọc theo xu hướng, dừng lỗ, vv để kiểm soát giảm và theo đuổi lợi nhuận cao hơn.

  4. Tối ưu hóa tham số: Đánh giá tác động của các tham số khác nhau đối với tỷ lệ lợi nhuận / rủi ro.

Kết luận

Nói chung, đây là một chiến lược theo dõi xu hướng điển hình. Nó sử dụng lợi thế của SMA để dễ dàng và hiệu quả nắm bắt xu hướng dài hạn. Có thể tùy chỉnh dựa trên phong cách và không gian điều chỉnh của một người. Cũng cần phải nhận thấy các thiếu sót hiện có để tối ưu hóa và cải thiện hơn nữa.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
//
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// www.tradingview.com/u/TradeFab/
// www.tradefab.com
// ___  __        __   __  __       __
//  |  |__)  /\  |  \ |__ |__  /\  |__)
//  |  |  \ /~~\ |__/ |__ |   /~~\ |__)
//
// DISCLAIMER: Futures, stocks and options trading involves substantial risk of loss 
// and is not suitable for every investor. You are responsible for all the risks and 
// financial resources you use and for the chosen trading system.
// Past performance is not indicative for future results. In making an investment decision,
// traders must rely on their own examination of the entity making the trading decisions!
//
// TradeFab's Golden Cross Strategy.
// The strategy goes long when the faster SMA 50 (the simple moving average of the last 50 bars) crosses
// above the SMA 200. Orders are closed when the SMA 50 crosses below SMA 200. The strategy does not short.
//
VERSION = "1.2"
// 1.2 FB 2020-02-09 converted to Pine version 4
// 1.1 FB 2017-01-15 added short trading
// 1.0 FB 2017-01-13 basic version using SMAs
//
strategy(
   title        = "TFs Golden Cross " + VERSION, 
   shorttitle   = "TFs Golden Cross " + VERSION, 
   overlay      = true
   )


///////////////////////////////////////////////////////////
// === INPUTS ===
///////////////////////////////////////////////////////////
inFastSmaPeriod     = input(title="Fast SMA Period", type=input.integer, defval=50, minval=1)
inSlowSmaPeriod     = input(title="Slow SMA Period", type=input.integer, defval=200, minval=1)

// backtest period
testStartYear       = input(title="Backtest Start Year",    type=input.integer, defval=2019, minval=2000)
testStartMonth      = input(title="Backtest Start Month",   type=input.integer, defval=1, minval=1, maxval=12)
testStartDay        = input(title="Backtest Start Day",     type=input.integer, defval=1, minval=1, maxval=31)
testStopYear        = input(title="Backtest Stop Year",     type=input.integer, defval=2099, minval=2000)
testStopMonth       = input(title="Backtest Stop Month",    type=input.integer, defval=12, minval=1, maxval=12)
testStopDay         = input(title="Backtest Stop Day",      type=input.integer, defval=31, minval=1, maxval=31)


///////////////////////////////////////////////////////////
// === LOGIC ===
///////////////////////////////////////////////////////////
smaFast = sma(close, inFastSmaPeriod)
smaSlow = sma(close, inSlowSmaPeriod)

bullishCross = crossover (smaFast, smaSlow)
bearishCross = crossunder(smaFast, smaSlow)

// detect valid backtest period
isTestPeriod() => true


///////////////////////////////////////////////////////////
// === POSITION EXECUTION ===
///////////////////////////////////////////////////////////
strategy.entry("long",  strategy.long,  when=bullishCross)
strategy.entry("short", strategy.short, when=bearishCross)


///////////////////////////////////////////////////////////
// === PLOTTING ===
///////////////////////////////////////////////////////////
// background color
nopColor = color.new(color.gray, 50)
bgcolor(not isTestPeriod() ? nopColor : na)

bartrendcolor = 
   close > smaFast and 
   close > smaSlow and 
   change(smaSlow) > 0 
       ? color.green 
       : close < smaFast and 
         close < smaSlow and 
         change(smaSlow) < 0 
             ? color.red 
             : color.blue
barcolor(bartrendcolor)
plot(smaFast, color=change(smaFast) > 0 ? color.green : color.red, linewidth=2)
plot(smaSlow, color=change(smaSlow) > 0 ? color.green : color.red, linewidth=2)

// label
posColor = color.new(color.green, 75)
negColor = color.new(color.red, 75)
dftColor = color.new(color.blue, 75)
posProfit= (strategy.position_size != 0) ? (close * 100 / strategy.position_avg_price - 100) : 0.0
posDir   = (strategy.position_size  > 0) ? "long" : strategy.position_size < 0 ? "short" : "flat"
posCol   = (posProfit > 0) ? posColor : (posProfit < 0) ? negColor : dftColor

var label lb = na
label.delete(lb)
lb := label.new(bar_index, max(high, highest(5)[1]),
   color=posCol,
   text="Pos: "+ posDir +
      "\nPnL: "+tostring(posProfit, "#.##")+"%" +
      "\nClose: "+tostring(close, "#.##"))
  

Thêm nữa