Chiến lược giao cắt trung bình động tăng tương đối


Ngày tạo: 2023-10-18 11:16:53 sửa đổi lần cuối: 2023-10-18 11:16:53
sao chép: 0 Số nhấp chuột: 644
1
tập trung vào
1617
Người theo dõi

Chiến lược giao cắt trung bình động tăng tương đối

Tổng quan

Chiến lược này chủ yếu sử dụng tín hiệu giao chéo đường trung bình của tỷ lệ ký quỹ tương đối của đường mặt trời (RB) để đánh giá xu hướng và giao dịch tự động với các lệnh dừng và dừng. Đường trung bình của ký quỹ tương đối của ký quỹ trong tên chiến lược là đường trung bình tính toán của đường mặt trời so với ký quỹ.

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

Chiến lược này dựa trên chỉ số RBI của Vitelot, chỉ số này được tính bằng trung bình di chuyển của tỷ lệ hình chữ ((RB) so với đường K ngày.

Trong công thức, RB bằng với chiều dài thực của đường dương và chiều dài của đường K, lấy giá trị dương; RB của đường âm lấy giá trị âm. Phạm vi lấy giá trị của RB là từ -1 đến 1.

Chỉ số RBI lọc tiếng ồn thông qua trung bình di chuyển của RB, nắm bắt các đặc điểm cơ bản của thị trường. RBI tạo ra tín hiệu mua khi đi qua đường tín hiệu của nó trên; RBI tạo ra tín hiệu bán khi đi qua đường tín hiệu dưới.

Để lọc các tín hiệu giả trong giai đoạn không chắc chắn đa đầu, chiến lược này cũng sẽ đánh giá xem giá đóng cửa có cao hơn đường trung bình EMA 13 chu kỳ hay không trên chỉ số RBI. Nếu cao hơn, chiến lược đa đầu sẽ được thực hiện. Tương tự như vậy, chiến lược đầu không chỉ được thực hiện khi giá đóng cửa thấp hơn EMA 13 chu kỳ.

Chiến lược này cũng thiết lập các cơ chế dừng lỗ và dừng để kiểm soát rủi ro và khóa lợi nhuận. Sau khi mở vị trí, Trail sẽ theo dõi số điểm dừng được thiết lập, đồng thời thiết lập số điểm dừng cố định.

Phân tích lợi thế

  • Chỉ số RBI đã lọc ra rất nhiều tiếng ồn, có thể nắm bắt được các đặc điểm của xu hướng thị trường và tránh bị lừa dối bởi các tín hiệu sai của thị trường.

  • Kết hợp với bộ lọc đồng nhất, có thể tránh hiệu quả các tín hiệu giả trong thời gian không chắc chắn của nhiều đầu, giảm tổn thất đầu trống.

  • Cài đặt Stop Loss Canvas giúp giảm rủi ro mất mát cho các vị trí cá nhân, đồng thời khóa lợi nhuận và tăng tỷ lệ lợi nhuận tổng thể.

  • Chiến lược này có ít tham số, dễ hiểu và phù hợp cho giao dịch tự động.

Phân tích rủi ro

  • Chiến lược này chỉ dựa trên chỉ số RBI, và nếu chỉ số tự nó tạo ra tín hiệu sai, thì chiến lược tổng thể cũng sẽ thất bại.

  • Thiết lập tham số chỉ số không đúng cũng có thể làm giảm chất lượng tín hiệu giao dịch.

  • Bất kỳ chỉ số kỹ thuật nào cũng có thể không hiệu quả trong một số điều kiện thị trường nhất định và không thể hoàn toàn tránh thua lỗ.

  • Cài đặt điểm dừng quá nhỏ có thể dẫn đến việc dừng lỗ quá thường xuyên; điểm dừng quá lớn có thể mở rộng tổn thất đơn lẻ.

  • Không kiểm soát đủ có thể dẫn đến rủi ro lỗ hổng tài khoản.

Hướng tối ưu hóa

  • Các tham số khác nhau có thể được thử nghiệm để tối ưu hóa các tham số của chỉ số RBI.

  • Có thể lọc thêm các chỉ số phụ trợ khác để cải thiện chất lượng tín hiệu.

  • Các tham số có thể được tối ưu hóa bằng cách đào tạo máy học.

  • Có thể tham gia vào chiến lược quản lý tiền, kiểm soát toàn bộ vị trí và lỗ hổng rủi ro.

  • Bạn có thể thử các chiến lược khác nhau để giữ vị trí, chẳng hạn như giữ vị trí qua đêm hoặc giao dịch ngắn.

Tóm tắt

Chiến lược này nói chung là một chiến lược theo dõi xu hướng đơn giản và trực tiếp. Nó đánh giá xu hướng xu hướng bằng cách tính toán tỷ lệ giao dịch của đường nét so với tỷ lệ pen, đồng thời thêm bộ lọc đường nét và ngăn chặn lỗ để kiểm soát rủi ro, có thể ngăn chặn hiệu quả tín hiệu giả của thị trường.

Mã nguồn chiến lược
/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("RBI Backtest /w TSSL", shorttitle="RBI Strategy", overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 10000, slippage = 5)
// RBI:
//  The EMA of the relative body (RB) of Japanese candles is evaluated.
//  The RB of a candle (my definition) is simply the ratio of the body with respect to its full length
//  and taken positive for bull candles and negative for bear candles:
//      e.g. a bull "marubozo" has RB=1 a bear "marubozo" has RB=-1;
//      a "doji" has RB=0.
//  This simple indicator grasps the essence of the market by filtering out a great deal of noise.
//
//  A flag can be selected to calculate its very basic binary version, where a bull candle counts as a one
//  and a bear candle counts as a minus one.
//
//  Enter (or exit) the market when the signal line crosses the base line.
//  When the market is choppy we have a kind of alternating bear and bull candles so that
//  RBI is FLAT and usually close to zero. 
//  Therefore avoid entering the market when RBI is FLAT and INSIDE the Exclusion level.
//  The exclusion level is to be set by hand: go back in history and check when market was choppy; a good
//  way to set it is to frame the oscillations of RBI whe price was choppy.
//
//  RBI is more effective when an EMA of price is used as filtering. I found EMA(13) to be
//  a decent filter: go long when base crosses signal upwards AND closing price is above EMA(13);
//  same concept for going short.
//
//  As any other indicator, use it with responsibility: THERE CAN'T BE A SINGLE MAGIC INDICATOR winning
//  all trades.
//
//  Above all, have fun.
//
// Vitelot/Yanez/Vts March 31, 2019

par1 = input(5, title="MA1 Period")
par2 = input(5, title="Signal Period")
exclusion = input(0.2, title="Exclusion level")

useBin = input(false, title="Calculate the binary version")

treshold_long = input(0, title="Treshold Long")
treshold_short = input(0, title="Treshold Short")

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=120)
trailTP = input(title="TP Trigger", defval=1)

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 19, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
startTimeOk()  => true // create function "within window of time" if statement true

ynSimple(t) =>
    s = (close>open)? 1: -1
    ema(sum(s,t),t)

ynRel(t) =>
    s = (close-open)/(high-low)
    ema(sum(s,t),t)

yn = useBin? ynSimple(par1): ynRel(par1) 
sig = ema(yn,par2)


plot(yn, color=aqua, title="RBI", linewidth=3, transp=0)
plot(sig, color=orange, title="Signal", linewidth=2, transp=0)

hline(0, color=white, title="Zero level", editable=false)
hline(exclusion, color=yellow, title="Exclusion level +", editable=true, linestyle=line)
hline( 0-exclusion, color=yellow, title="Exclusion level -", editable=true, linestyle=line)

long = crossover(yn,sig) and yn < treshold_long
short = crossover(sig,yn)  and yn > treshold_short

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry("Long", strategy.long, when= long and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) 
strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry("Short", strategy.short, when= short and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= long)