Chiến lược theo dõi xu hướng giá động lượng


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

Chiến lược theo dõi xu hướng giá động lượng

Tổng quan

Chiến lược theo dõi xu hướng giá động sử dụng nhiều chỉ số động lực để xác định xu hướng giá, thiết lập vị trí trong giai đoạn bắt đầu xu hướng, khóa lợi nhuận bằng cách thiết lập dừng lỗ để theo dõi xu hướng giá.

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

Chiến lược theo dõi xu hướng giá động lực sử dụng các chỉ số kỹ thuật sau:

  1. Chỉ số ROC: Chỉ số này được sử dụng để đánh giá động lực giá bằng cách tính tỷ lệ phần trăm của tốc độ biến động giá trong một khoảng thời gian nhất định. Khi ROC là tích cực, nó cho thấy giá đang tăng; khi ROC là âm, nó cho thấy giá đang giảm. Chiến lược thông qua chỉ số ROC để đánh giá xu hướng giá.

Chỉ số năng lượng không gian: Chỉ số này phản ánh mối quan hệ tương đối giữa lực lượng nhiều đầu và lực lượng không đầu. Năng lượng không gian> 0 đại diện cho lực lượng nhiều đầu lớn hơn lực lượng không đầu, giá tăng; ngược lại, giá giảm. Chiến lược sử dụng chỉ số này để so sánh lực lượng không gian và dự đoán hướng giá.

Chỉ số lệch: Chỉ số này đánh giá sự đảo ngược xu hướng bằng cách tính toán giá và khối lượng giao dịch. Chiến lược sử dụng tín hiệu lệch như thời gian vào.

Đường hầm Donchian: Chỉ số này xây dựng đường hầm thông qua giá cao nhất và giá thấp nhất, biên giới của đường hầm có thể được sử dụng làm điểm hỗ trợ và kháng cự. Chiến lược sử dụng đường hầm để đánh giá xu hướng.

  1. Đường trung bình di chuyển: Chỉ số này có thể loại bỏ sự biến động của giá được hỗ trợ, cho thấy xu hướng chính. Chiến lược sử dụng nó để xác định xu hướng chung của giá.

Chiến lược dựa trên nhiều chỉ số trên để đánh giá xu hướng giá và thời gian đảo ngược, trong giai đoạn xu hướng bắt đầu, thiết lập vị trí đầu nhiều hoặc vị trí đầu trống dựa trên tín hiệu chỉ số. Sau đó, dựa trên điểm dừng dừng lỗ để khóa lợi nhuận trong thời gian, để nắm bắt xu hướng giá.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

  1. Sử dụng nhiều chỉ số để đánh giá xu hướng, giảm khả năng sai lầm.

  2. Sử dụng chỉ số để nắm bắt chính xác các điểm đảo ngược xu hướng.

  3. Kết hợp các kênh và đường trung bình di chuyển để xác định xu hướng lớn.

  4. Cài đặt điểm dừng dừng để có thể dừng lại kịp thời và tránh rút lui mở rộng.

  5. Có thể điều chỉnh theo các tham số, áp dụng cho các giao dịch theo chu kỳ và giống khác nhau.

  6. Lập luận chiến lược rõ ràng và dễ hiểu, dễ dàng để tối ưu hóa sau này.

