Chiến lược dao động dải Golden Section


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

Chiến lược dao động dải Golden Section

Tổng quan

Chiến lược biến động vùng phân chia vàng là một chiến lược định lượng được thiết kế dựa trên lý thuyết phân chia vàng. Chiến lược này chủ yếu sử dụng quy tắc phân chia vàng để tính toán nhiều dải giá, tạo thành các dải lên xuống.

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

Lập luận cốt lõi của mã là tính toán các đoạn phân chia vàng của giá như là điểm mấu chốt. Các bước chính là:

  1. Tính trung bình EMA 14 chu kỳ làm trục trung tâm
  2. 4 dải sóng trên và dưới được tính theo ATR và tỷ lệ phân chia vàng
  3. Một tín hiệu giao dịch được tạo ra khi giá vượt qua một làn sóng giảm lên trên hoặc một làn sóng tăng lên dưới
  4. Thiết lập Stop Loss Stop, theo dõi biến động giá và lợi nhuận

Với phương pháp dựa trên điểm đột phá này, bạn có thể nắm bắt hiệu quả những biến động ngắn hạn của thị trường và giao dịch lợi nhuận qua lại giữa các đợt sóng.

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

Lợi thế lớn nhất của chiến lược này là sử dụng chỉ số lý thuyết quan trọng về phân chia vàng để định vị các điểm giá quan trọng, do đó cải thiện khả năng kiếm lợi nhuận. Các lợi thế cụ thể được thể hiện chủ yếu là:

  1. Vàng phân chia sóng rõ ràng, dễ dàng đánh giá lỗ hổng
  2. Phạm vi sóng phù hợp, không quá nhỏ gọn và không quá thoải mái
  3. Có nhiều dải tần có thể chọn, giao dịch có thể tấn công hoặc giao dịch có thể bảo vệ
  4. Các nhà khoa học đã nghiên cứu và phát hiện ra rằng: “Sự biến động của các dải sóng là rất rõ ràng và chiến lược điều khiển đường ngắn có hiệu quả”.

Rủi ro chiến lược

Vì chiến lược này theo đuổi lợi nhuận ngắn hạn, nên cũng có một số rủi ro cần lưu ý:

  1. Không có lợi nhuận trong xu hướng chu kỳ lớn
  2. Rủi ro dừng lỗ lớn hơn khi giá dao động mạnh
  3. Có nhiều tín hiệu đột phá, nên cần chọn cẩn thận
  4. Không có hiệu lực khi đặc điểm rung sóng biến mất

Những rủi ro này có thể được kiểm soát bằng cách điều chỉnh các tham số, lựa chọn các băng tần phù hợp và cách quản lý tiền.

Tối ưu hóa chiến lược

Chiến lược này có thể được tối ưu hóa hơn nữa:

  1. Kết hợp với các chỉ số xu hướng lọc một số hướng xu hướng để tạo ra tín hiệu
  2. Chặn chiến lược trong một khoảng thời gian nhất định hoặc trước một sự kiện quan trọng
  3. Động thái điều chỉnh mức dừng để phù hợp với tần suất biến động của thị trường
  4. Các tham số tối ưu hóa chọn các EMA khác nhau theo chu kỳ làm đường trung bình chuẩn

Tóm tắt

Chiến lược biến động băng tần phân chia vàng nói chung là một chiến lược ngắn gọn rất thực tế. Nó sử dụng lý thuyết phân chia vàng để đặt các điểm quan trọng của giá và có thể kiếm được lợi nhuận lớn khi giá dao động gần các điểm này. Phương pháp dựa trên phạm vi phá vỡ này phù hợp với thị trường có sự biến động và đặc điểm nhất định, có thể được sử dụng một mình hoặc kết hợp với các chiến lược khác.

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

//@version=5
strategy("FIBONACCI BANDS Strategy", shorttitle="FBANDS Strategy", overlay=true)
// === Date === { 
//Backtest dates
fromDay = input.int(defval=1, title='From Day',minval=1,maxval=31)
fromMonth = input.int(defval=2, title='From Month',minval=1,maxval=12)
fromYear = input.int(defval=2022, title='From Year')
thruDay = input.int(defval=1, title='Thru Day',minval=1,maxval=31)
thruMonth = input.int(defval=1, title='Thru Month',minval=1,maxval=12)
thruYear = input.int(defval=2112, title='Thru Year')
showDate = true  // input(defval=true, title="Show Date Range")
start = timestamp(fromYear, fromMonth, fromDay, 00, 00)  // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59)  // backtest finish window
window() =>  // create function "within window of time"
    time >= start and time <= finish ? true : false
// }

// === Long or Short ===  
tradeDirection = input.string(title="Long veya Short", options=["Long", "Short", "Both"], defval="Both",                                       group="Bot")
// Translate input into trading conditions
longOK  = (tradeDirection == "Long") or (tradeDirection == "Both")
shortOK = (tradeDirection == "Short") or (tradeDirection == "Both")
copypaste   = input('{{strategy.order.alert_message}}',         title='alert message to copy/paste',                                    group="Bot")
// }

