Chiến lược dài hạn-ngắn của chỉ báo Bullwinkle thích ứng


Ngày tạo: 2024-01-04 16:09:30 sửa đổi lần cuối: 2024-01-04 16:09:30
sao chép: 0 Số nhấp chuột: 651
1
tập trung vào
1621
Người theo dõi

Chiến lược dài hạn-ngắn của chỉ báo Bullwinkle thích ứng

Tổng quan

Chiến lược này dựa trên các chỉ số Buwinco để phát triển tự động nhận ra xu hướng thị trường và thiết lập các vị trí trống. Nó tích hợp các chỉ số kỹ thuật như chỉ số Buwinco, đường trung bình di chuyển và đường hỗ trợ ngang để tự động nhận ra tín hiệu phá vỡ và thiết lập vị trí.

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

Chỉ số trung tâm của chiến lược này là chỉ số Bwinko, nó đánh giá xu hướng thị trường và mức hỗ trợ / kháng cự quan trọng bằng cách tính toán chênh lệch logarithmic của giá đóng cửa các ngày giao dịch khác nhau. Khi chỉ số vượt qua một đường ngang, nó làm quá nhiều và khi đi xuống, nó làm không.

Ngoài ra, chiến lược này tích hợp các dây đai an toàn của EMA gồm nhiều đường trung bình di chuyển như 21 ngày, 55 ngày. Dựa trên các mối quan hệ sắp xếp đồng nhất này, hiện tại là thị trường đa đầu, thị trường không đầu hoặc thị trường tổng hợp, và hạn chế tháo lỗ hoặc thực hiện nhiều hoạt động.

Sử dụng chỉ số Buwenko để nhận diện tín hiệu giao dịch, trung bình di chuyển để đánh giá giai đoạn thị trường, và kết hợp cả hai, có thể tránh việc thiết lập vị trí không phù hợp.

Phân tích lợi thế (Advantage Analysis)

Ưu điểm lớn nhất của chiến lược này là nó có thể tự động xác định xu hướng đa khu vực của thị trường, chỉ số Bwinko rất nhạy cảm với giá trị chênh lệch giữa hai khoảng thời gian, có thể nhanh chóng định vị kháng cự hỗ trợ quan trọng; đồng thời, sắp xếp các đường trung bình di chuyển có thể xác định hiệu quả tình hình hiện tại, xem quá nhiều hay xem quá nhiều.

Sự kết hợp của các chỉ số nhanh với các chỉ số xu hướng cho phép chiến lược xác định điểm mua và bán một cách nhanh chóng, đồng thời ngăn chặn việc mua và bán không phù hợp. Đây là lợi thế lớn nhất của chiến lược.

Phân tích rủi ro

Rủi ro của chiến lược này chủ yếu đến từ hai khía cạnh, một là chỉ số Buwinco tự nó rất nhạy cảm với biến động giá và có thể tạo ra nhiều tín hiệu giao dịch không cần thiết; hai là moving average sẽ sắp xếp hỗn loạn khi ngang, dẫn đến sự hỗn loạn trong vị trí.

Đối với rủi ro điểm đầu tiên, bạn có thể điều chỉnh các tham số chỉ số Bwinko một cách thích hợp, tăng chu kỳ tính toán chỉ số, giảm giao dịch không cần thiết; đối với rủi ro điểm thứ hai, bạn có thể thêm nhiều đường trung bình di chuyển hơn để đánh giá xu hướng chính xác hơn.

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

Các hướng tối ưu hóa chính của chiến lược này là điều chỉnh tham số và tăng điều kiện lọc.

Đối với chỉ số Buwenko, bạn có thể thử các tham số chu kỳ khác nhau để tìm ra sự kết hợp tham số tốt nhất; đối với đường trung bình di chuyển, bạn có thể tiếp tục thêm đường trung bình để tạo thành một hệ thống đánh giá xu hướng hoàn chỉnh hơn. Ngoài ra, bạn cũng có thể thêm các điều kiện lọc như chỉ số tỷ lệ dao động, chỉ số khối lượng giao dịch, giảm tín hiệu giả.

Bằng cách điều chỉnh toàn diện các tham số và điều kiện, bạn có thể nâng cao hơn nữa sự ổn định và lợi nhuận của chiến lược.

Tóm tắt

Chiến lược tự thích ứng của Buincourt đã kết hợp thành công các chỉ số nhanh với các chỉ số xu hướng, có thể tự động xác định các điểm quan trọng của thị trường và thiết lập vị trí chính xác. Ưu điểm của nó là khả năng định vị nhanh chóng và ngăn chặn việc thiết lập vị trí không phù hợp.

