TrumpBollingerEMCandlestick Chiến lược

Tác giả:ChaoZhang, Ngày: 2023-10-07 15:30:27
Tags:

Tổng quan

Chiến lược này sử dụng Bollinger Bands, EMA và mô hình nến cho giao dịch cờ bạc hai dòng, thuộc về các chiến lược giao dịch ngắn hạn.

Nguyên tắc

Chiến lược bao gồm các phần sau:

  1. Bollinger Bands Tạo ra đường ray trên và dưới dựa trên giá đóng cửa và độ lệch chuẩn. Đi ngắn khi giá tiếp cận đường ray trên, đi dài khi tiếp cận đường ray dưới.

  2. EMA Tính toán đường trung bình động theo hàm số 21 ngày và tạo ra tín hiệu giao dịch khi giá vượt qua đường EMA.

  3. Mô hình nến Xác định các điểm đảo ngược giá như lớp mây tối dưới cùng và mô hình xuyên thủng trên cùng để kích hoạt giao dịch.

  4. Cờ bạc hai dòng Đi dài và ngắn đồng thời dựa trên các tín hiệu từ Bollinger, EMA crossover và mô hình nến.

Lý do là:

Sử dụng Bollinger Bands để xác định các điểm đảo ngược tiềm năng, đi ngắn ở đường ray phía trên và dài ở đường ray phía dưới. Tính toán EMA 21 ngày và đi dài trên thập tự vàng, đi ngắn trên thập tự chết. Ngoài ra, sử dụng các mẫu nến để xác định sự đảo ngược, đi dài trên mây tối phía dưới và ngắn trên lỗ thủng phía trên. Kết hợp cả ba tín hiệu để đưa ra quyết định giao dịch hai hướng cuối cùng.

Chiến lược tích hợp nhiều tín hiệu xác nhận để cải thiện hiệu quả các quyết định giao dịch.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Cải thiện độ chính xác với xác nhận tín hiệu nhiều lần

Sử dụng Bollinger, EMA và nến cùng nhau làm tăng độ chính xác bằng cách xác nhận tín hiệu. Điều này giúp tránh các tín hiệu sai và giao dịch sai.

  1. Phản ứng kịp thời và ghi nhận sự đảo ngược

Các tín hiệu kết hợp nhanh chóng xác định các điểm đảo ngược tiềm năng để giao dịch kịp thời trước khi đảo ngược mở rộng.

  1. Lợi nhuận cao hơn với giao dịch hai dòng

Giữ cả hai vị trí dài và ngắn lợi nhuận từ các động thái lớn theo cả hai hướng. Điều này làm giảm rủi ro trong thị trường một chiều.

  1. Tính linh hoạt cho giao dịch ngắn hạn

Bollinger ngắn hạn và EMA cho phép nắm bắt các động thái ngắn hạn, phù hợp với giao dịch thường xuyên và phản ứng với biến động tần số cao.

  1. Có thể sử dụng trực tiếp và dễ sử dụng

Mã chiến lược hoàn chỉnh làm cho nó trực tiếp có thể sử dụng cho giao dịch trực tiếp.

Phân tích rủi ro

Những rủi ro tiềm ẩn là:

  1. Mức lỗ dừng liên tiếp có thể

Whipsaw của tín hiệu Bollinger, EMA và candlestick có thể gây ra stop loss liên tiếp. Điều chỉnh các tham số để đảm bảo stop loss hợp lý.

  1. Rủi ro cao hơn trong giao dịch hai dòng

Bắt cả dài và ngắn có thể khuếch đại tổn thất.

  1. Giám sát chặt chẽ cần thiết cho giao dịch ngắn hạn

Việc giao dịch ngắn hạn thường xuyên đòi hỏi phải theo dõi chặt chẽ thị trường.

  1. Không gian tối ưu hóa hạn chế

Bollinger và EMA có không gian tối ưu hóa tương đối nhỏ.

  1. Mô hình nến thông thường có thể không rõ ràng

Một phần của chiến lược dựa trên các tín hiệu nến có thể không rõ ràng đôi khi.

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

Chiến lược có thể được cải thiện trong các khía cạnh sau:

  1. Tích hợp nhiều tín hiệu chỉ số hơn

Thêm các chỉ số khác như KD, MACD đa dạng hóa các nguồn tín hiệu và cải thiện độ chính xác quyết định.

  1. Kết hợp học máy

Sử dụng các thuật toán ML để phân tích dữ liệu lịch sử và tăng hoặc thay thế một số tín hiệu chỉ số để giảm can thiệp thủ công.

  1. Tối ưu hóa stop profit/loss

Đưa ra stop profit thích nghi dựa trên hiệu suất và stop loss để giảm rủi ro.

  1. Cải thiện quản lý rủi ro

Tối ưu hóa phân bổ vốn, kích thước vị trí và chiến lược kiểm soát rủi ro theo điều kiện thị trường.

  1. Kiểm tra và tối ưu hóa số lượng

Sử dụng backtesting và giao dịch giấy để lặp đi lặp lại tối ưu hóa các thông số và hỗ trợ các quyết định giao dịch trực tiếp.

  1. Giao dịch tự động

Parameterize chiến lược dựa trên kết quả backtest và kết hợp vào hệ thống giao dịch tự động để thực hiện tự do.

Kết luận

Chiến lược này tích hợp các tín hiệu Bollinger, EMA và candlestick để xác thực nhiều lần. Giao dịch hai đường dẫn tiếp tục cải thiện lợi nhuận. Với phản ứng nhanh, nó phù hợp với giao dịch thường xuyên ngắn hạn. Ngừng lợi nhuận / lỗ hiệu quả và tối ưu hóa tham số có thể tăng hiệu suất trong khi giảm rủi ro. Nhìn chung, chiến lược đơn giản và thực tế này có giá trị thực tế mạnh.


