Chiến lược hỗ trợ và kháng cự năng động dựa trên dữ liệu lịch sử

Tác giả:ChaoZhang, Ngày: 2023-11-28 17:00:13
Tags:

img

Tổng quan

Chiến lược này tính toán động mức hỗ trợ và kháng cự dựa trên giá cao, thấp và đóng lịch sử, và tạo ra tín hiệu giao dịch phù hợp. Nó phù hợp với các vị trí trung hạn đến dài hạn và có thể sử dụng hiệu quả mức hỗ trợ và kháng cự trên thị trường để kiếm lợi nhuận.

Chiến lược logic

  1. Tính toán giá trung bình của các giai đoạn trước cao, thấp và đóng như điểm pivot (PP).

  2. Tính toán 3 đường hỗ trợ: S1 = 2PP - giá cao nhất; S2 = PP - (R1-S1); S3 = giá thấp nhất - 2(giá cao nhất - PP).

  3. Tính toán 3 đường kháng cự: R1 = 2PP - giá thấp nhất; R2 = PP + (R1-S1); R3 = giá cao nhất + 2(PP - giá thấp nhất).

  4. Lấy vị trí dài khi giá vượt qua đường kháng cự, lấy vị trí ngắn khi giá vượt qua đường hỗ trợ.

Phân tích lợi thế

  1. Các mức hỗ trợ và kháng cự năng động dựa trên dữ liệu lịch sử có thể nắm bắt sự thay đổi cấu trúc thị trường kịp thời.

  2. Các cài đặt hỗ trợ và kháng cự nhiều lớp cho phép tối ưu hóa quản lý rủi ro tốt hơn.

  3. Các tín hiệu giao dịch đơn giản và trực quan và cơ chế dừng lỗ.

Phân tích rủi ro

  1. Mức giá tham chiếu được cung cấp bởi dữ liệu lịch sử có thể không hợp lệ trong các kịch bản biến động cao.

  2. Việc chuyển đổi giữa các vị trí dài và ngắn nên xem xét chi phí giao dịch.

  3. Chất lượng dữ liệu cần được đảm bảo để tránh các lỗi tính toán.

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

  1. Xem xét kết hợp các tham chiếu dữ liệu lịch sử hơn như trung bình động 100 ngày v.v.

  2. Tối ưu hóa kích thước vị trí, ví dụ: điều chỉnh kích thước vị trí dựa trên sự biến động.

  3. Thêm các chiến lược dừng lỗ như dừng lỗ sau hoặc dừng lỗ dựa trên rủi ro.

Tóm lại

Chiến lược này cung cấp mức giá tham chiếu hỗ trợ và kháng cự nhiều lớp dựa trên lịch sử. Nó có logic đơn giản và thẳng thắn phù hợp với các vị trí trung hạn đến dài hạn. Trong khi đó, các rủi ro dưới thị trường biến động cao và chi phí giao dịch nên được theo dõi. Tăng cường thêm có thể làm cho chiến lược mạnh mẽ trong môi trường phức tạp.


/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 09/06/2020
// Pivot points simply took the high, low, and closing price from the previous period and 
// divided by 3 to find the pivot. From this pivot, traders would then base their 
// calculations for three support, and three resistance levels. The calculation for the most 
// basic flavor of pivot points, known as ‘floor-trader pivots’, along with their support and 
// resistance levels.
//
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="Pivot Point V2", shorttitle="Pivot Point V2", overlay = true)
res = input(title="Resolution", type=input.resolution, defval="D")
SellFrom = input(title="Sell from ", defval="R1", options=["R1", "R2", "R3"])
BuyFrom = input(title="Buy from ", defval="S1", options=["S1", "S2", "S3"])
width = input(1, minval=1)
reverse = input(false, title="Trade reverse")
xHigh  = security(syminfo.tickerid,res, high)
xLow   = security(syminfo.tickerid,res, low)
xClose = security(syminfo.tickerid,res, close)
vPP = (xHigh+xLow+xClose) / 3
vS1 = 2*vPP - xHigh 
vR1 = 2*vPP-xLow
vS2 = vPP - (vR1 - vS1)
vR2 = vPP + (vR1 - vS1)
vS3 = xLow - 2 * (xHigh - vPP)
vR3 = xHigh + 2 * (vPP - xLow) 
pos = 0
S = iff(BuyFrom == "S1", vS1, 
      iff(BuyFrom == "S2", vS2,
         iff(BuyFrom == "S3", vS3,0)))
B = iff(SellFrom == "R1", vR1, 
      iff(SellFrom == "R2", vR2,
         iff(SellFrom == "R3", vR3,0)))
pos := iff(close > B, 1,
       iff(close < S, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Thêm nữa