Phân tích rủi ro

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

  1. Việc đánh giá kết hợp nhiều chỉ số làm tăng xác suất tín hiệu sai, cần điều chỉnh các tham số để tối ưu hóa trọng số chỉ số.

  2. Cài đặt điểm dừng quá nhỏ có thể làm tăng xác suất dừng, đặt quá lớn có thể mở rộng rút lui. Cần cân nhắc toàn diện để xác định điểm dừng hợp lý.

  3. Các tham số khác nhau của chu kỳ thị trường cần được điều chỉnh, và việc áp dụng mù quáng có thể dẫn đến không thích nghi với môi trường thị trường.

  4. Cần có đủ tiền để hỗ trợ giao dịch đồng thời nhiều đơn vị, nếu không sẽ khó có được lợi nhuận vượt quá.

  5. Các giao dịch theo quy trình có rủi ro về sự phù hợp được đánh giá lại và hiệu quả của đĩa cứng có một số bất ổn.

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

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

  1. Tối ưu hóa các tham số chỉ số, tìm ra sự kết hợp tối ưu của các tham số cho các chu kỳ và giống khác nhau.

  2. Thêm thuật toán học máy để tự động tìm các tham số tối ưu.

  3. Thêm cơ chế dừng lỗ thích ứng, điều chỉnh điểm dừng lỗ theo tình hình thị trường.

  4. Kết hợp các yếu tố tần số cao và các chỉ số cơ bản, tăng alpha của chiến lược.

  5. Phát triển khung kiểm tra tự động, điều chỉnh các tham số và xác minh hiệu quả giao dịch.

  6. Tiếp theo, các nhà đầu tư có thể sử dụng các mô-đun quản lý rủi ro để kiểm soát quy mô vị trí và giảm rút tiền.

  7. Thêm giao dịch mô phỏng và xác minh thực tế, tăng sự ổn định của chiến lược.

Tóm tắt

Chiến lược này sử dụng nhiều chỉ số động lực để đánh giá xu hướng giá, và thiết lập điểm dừng để khóa lợi nhuận. Chiến lược này có thể nắm bắt xu hướng giá một cách hiệu quả, có tính ổn định mạnh mẽ. Bằng cách điều chỉnh các tham số, tối ưu hóa cấu trúc và kiểm soát rủi ro, chiến lược này có thể tăng cường hiệu quả hơn nữa và giảm rủi ro giao dịch. Chiến lược này cung cấp một chương trình theo dõi xu hướng đáng tin cậy và dễ sử dụng để giao dịch số lượng.

Mã nguồn chiến lược
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-09 00:00:00
period: 1m
basePeriod: 1m
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/
// © mbagheri746

//@version=4
strategy("Bagheri IG Ether v2", overlay=true, margin_long=100, margin_short=100)

TP = input(3000, minval = 1 , title ="Take Profit")
SL = input(2200, minval = 1 , title ="Stop Loss")


//_________________ RoC Definition _________________


rocLength = input(title="ROC Length", type=input.integer, minval=1, defval=186)
smoothingLength = input(title="Smoothing Length", type=input.integer, minval=1, defval=50)
src = input(title="Source", type=input.source, defval=close)

ma = ema(src, smoothingLength)
mom = change(ma, rocLength)

sroc = nz(ma[rocLength]) == 0
     ? 100
     : mom == 0
         ? 0
         : 100 * mom / ma[rocLength]

//srocColor = sroc >= 0 ? #0ebb23 : color.red
//plot(sroc, title="SROC", linewidth=2, color=srocColor, transp=0)
//hline(0, title="Zero Level", linestyle=hline.style_dotted, color=#989898)


//_________________ Donchian Channel _________________

length1 = input(53, minval=1, title="Upper Channel")
length2 = input(53, minval=1, title="Lower Channel")
offset_bar = input(91,minval=0, title ="Offset Bars")

upper = highest(length1)
lower = lowest(length2)

basis = avg(upper, lower)


DC_UP_Band = upper[offset_bar]
DC_LW_Band = lower[offset_bar]

l = plot(DC_LW_Band, style=plot.style_line, linewidth=1, color=color.red)
u = plot(DC_UP_Band, style=plot.style_line, linewidth=1, color=color.aqua)

fill(l,u,color = color.new(color.aqua,transp = 90))

//_________________ Bears Power _________________


wmaBP_period = input(65,minval=1,title="BearsP WMA Period")
line_wma = ema(close, wmaBP_period)

BP = low - line_wma


//_________________ Balance of Power _________________

ES_BoP=input(15, title="BoP Exponential Smoothing")
BOP=(close - open) / (high - low)

SBOP = rma(BOP, ES_BoP)

//_________________ Alligator _________________

//_________________ CCI _________________

//_________________ Moving Average _________________

sma_period = input(74, minval = 1 , title = "SMA Period")
sma_shift = input(37, minval = 1 , title = "SMA Shift")

sma_primary = sma(close,sma_period)

SMA_sh = sma_primary[sma_shift]

plot(SMA_sh, style=plot.style_line, linewidth=2, color=color.yellow)