// === FIBONACCI BANDS === {
EMAperiod = input.int(14, title='EMAperiod', minval=1, maxval=500, group="Fibonacci")
ATRperiod = input.int(14, title='ATRperiod', minval=1, maxval=500, group="Fibonacci")
EMA = ta.ema(close, EMAperiod)
TR1 = math.max(high - low, math.abs(high - close[1]))
TR = math.max(TR1, math.abs(low - close[1]))
ATR = ta.sma(TR, ATRperiod)
F2 = input(defval=1.618, title='Fibonacci Ratio 2', group="Fibonacci")
F3 = input(defval=2.618, title='Fibonacci Ratio 3', group="Fibonacci")
F4 = input(defval=4.236, title='Fibonacci Ratio 4', group="Fibonacci")
R1 = ATR
R2 = ATR * F2
R3 = ATR * F3
R4 = ATR * F4
FIBOTOP4 = EMA + R4
FIBOTOP3 = EMA + R3
FIBOTOP2 = EMA + R2
FIBOTOP1 = EMA + R1
FIBOBOT1 = EMA - R1
FIBOBOT2 = EMA - R2
FIBOBOT3 = EMA - R3
FIBOBOT4 = EMA - R4
plot(FIBOTOP4[1], title='FIBOTOP4', linewidth=1, color=color.new(color.orange, 0))
plot(FIBOTOP3[1], title='FIBOTOP3', linewidth=1, color=color.new(color.aqua, 20))
plot(FIBOTOP2[1], title='FIBOTOP2', linewidth=1, color=color.new(color.gray, 40))
plot(FIBOTOP1[1], title='FIBOTOP1', linewidth=1, color=color.new(color.purple, 40))

plot(FIBOBOT1[1], title='FIBOBOT1', linewidth=1, color=color.new(color.green, 40))
plot(FIBOBOT2[1], title='FIBOBOT2', linewidth=1, color=color.new(color.yellow, 40))
plot(FIBOBOT3[1], title='FIBOBOT3', linewidth=1, color=color.new(color.blue, 20))
plot(FIBOBOT4[1], title='FIBOBOT4', linewidth=1, color=color.new(color.aqua, 0))
// plot(EMA[1], style=plot.style_cross, title='EMA', color=color.new(color.red, 0))

prefm = input.string(title="Fibo", options=["close>FIBOTOP4(orange)", "close>FIBOTOP3(aqua)","close>FIBOTOP2(gray)","close>FIBOTOP1(purple)", "Disable"] , defval="close>FIBOTOP1(purple)", group="Long")
_prefm = false 
if (prefm == "close>FIBOTOP4(orange)" )
    _prefm := close>FIBOTOP4[1]
    
if (prefm == "close>FIBOTOP3(aqua)" )
    _prefm := close>FIBOTOP3[1]

if (prefm == "close>FIBOTOP2(gray)" )
    _prefm := close>FIBOTOP2[1]
    
if (prefm == "close>FIBOTOP1(purple)" )
    _prefm := close>FIBOTOP2[1]
 
 
if (prefm == "Disable" )
    _prefm := low<low[1] or low>low[1]  
    
prefmS = input.string(title="Fibo", options=["close<FIBOBOT1(green)", "close<FIBOBOT2(yellow)", "close<FIBOBOT3(blue)", "close<FIBOBOT4(aqua)", "Disable"] , defval="close<FIBOBOT1(green)", group="Short")
_prefmS = false 
if (prefmS == "close<FIBOBOT1(green)" )
    _prefmS := close<FIBOBOT1[1]
  
if (prefmS == "close<FIBOBOT2(yellow)" )
    _prefmS := close<FIBOBOT2[1]

if (prefmS == "close<FIBOBOT3(blue)" )
    _prefmS := close<FIBOBOT3[1]
  
if (prefmS == "close<FIBOBOT4(aqua)" )
    _prefmS := close<FIBOBOT4[1]

if (prefmS == "Disable" )
    _prefmS := low<low[1] or low>low[1]  

// }

long2= _prefm 

short2= _prefmS
//

// === Bot Codes === { 
enterlong = input("Long Code", title='Long İlk Alım', group="Long Code")
entershort= input("Short Code", title='Short İlk Alım', group="Short Code")
exitlong = input("Long Exit Code", title='Long Exit', group="Long Code")
exitshort= input("Short Exit Code", title='Short Exit', group="Short Code")
// }

////////////////////////////////////////////////////////////////////////////////////////////TPSL
// Inputs
sl_inp = input.float(4, title='Stop %', step=0.1, group="Long") / 100
tp_inp = input.float(1.5, title='TP %', step=0.1, group="Long") / 100

sl_inp2 = input.float(4, title='Stop %', step=0.1, group="Short") / 100
tp_inp2 = input.float(1.5, title='TP %', step=0.1, group="Short") / 100

longtp = strategy.position_avg_price * (1 + tp_inp) 
longstop=  strategy.position_avg_price * (1 - sl_inp)

shortstop=  strategy.position_avg_price * (1 + sl_inp2)
shorttp = strategy.position_avg_price * (1 - tp_inp2) 
////////////////////////////////////////////////////////////////////////////////////////////
if window() and strategy.position_size==0 and longOK
    strategy.entry("Long", strategy.long, when= long2, alert_message=enterlong, comment="Long")
    
if strategy.position_size>0
    strategy.exit("Long", stop= longstop, limit=longtp, alert_message=exitlong, comment="TPSL")
////////////////////////////////////////////////////////////////////////////////////////////SHORT
if window() and strategy.position_size==0 and shortOK 
    strategy.entry("Short", strategy.short, when= short2, alert_message=entershort, comment="Short")
    
if strategy.position_size<0
    strategy.exit("Short", stop= shortstop, limit= shorttp, alert_message=exitshort, comment="TPSL")