[TOC]
Như câu nói, Thế giới này sẽ tách ra sau khi đoàn kết lâu dài. Cũng sẽ làm ngược lại sau khi chia ra lâu dài. Và hiện tượng này cũng tồn tại trong thị trường tương lai. Không có sự đa dạng mà chỉ tăng nhưng không giảm. Nhưng khi nào tăng và khi nào giảm, nó phụ thuộc vào tỷ lệ lệ lệ lệch. Trong bài viết này, chúng tôi sẽ sử dụng tỷ lệ lệ lệch để xây dựng một chiến lược giao dịch đơn giản.
Tỷ lệ lệ lệch BIAS là một chỉ số kỹ thuật bắt nguồn từ trung bình động. Nó chủ yếu ở dạng tỷ lệ phần trăm để đo mức độ lệch giá từ trung bình động trong biến động. Nếu trung bình động là chi phí trung bình của nhà giao dịch, tỷ lệ lệ lệch là tỷ lệ lợi nhuận trung bình của nhà giao dịch.
Cơ sở lý thuyết của tỷ lệ lệ lệ lệch là phân tích trái tim của nhà giao dịch. Khi giá lớn hơn chi phí trung bình của thị trường, điều đó có nghĩa là các nhà giao dịch vị trí dài sẽ có ý tưởng rút tiền lợi nhuận, điều này sẽ làm cho giá giảm. Khi giá thấp hơn chi phí trung bình của thị trường, điều đó có nghĩa là người bán ngắn có lợi nhuận, và ý tưởng rút tiền lợi nhuận sẽ làm cho giá tăng.
Khi giá lệch lên từ đường trung bình động, tỷ lệ lệ lệch quá lớn và có khả năng cao giá sẽ giảm trong tương lai.
Khi giá chênh lệch so với đường trung bình động xuống, tỷ lệ chênh lệch quá nhỏ và có khả năng cao giá sẽ tăng trong tương lai.
Mặc dù giá trung bình động được tính từ giá, về hình thức bên ngoài, giá chắc chắn sẽ di chuyển gần hơn với giá trung bình động, hoặc giá sẽ luôn dao động xung quanh giá trung bình động. Nếu giá lệch quá xa so với giá trung bình động, bất kể giá trên hay dưới giá trung bình động, cuối cùng nó có thể có xu hướng đến giá trung bình động, và tỷ lệ lệ lệch là giá trị phần trăm mà giá lệch so với giá trung bình động.
Tỷ lệ lệ lệch = [(giá đóng của ngày - giá trung bình ngày N) / giá trung bình ngày N] * 100%
Trong số đó, N là tham số trung bình động, bởi vì giai đoạn của N là khác nhau, kết quả tính toán của tỷ lệ lệ lệch cũng khác nhau. Nói chung, các giá trị của N là: 6, 12, 24, 36, vv. Trong sử dụng thực tế, nó cũng có thể được điều chỉnh năng động theo các giống khác nhau. Tuy nhiên, việc lựa chọn các tham số là rất quan trọng. Nếu tham số quá nhỏ, tỷ lệ lệch sẽ quá nhạy, nếu tham số quá lớn, tỷ lệ lệch sẽ quá chậm. Kết quả tính toán của tỷ lệ lệ lệch là dương và âm. Tỷ lệ lệch dương càng lớn, lợi nhuận của những con bò và xác suất điều chỉnh giá càng lớn. Tỷ lệ lệ lệch ngắn càng lớn, lợi nhuận tiêu cực càng lớn và xác suất phục hồi giá càng lớn.
Vì tỷ lệ lệ lệch là một hình thức khác của trung bình động, thì chúng ta cũng có thể thích nghi một chiến lược tỷ lệ lệ lệch kép dựa trên chiến lược trung bình động đôi. Xét về mối quan hệ vị trí giữa tỷ lệ lệch ngắn hạn và tỷ lệ lệch dài hạn, tình trạng thị trường hiện tại được đánh giá. Nếu tỷ lệ lệch dài hạn lớn hơn tỷ lệ lệch ngắn hạn, nó thực sự đại diện cho trung bình động ngắn hạn vượt qua trung bình động dài hạn, và ngược lại.
Bước 1: Viết khung chiến lược
# Strategy main function
def onTick():
pass
# Program entry
def main():
while True: # Enter infinite loop mode
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
Nền tảng FMZ áp dụng chế độ đào tạo luân phiên.main
chức năng vàonTick
chức năng cần phải được xác định. chức năng chính là chức năng đầu vào của chiến lược, và chương trình sẽ thực hiện các dòng mã bắt đầu từ chức năng chính. Trong chức năng chính, viết mộtwhile
vòng lặp và lặp đi lặp lại thực hiện cáconTick
Tất cả các mã cốt lõi của chiến lược được viết trongonTick
function.
Bước 2: Xác định vị trí ảo
mp = 0
Ưu điểm của các vị trí ảo là nó đơn giản để viết và hoạt động lặp lại nhanh chóng. Nó thường được sử dụng trong môi trường backtest. Người ta giả định rằng mỗi lệnh được hoàn thành hoàn toàn, nhưng vị trí thực tế thường được sử dụng trong giao dịch thực tế. Vì vị trí ảo là để ghi lại trạng thái sau khi mở và đóng, nó cần được định nghĩa là một biến toàn cầu.
Bước 3: Tìm đường K
exchange.SetContractType('rb000') # Subscribe to futures varieties
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <long + 1: # If the number of K lines is too small
return
Sử dụng hàm FMZSetContractType
, bạn có thể đăng ký hợp đồng chỉ số thanh thép bằng cách chuyển vào GetRecords
Vì nó mất một khoảng thời gian nhất định để tính toán tỷ lệ lệ lệch, để tránh lỗi chương trình, nếu không có đủ K đường, sử dụngif
các câu lệnh để lọc.
Bước 4: Tính toán tỷ lệ lệ lệch
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average value of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value
Theo công thức tính toán tỷ lệ lệ lệch, trước tiên chúng ta lấy giá đóng. Trong chiến lược này, chúng ta sử dụng giá đóng K-line trước đó, có nghĩa là tín hiệu K-line hiện tại được thiết lập và K-line tiếp theo là để đặt lệnh. Sau đó sử dụng FMZ tích hợptalib
thư viện để tính toán trung bình động. ví dụ, trung bình động là:TA.MA
Chức năng này nhận được 2 tham số, cụ thể là: K mảng đường và thời gian trung bình động.
Bước 5: Đặt lệnh
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # Closing long positions
mp = 0 # reset virtual holding positions
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding positions
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # open long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position
# Backtest configuration
'''backtest
start: 2018-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''
# External parameters
short = 10
long = 50
# Global variables
mp = 0
# Strategy main function
def onTick():
# retrieve data
exchange.SetContractType('rb000') # Subscribe to futures varieties
bars_arr = exchange.GetRecords() # Get K-line array
if len(bars_arr) <long + 1: # If the number of K lines is too small
return
# Calculate BIAS
close = bars_arr[-2]['Close'] # Get the closing price of the previous K line
ma1 = TA.MA(bars_arr, short)[-2] # Calculate the short-term moving average of the previous K line
bias1 = (close-ma1) / ma1 * 100 # Calculate the short-term deviation rate value
ma2 = TA.MA(bars_arr, long)[-2] # Calculate the long-term average of the previous K line
bias2 = (close-ma2) / ma2 * 100 # Calculate the long-term deviation rate value
# Placing Orders
global mp # global variables
current_price = bars_arr[-1]['Close'] # latest price
if mp> 0: # If you are holding long positions
if bias2 <= bias1: # If the long-term deviation rate is less than or equal to the short-term deviation rate
exchange.SetDirection("closebuy") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # closing long positions
mp = 0 # reset virtual holding position
if mp <0: # If you are holding short positions
if bias2 >= bias1: # If the long-term deviation rate is greater than or equal to the short-term deviation rate
exchange.SetDirection("closesell") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # closing short positions
mp = 0 # reset virtual holding position
if mp == 0: # If there is no holding position
if bias2> bias1: # Long-term deviation rate is greater than short-term deviation rate
exchange.SetDirection("buy") # Set the trading direction and type
exchange.Buy(current_price + 1, 1) # opening long positions
mp = 1 # reset virtual holding position
if bias2 <bias1: # The long-term deviation rate is less than the short-term deviation rate
exchange.SetDirection("sell") # Set the trading direction and type
exchange.Sell(current_price-1, 1) # open short positions
mp = -1 # reset virtual holding position
# Program entry function
def main():
while True: # loop
onTick() # execution strategy main function
Sleep(1000) # sleep for 1 second
Chiến lược hoàn chỉnh đã được công bố trên trang web FMZ:https://www.fmz.com/strategy/215129
Cấu hình backtest
Báo cáo hiệu suất
Đường cong quỹ
Tỷ lệ lệ lệch là một công cụ giao dịch đơn giản và hiệu quả có thể cung cấp một tham chiếu hiệu quả cho các nhà giao dịch.