//_________________ Long Entry Conditions _________________//

MA_Lcnd = SMA_sh > low and SMA_sh < high

ROC_Lcnd = sroc < 0

DC_Lcnd = open < DC_LW_Band

BP_Lcnd = BP[1] < BP[0] and BP[1] < BP[2]

BOP_Lcnd = SBOP[1] < SBOP[0]

//_________________ Short Entry Conditions _________________//

MA_Scnd = SMA_sh > low and SMA_sh < high

ROC_Scnd = sroc > 0

DC_Scnd = open > DC_UP_Band

BP_Scnd = BP[1] > BP[0] and BP[1] > BP[2]

BOP_Scnd = SBOP[1] > SBOP[0]

//_________________ OPEN POSITION __________________//

if strategy.position_size  == 0
    strategy.entry(id = "BUY", long = true , when = MA_Lcnd and ROC_Lcnd and DC_Lcnd and BP_Lcnd and BOP_Lcnd)
    strategy.entry(id = "SELL", long = false , when = MA_Scnd and ROC_Scnd and DC_Scnd and BP_Scnd and BOP_Scnd)

//_________________ CLOSE POSITION __________________//

strategy.exit(id = "CLOSE BUY", from_entry = "BUY", profit = TP , loss = SL)

strategy.exit(id = "CLOSE SELL", from_entry = "SELL" , profit = TP , loss = SL)

//_________________ TP and SL Plot __________________//

currentPL= strategy.openprofit
pos_price = strategy.position_avg_price
open_pos = strategy.position_size

TP_line = (strategy.position_size  > 0) ? (pos_price + TP/100) : strategy.position_size < 0 ? (pos_price - TP/100) : 0.0
SL_line = (strategy.position_size  > 0) ? (pos_price - SL/100) : strategy.position_size < 0 ? (pos_price + SL/100) : 0.0

// hline(TP_line, title = "Take Profit", color = color.green , linestyle = hline.style_dotted, editable = false)
// hline(SL_line, title = "Stop Loss", color = color.red , linestyle = hline.style_dotted, editable = false)


Tline = plot(TP_line != 0.0 ? TP_line : na , title="Take Profit", color=color.green, trackprice = true, show_last = 1)
Sline = plot(SL_line != 0.0 ? SL_line : na, title="Stop Loss", color=color.red, trackprice = true, show_last = 1)
Pline = plot(pos_price != 0.0 ? pos_price : na, title="Stop Loss", color=color.gray, trackprice = true, show_last = 1)


fill(Tline , Pline, color = color.new(color.green,transp = 90))
fill(Sline , Pline, color = color.new(color.red,transp = 90))

//_________________ Alert __________________//

//alertcondition(condition = , title = "Position Alerts", message = "Bagheri IG Ether\n Symbol: {{ticker}}\n Type: {{strategy.order.id}}")

//_________________ Label __________________//


inMyPrice           = input(title="My Price", type=input.float, defval=0)
inLabelStyle        = input(title="Label Style", options=["Upper Right", "Lower Right"], defval="Lower Right")

posColor = color.new(color.green, 25)
negColor = color.new(color.red, 25)
dftColor = color.new(color.aqua, 25)
posPnL   = (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   = (strategy.openprofit > 0) ? posColor : (strategy.openprofit < 0) ? negColor : dftColor
myPnL    = (inMyPrice != 0) ? (close * 100 / inMyPrice - 100) : 0.0

var label lb = na
label.delete(lb)
lb := label.new(bar_index, close,
   color=posCol,
   style=inLabelStyle=="Lower Right"?label.style_label_upper_left:label.style_label_lower_left,
   text=
      "╔═══════╗" +"\n" + 
      "Pos: "  +posDir +"\n" +
      "Pos Price: "+tostring(strategy.position_avg_price) +"\n" +
      "Pos PnL: "  +tostring(posPnL, "0.00") + "%" +"\n" +
      "Profit: "  +tostring(strategy.openprofit, "0.00") + "$" +"\n" +
      "TP: "  +tostring(TP_line, "0.00") +"\n" +
      "SL: "  +tostring(SL_line, "0.00") +"\n" +
      "╚═══════╝")