Những người đã làm giao dịch tài chính có lẽ sẽ có kinh nghiệm. Đôi khi sự biến động giá là thường xuyên, nhưng thường xuyên hơn nó cho thấy một trạng thái không ổn định của đi bộ ngẫu nhiên. Đó là sự bất ổn này là nơi rủi ro và cơ hội của thị trường nằm. Sự bất ổn cũng có nghĩa là không thể đoán trước được, vì vậy làm thế nào để làm cho lợi nhuận ổn định hơn trong một môi trường thị trường không thể đoán trước cũng là một vấn đề cho mọi nhà giao dịch. Bài viết này sẽ giới thiệu chiến lược quy tắc giao dịch cá sấu, hy vọng truyền cảm hứng cho tất cả mọi người.
Đường cá sấu thực sự là ba đường trung bình động đặc biệt, tương ứng với cằm của đường xanh, răng của đường đỏ và môi trên của đường xanh.
Đường cá sấu là một tập hợp các phương pháp phân tích kỹ thuật được tóm tắt dựa trên hình học và động lực phi tuyến tính. Khi cằm, răng và môi trên của cá sấu bị đóng hoặc rối, điều đó có nghĩa là cá sấu đang ngủ. Vào thời điểm này, chúng ta thường ở bên ngoài thị trường cho đến khi mảnh xuất hiện, và chỉ tham gia vào thị trường xu hướng rõ ràng.
Con cá sấu ngủ lâu hơn, nó sẽ đói hơn khi thức dậy, vì vậy một khi thức dậy, nó sẽ mở rộng miệng. Nếu môi trên nằm trên răng và răng nằm trên cằm, điều đó cho thấy thị trường đã bước vào thị trường bò và cá sấu sẽ ăn thịt bò. Nếu môi trên nằm dưới răng và răng nằm dưới cằm, điều đó cho thấy thị trường đã bước vào thị trường gấu và cá sấu sẽ ăn thịt gấu. Cho đến khi nó đầy, nó sẽ đóng miệng lại (giữ và kiếm lợi nhuận).
Lưỡi trên = REF ((SMA ((VAR1,5,1),3) Răng = REF ((SMA ((VAR1,8,1),5) Chin = REF(SMA(VAR1,13,1)
Thành phần chiến lược cá sấu
# Strategy main function
def onTick():
pass
# Program entry
def main ():
while True: # Enter infinite loop mode
onTick() # execute strategy main function
Sleep(1000) # sleep for 1 second
FMZ sử dụng chế độ thăm dò, một là hàm onTick, và một là hàm chính, trong đó hàm onTick được thực hiện trong một vòng lặp vô hạn trong hàm chính.
import talib
import numpy as np
Chức năng SMA được sử dụng trong chiến lược của chúng tôi. SMA là trung bình số học. Đã có các hàm SMA sẵn sàng trong thư viện talib, vì vậy hãy trực tiếp nhập thư viện talib Python và sau đó gọi trực tiếp. Bởi vì khi gọi hàm này, bạn cần phải truyền vào các tham số định dạng numpy, vì vậy chúng tôi cần sử dụng nhập để nhập hai thư viện Python này ở đầu chiến lược.
# Convert the K-line array into an array of highest price, lowest price, and closing price, for conversion to numpy.array
def get_data(bars):
arr = []
for i in bars:
arr.append(i['Close'])
return arr
Ở đây chúng tôi đã tạo ra một hàm get_data, mục đích của hàm này là xử lý mảng K-line thông thường thành dữ liệu định dạng numpy.
# Get the number of positions
def get_position ():
# Get position
position = 0 # The number of assigned positions is 0
position_arr = _C (exchange.GetPosition) # Get array of positions
if len (position_arr)> 0: # If the position array length is greater than 0
for i in position_arr:
if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
if i ['Type']% 2 == 0: # If it is long position
position = i ['Amount'] # Assigning a positive number of positions
else:
position = -i ['Amount'] # Assigning a negative number of positions
return position
Tình trạng vị trí liên quan đến logic chiến lược. Mười bài học đầu tiên của chúng tôi luôn sử dụng các vị trí ảo, nhưng trong môi trường giao dịch thực sự tốt nhất là sử dụng hàm GetPosition để có được thông tin vị trí thực, bao gồm: hướng vị trí, lợi nhuận và lỗ vị trí, số lượng vị trí, v.v.
exchange.SetContractType('rb000') # Subscribe the futures varieties
bars_arr = exchange.GetRecords() # Get K line array
if len(bars_arr) < 22: # If the number of K lines is less than 22
return
Trước khi mua dữ liệu, trước tiên bạn phải sử dụng hàm SetContractType để đăng ký các loại tương lai có liên quan. FMZ hỗ trợ tất cả các loại tương lai hàng hóa Trung Quốc. Sau khi đăng ký biểu tượng tương lai, bạn có thể sử dụng hàm GetRecords để lấy dữ liệu đường K, trả về một mảng.
np_arr = np.array (get_data (bars_arr)) # Convert closing price array
sma13 = talib.SMA (np_arr, 130) [-9] # chin
sma8 = talib.SMA (np_arr, 80) [-6] # teeth
sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
current_price = bars_arr [-1] ['Close'] # latest price
Trước khi tính toán SMA bằng thư viện talib, bạn cần sử dụng thư viện numpy để xử lý mảng K-line thông thường thành dữ liệu numpy. Sau đó lấy cằm, răng và môi trên của đường cá sấu riêng biệt. Ngoài ra, tham số giá cần được truyền vào khi đặt lệnh, vì vậy chúng ta có thể sử dụng giá đóng trong mảng K-line.
position = get_position ()
if position == 0: # If there is no position
if current_price> sma5: # If the current price is greater than the upper lip
exchange.SetDirection ("buy") # Set the trading direction and type
exchange.Buy (current_price + 1, 1) # open long position order
if current_price <sma13: # If the current price is less than the chin
exchange.SetDirection ("sell") # Set the trading direction and type
exchange.Sell (current_price-1, 1) # open short position order
if position> 0: # If you have long positions
if current_price <sma8: # If the current price is less than teeth
exchange.SetDirection ("closebuy") # Set the trading direction and type
exchange.Sell (current_price-1, 1) # close long position
if position <0: # If you have short position
if current_price> sma8: # If the current price is greater than the tooth
exchange.SetDirection ("closesell") # Set the trading direction and type
exchange.Buy (current_price + 1, 1) # close short position
Trước khi đặt lệnh, bạn cần phải có được vị trí thực tế. Chức năng get_position chúng tôi đã xác định trước đây sẽ trả về số lượng vị trí thực tế. Nếu vị trí hiện tại dài, nó sẽ trả về một số tích cực. Nếu vị trí hiện tại ngắn, nó sẽ trả về một số âm. Nếu không có vị trí, trả về 0. Cuối cùng, các chức năng mua và bán được sử dụng để đặt lệnh theo logic giao dịch ở trên, nhưng trước đó, hướng giao dịch và loại cũng cần phải được đặt.
'' 'backtest
start: 2019-01-01 00:00:00
end: 2020-01-01 00:00:00
period: 1h
exchanges: [{"eid": "Futures_CTP", "currency": "FUTURES"}]
'' '
import talib
import numpy as np
# Convert the K-line array into an array of highest price, lowest price, and closing price, used to convert to numpy.array type data
def get_data (bars):
arr = []
for i in bars:
arr.append (i ['Close'])
return arr
# Get the number of positions
def get_position ():
# Get position
position = 0 # The number of assigned positions is 0
position_arr = _C (exchange.GetPosition) # Get array of positions
if len (position_arr)> 0: # If the position array length is greater than 0
for i in position_arr:
if i ['ContractType'] == 'rb000': # If the position symbol is equal to the subscription symbol
if i ['Type']% 2 == 0: # If it is long
position = i ['Amount'] # Assign a positive number of positions
else:
position = -i ['Amount'] # Assign a negative number of positions
return position
# 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) <22: # If the number of K lines is less than 22
return
# Calculation
np_arr = np.array (get_data (bars_arr)) # Convert closing price array
sma13 = talib.SMA (np_arr, 130) [-9] # chin
sma8 = talib.SMA (np_arr, 80) [-6] # teeth
sma5 = talib.SMA (np_arr, 50) [-4] # upper lip
current_price = bars_arr [-1] ['Close'] # latest price
position = get_position ()
if position == 0: # If there is no position
if current_price> sma5: # If the current price is greater than the upper lip
exchange.SetDirection ("buy") # Set the trading direction and type
exchange.Buy (current_price + 1, 1) # open long position order
if current_price <sma13: # If the current price is less than the chin
exchange.SetDirection ("sell") # Set the trading direction and type
exchange.Sell (current_price-1, 1) # open short position order
if position> 0: # If you have long positions
if current_price <sma8: # If the current price is less than teeth
exchange.SetDirection ("closebuy") # Set the trading direction and type
exchange.Sell (current_price-1, 1) # close long position
if position <0: # If you have short positions
if current_price> sma8: # If the current price is greater than the tooth
exchange.SetDirection ("closesell") # Set the trading direction and type
exchange.Buy (current_price + 1, 1) # close short position
# Program main function
def main ():
while True: # loop
onTick () # execution strategy main function
Sleep (1000) # sleep for 1 second
Đơn giản chỉ cần nhấp vào liên kết bên dưới để sao chép toàn bộ chiến lược mà không cần cấu hình:https://www.fmz.com/strategy/199025
Kết thúc
Vai trò lớn nhất của quy tắc giao dịch cá sấu là giúp chúng ta duy trì cùng một hướng như thị trường khi giao dịch, bất kể giá thị trường hiện tại thay đổi như thế nào, và tiếp tục kiếm lợi nhuận cho đến khi thị trường hợp nhất xuất hiện.