Mã nguồn chiến lược
/*backtest
start: 2023-12-27 00:00:00
end: 2024-01-03 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/
// © boftei

//@version=5

strategy("Boftei's Strategy", overlay=false, pyramiding=1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, margin_long = 100, margin_short = 100, slippage=0, commission_type=strategy.commission.percent, commission_value = 0, initial_capital = 40, precision = 6)
strat_dir_input = input.string("all", "strategy direction", options=["long", "short", "all"])
strat_dir_value = strat_dir_input == "long" ? strategy.direction.long : strat_dir_input == "short" ? strategy.direction.short : strategy.direction.all
strategy.risk.allow_entry_in(strat_dir_value)
//////////////////////////////////////////////////////////////////////
//DATA
testStartYear = input(2005, "Backtest Start Year")
testStartMonth = input(7, "Backtest Start Month")
testStartDay = input(16, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
//Stop date if you want to use a specific range of dates
testStopYear = input(2030, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)


testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
//////////////////////////////////////////////////////////////////////
sell = input.float(0.0065, "sell level")
buy = input.float(0, "buy level")
long1 = input.float(-0.493, "long retry - too low")
long2 = input.float(2, "long close up")
long3 = input.float(-1.5, "long close down")
short1 = input.float(1.26, "short retry - too high")
short2 = input.float(-5, "dead - close the short")
///< botvenko script
nn = input(60, "Histogram Period")
float x = 0
float z = 0
float k = 0



y = math.log(close[0]) - math.log(close[nn])
if y>0
    x := y
else
    k := y
//---------------------------------------------
        
plot(y > 0 ? x: 0, color = color.green, linewidth = 4)
plot(y <= 0 ? k: 0, color = color.maroon, linewidth = 4)
plot(y, color = color.yellow, linewidth = 1)

co = ta.crossover(y, buy)
cu = ta.crossunder(y, sell)
retry_long = ta.crossunder(y, long1)
deadline_long_up = ta.crossover(y, long2)
deadline_long_down = ta.crossunder(y, long3)
retry_short = ta.crossover(y, short1)
deadline_short = ta.crossunder(y, short2)


hline(buy, title='buy', color=color.green, linestyle=hline.style_dotted, linewidth=2)
hline(0, title='zero', color=color.white, linestyle=hline.style_dotted, linewidth=1)
hline(sell, title='sell', color=color.red, linestyle=hline.style_dotted, linewidth=2)
hline(long1, title='long retry', color=color.blue, linestyle=hline.style_dotted, linewidth=2)
hline(long2, title='overbought', color=color.teal, linestyle=hline.style_dotted, linewidth=2)
hline(long3, title='oversold', color=color.maroon, linestyle=hline.style_dotted, linewidth=2)
hline(short1, title='short retry', color=color.purple, linestyle=hline.style_dotted, linewidth=2)
hline(short2, title='too low to short - an asset may die', color=color.navy, linestyle=hline.style_dotted, linewidth=2)


////////////////////////////////////////////////////////////EMAprotectionBLOCK
ema_21 = ta.ema(close, 21)
ema_55 = ta.ema(close, 55)
ema_89 = ta.ema(close, 89)
ema_144 = ta.ema(close, 144)
//ema_233 = ta.ema(close, 233)
// ema_377 = ta.ema(close, 377)

long_st = ema_21>ema_55 and ema_55>ema_89 and ema_89>ema_144 //and ema_144>ema_233 and ema_233>ema_377
short_st = ema_21<ema_55 and ema_55<ema_89 and ema_89<ema_144 //and ema_144<ema_233 and ema_233<ema_377 

g_v = long_st == true?3:0
r_v = short_st == true?-2:0
y_v = long_st != true and short_st != true?2:0

plot(math.log(ema_21), color = color.new(#ffaf5e, 50))
plot(math.log(ema_55), color = color.new(#b9ff5e, 50))
plot(math.log(ema_89), color = color.new(#5eff81, 50))
plot(math.log(ema_144), color = color.new(#5effe4, 50))
//plot(math.log(ema_233), color = color.new(#5e9fff, 50))
//plot(math.log(ema_377), color = color.new(#af5eff, 50))

plot(long_st == true?3:0, color = color.new(color.green, 65), linewidth = 5)
plot(short_st == true?-2:0, color = color.new(color.red, 65), linewidth = 5)
plot(long_st != true and short_st != true?2:0, color = color.new(color.yellow, 65), linewidth = 5)
////////////////////////////////////////////////////////////EMAprotectionBLOCK




if (co and testPeriod() and (g_v == 3 or y_v == 2))
    strategy.close("OH BRO", comment = "EXIT-SHORT")
    strategy.close("OH DUDE", comment = "EXIT-SHORT")
	strategy.entry("OH DAMN", strategy.long, comment="ENTER-LONG 'co'")
if (retry_long and testPeriod() and (g_v == 3 or y_v == 2))
    strategy.close("OH DAMN", comment = "EXIT-LONG")
    strategy.entry("OH BRUH", strategy.long, comment="ENTER-LONG 'retry_long'")
	
if (cu and testPeriod() and (r_v == -2 or y_v == 2))
    strategy.close("OH DAMN", comment = "EXIT-LONG")
    strategy.close("OH BRUH", comment = "EXIT-LONG")
	strategy.entry("OH BRO", strategy.short, comment="ENTER-SHORT 'cu'")
if (retry_short and testPeriod() and (r_v == -2 or y_v == 2))
    strategy.close("OH BRO", comment = "EXIT-SHORT")
    strategy.entry("OH DUDE", strategy.short, comment="ENTER-SHORT 'retry_short'")
	
    
if (deadline_long_up and testPeriod() or r_v == -2 and testPeriod())
    strategy.close("OH DAMN", comment = "EXIT-LONG 'deadline_long_up'")
if (deadline_long_down and testPeriod())
    strategy.close("OH DAMN", comment = "EXIT-LONG 'deadline_long_down'")
if (deadline_short and testPeriod() or g_v == 3 and testPeriod())
    strategy.close("OH BRO", comment = "EXIT-SHORT 'deadline_short'")
    // (you can use strategy.close_all(comment = "close all entries") here)