Chiến lược Fisher Transform Backtest

Tác giả:ChaoZhang, Ngày: 2023-12-04 13:43:05
Tags:

img

Tổng quan

Chiến lược kiểm tra ngược biến đổi Fisher tính toán biến đổi Fisher của giá để xác định các điểm đảo ngược giá và tạo ra các tín hiệu giao dịch phù hợp. Chiến lược xử lý giá bằng công thức biến đổi Fisher để loại bỏ các tính năng phi Gauss của phân phối giá, dẫn đến một chỉ số tiêu chuẩn hóa với phân phối Gauss gần đúng. Chiến lược xác định sự đảo ngược giá dựa trên các điểm uốn của đường cong biến đổi Fisher và tạo ra các tín hiệu dài và ngắn.

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

Cốt lõi của chiến lược này là xử lý giá bằng công thức biến đổi Fisher để loại bỏ các tính năng không phải của Gauss trong phân phối giá tự nhiên.

y = 0,5 * ln (((1 + x) / ((1-x))

Ở đây x là giá được xử lý, thu được bằng cách tìm ra giá cao nhất và thấp nhất trong thời gian dài gần đây nhất bằng cách sử dụng các hàm cao nhất và thấp nhất, và sau đó bình thường hóa như sau:

x = (giá - tối thiểu) / ((tối đa - tối thiểu) - 0,5

Giá được xử lý theo cách này gần đúng với phân phối Gauss. x sau đó được thay thế vào công thức biến đổi Fisher để có được đường cong biến đổi Fisher. Các điểm uốn cong trong đường cong biến đổi Fisher đảo ngược tín hiệu giá.

Khi đường cong biến đổi Fisher chuyển từ dương sang âm, một tín hiệu bán được tạo ra. Khi chuyển từ âm sang dương, một tín hiệu mua được tạo ra.

Phân tích lợi thế

  1. Chuyển đổi Fisher loại bỏ các tính năng không phải Gauss từ giá cả, dẫn đến giá cả được chuẩn hóa tốt hơn và ít tín hiệu sai hơn

  2. Nhận các điểm đảo ngược giá, tránh theo đuổi đỉnh và đáy

  3. Điều chỉnh tham số linh hoạt cho độ nhạy điều chỉnh đảo ngược

  4. Định hướng tùy chỉnh, thích nghi với các môi trường thị trường khác nhau

  5. Logic đơn giản dễ hiểu và thực hiện

Phân tích rủi ro

  1. Cài đặt tham số không chính xác có thể bỏ lỡ các đường rẽ hoặc tạo ra tín hiệu sai

  2. Sự trượt trong giao dịch trực tiếp có thể ngăn chặn việc thực hiện tín hiệu hoàn hảo

  3. Khó xác định các bước chuyển đổi khi giá biến động

  4. Khó thực hiện trong giao dịch trực tiếp với nhu cầu xác nhận đảo ngược

Giải pháp:

  1. Tối ưu hóa tham số bằng cách điều chỉnh Length

  2. Nới lỏng các tiêu chí nhập cảnh thích hợp để đảm bảo lấp đầy

  3. Chế độ lọc tín hiệu sai kết hợp các chỉ số khác

  4. Thực hiện đúng quy tắc và quản lý rủi ro

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

  1. Tối ưu hóa tham số Length để tìm kết hợp tốt nhất

  2. Thêm các bộ lọc để tránh các tín hiệu sai, ví dụ như đường trung bình động, chỉ số biến động, v.v.

  3. Bao gồm stop loss để kiểm soát lỗ cho mỗi giao dịch

  4. Thêm cơ chế tái nhập để theo dõi xu hướng tiếp tục

Kết luận

Chiến lược Fisher Transform backtest xác định các điểm đảo ngược giá bằng cách loại bỏ các tính năng giá không phải Gauss. Đây là một chiến lược đảo ngược trung bình dễ dàng thực hiện. Ưu điểm của nó nằm trong các tham số linh hoạt để bắt lượt trong khi điểm yếu chính của nó là khó khăn của việc thực hiện trực tiếp với sự cần thiết của các quy tắc nhập khẩu nghiêm ngặt.


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

//@version = 2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v2.0 22/12/2016
// 	Market prices do not have a Gaussian probability density function
// 	as many traders think. Their probability curve is not bell-shaped.
// 	But trader can create a nearly Gaussian PDF for prices by normalizing
// 	them or creating a normalized indicator such as the relative strength
// 	index and applying the Fisher transform. Such a transformed output 
// 	creates the peak swings as relatively rare events.
// 	Fisher transform formula is: y = 0.5 * ln ((1+x)/(1-x))
// 	The sharp turning points of these peak swings clearly and unambiguously
// 	identify price reversals in a timely manner. 
//
//  For signal used zero. 
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Fisher Transform Indicator by Ehlers Backtest", shorttitle="Fisher Transform Indicator by Ehlers")
Length = input(10, minval=1)
reverse = input(false, title="Trade reverse")
hline(0, color=blue)
xHL2 = hl2
xMaxH = highest(xHL2, Length)
xMinL = lowest(xHL2,Length)
nValue1 = 0.33 * 2 * ((xHL2 - xMinL) / (xMaxH - xMinL) - 0.5) + 0.67 * nz(nValue1[1])
nValue2 =   iff(nValue1 > .99,  .999,
	         iff(nValue1 < -.99, -.999, nValue1))
nFish = 0.5 * log((1 + nValue2) / (1 - nValue2)) + 0.5 * nz(nFish[1])
pos = iff(nFish > 0, 1,
	   iff(nFish < 0, -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)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(nFish, color=green, title="Fisher")
plot(nz(nFish[1]), color=red, title="Trigger")

Thêm nữa