/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//Design by MrPhu in August,10,2018
strategy("TrumpShipper_Long_Short V26", overlay=true)
filterFractals = input(true, title=" Follow Code #Trump On/Off")
dt = 0.0001
confidence=(request.security(syminfo.tickerid, 'D', close)-request.security(syminfo.tickerid, 'D', close[1]))/request.security(syminfo.tickerid, 'D', close[1])
prediction = confidence > dt ? true : confidence < -dt ? false : prediction[1]

if (prediction)
    strategy.exit("Close", "Short ")
    strategy.entry("Long ", strategy.long)

if (not prediction)
    strategy.exit("Close", "Long ")
    strategy.entry("Short ", strategy.short)
///////////Bollinger Band///////////////
length = 20
crc = close, title="Source"
mult = 2.0
basis = sma(crc, length)
dev = mult * stdev(crc, length)
upper = basis + dev
lower = basis - dev
spanColor = prediction ? green : red, transp=90

p1 = plot(upper, title="Short", style=line, linewidth=1, color=spanColor)
p2 = plot(lower, title="Long", style=line, linewidth=1, color=spanColor)

fill(p1, p2, color=spanColor, transp=90, title="Fill")

/////////////
Optional_TimeFrame = 'D'

M_HIGH = request.security(syminfo.tickerid, Optional_TimeFrame, high)
M_OPEN = request.security(syminfo.tickerid, Optional_TimeFrame, open)
M_LOW = request.security(syminfo.tickerid, Optional_TimeFrame, low)

H_RANGE = M_HIGH-M_OPEN
L_RANGE = M_OPEN-M_LOW

H_236 = M_HIGH - H_RANGE * 0.236
H_382 = M_HIGH - H_RANGE * 0.382
H_500 = M_HIGH - H_RANGE * 0.500
H_618 = M_HIGH - H_RANGE * 0.618
H_764 = M_HIGH - H_RANGE * 0.764

L_236 = M_LOW + L_RANGE * 0.236
L_382 = M_LOW + L_RANGE * 0.382
L_500 = M_LOW + L_RANGE * 0.500
L_618 = M_LOW + L_RANGE * 0.618
L_764 = M_LOW + L_RANGE * 0.764

pl1=plot(M_HIGH, color=M_HIGH != M_HIGH[1] ?na:black, style=line, linewidth=1, transp=80)

pl2=plot(H_236, color=H_236 != H_236[1] ?na:gray, style=line, linewidth=1, transp=80)
pl3=plot(H_382, color=H_382 != H_382[1] ?na:black, style=line, linewidth=1, transp=80)
pl4=plot(H_500, color=H_500 != H_500[1] ?na:red, style=line, linewidth=1, transp=80)
pl5=plot(H_618, color=H_618 != H_618[1] ?na:gray, style=line, linewidth=1, transp=80)
pl6=plot(H_764, color=H_764 != H_764[1] ?na:gray, style=line, linewidth=1, transp=80)

pl7=plot(M_OPEN, color=M_OPEN != M_OPEN[1] ?na:blue, style=line, linewidth=2)

pl8=plot(L_236, color=L_236 != L_236[1] ?na:gray, style=line, linewidth=1, transp=80)
pl9=plot(L_382, color=L_382 != L_382[1] ?na:black, style=line, linewidth=1, transp=80)
pl10=plot(L_500, color=L_500 != L_500[1] ?na:red, style=line, linewidth=1, transp=80)
pl11=plot(L_618, color=L_618 != L_618[1] ?na:black, style=line, linewidth=1, transp=80)
pl12=plot(L_764, color=L_764 != L_764[1] ?na:gray, style=line, linewidth=1, transp=80)

pl13=plot(M_LOW, color=M_LOW != M_LOW[1] ?na:black, style=line, linewidth=1, transp=80)

SHOW_MA = false
MA_SRC = hlc3
MA_LENGTH = 21

_MA = ema(MA_SRC, MA_LENGTH)
pl14=plot(not SHOW_MA ? na : _MA, color=teal, linewidth=2)

SHOW_SIGNALS = true

BUYX(_F) => cross(_F, MA_SRC) and rising(_MA, 1)
SELX(_F) => cross(_F, MA_SRC) and falling(_MA, 1)

SEL_SIGNAL = SELX(H_236) or SELX(H_382) or SELX(H_500) or SELX(H_618) or SELX(H_764) or SELX(L_236) or SELX(L_382) or SELX(L_500) or SELX(L_618) or SELX(H_764)

BUY_SIGNAL = BUYX(H_236) or BUYX(H_382) or BUYX(H_500) or BUYX(H_618) or BUYX(H_764) or BUYX(L_236) or BUYX(L_382) or BUYX(L_500) or BUYX(L_618) or BUYX(H_764)

//================= Chart 30m =================/////
//Jurij
h_left = 10
h_right = 10
//barCount = nz(barCount[1]) + 1
//check history and realtime PTZ
h_left_low = lowest(h_left)
h_left_high = highest(h_left)
newlow = low <= h_left_low
newhigh = high >= h_left_high
central_bar_low = low[h_right + 1]
central_bar_high = high[h_right + 1]
full_zone_low = lowest(h_left + h_right + 1)
full_zone_high = highest(h_left + h_right + 1)
central_bar_is_highest = central_bar_high >= full_zone_high
central_bar_is_lowest = central_bar_low <= full_zone_low
plotchar(central_bar_is_highest ? -1 : 0, offset=-h_right-1 ,color=red, text="Top")
plotchar(central_bar_is_lowest ? 1 : 0, offset=-h_right-1 ,location=location.belowbar, color=green, text="Bottom")

Thêm nữa