Hệ thống giao dịch đường cá sấu phiên bản Python

Tác giả:Tốt, Tạo: 2020-05-07 14:33:19, Cập nhật: 2023-11-06 19:40:42

img

Tóm lại

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 là gì

img

Đườ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.

Nguyên tắc đường cá sấu

Đườ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).

Công thức tính toán đường cá sấu

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

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() # 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.

Bước 2: Nhập thư viện Python

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.

Bước 3: Chuyển đổi dữ liệu mảng đường K

# 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.

Bước 4: Nhận dữ liệu vị trí

# 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.

Bước 5: Nhận dữ liệu

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.

Bước 6: Tính toán dữ liệu

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.

Bước 7: Đặt hàng

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.

Chiến lược hoàn chỉnh

'' '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.


Có liên quan

Thêm nữa