avatar of 发明者量化-小小梦 发明者量化-小小梦
tập trung vào tin nhắn riêng tư
4
tập trung vào
1271
Người theo dõi

Phiên bản Python của chiến lược cân bằng nền tảng đơn

Được tạo ra trong: 2020-02-05 10:02:03, cập nhật trên: 2023-10-12 21:20:47
comments   1
hits   2701

Phiên bản Python của chiến lược cân bằng nền tảng đơn

Phiên bản Python của chiến lược cân bằng nền tảng đơn

Phiên bản JavaScript

Địa chỉ chiến lược: https://www.fmz.com/strategy/345

Trong bài viết này, chúng ta hãy thực hành chuyển một chiến lược JavaScript đơn giản. Bằng cách cấy ghép các chiến lược, bạn sẽ trở nên quen thuộc hơn với các cuộc gọi của giao diện Inventor Quantitative Trading Platform và hiểu được những khác biệt nhỏ giữa các ngôn ngữ khác nhau khi phát triển các chiến lược trên nền tảng. Trên thực tế, sự khác biệt giữa chiến lược phiên bản JavaScript và phiên bản Python chiến lược rất nhỏ vì các lệnh gọi giao diện về cơ bản là giống nhau.

Mô tả chiến lược

Trích dẫn từ phiên bản JavaScript của hướng dẫn:

Điều này đòi hỏi phải mở một vị thế. Ví dụ, nếu tài khoản có 5.000 nhân dân tệ và 1 đồng xu, nếu giá trị của đồng xu lớn hơn số dư tài khoản là 5.000 và chênh lệch giá vượt quá ngưỡng, ví dụ, đồng xu hiện có giá trị là 6.000 nhân dân tệ, sau đó bán (6.000-5.000)/6.000. /2 đồng, nghĩa là đồng tiền đã tăng giá, đổi tiền lại, nếu đồng tiền mất giá, ví dụ, xuống còn 4.000 nhân dân tệ, hãy mua (5.000-4.000)/4.000/2 tiền xu, mua lại một số khi đồng xu giảm, nếu nó tăng trở lại, tôi sẽ bán nó một lần nữa, giống như một sự cân bằng, với các biện pháp phòng ngừa khác nhau ở cả hai bên, vì vậy tôi gọi nó là chiến lược cân bằng.

Nguyên lý chiến lược rất đơn giản và phiên bản mã JavaScript không dài, chỉ hơn 70 dòng. Được chuyển sang chiến lược ngôn ngữ Python với cú pháp ngắn gọn hơn, mã ngắn hơn và rất phù hợp với người mới bắt đầu học. Có rất nhiều mã được các nhà phát triển chia sẻ trên Nền tảng giao dịch định lượng Inventor và ngôn ngữ hỗ trợJavaScript/C++/PythonV.v., việc thành thạo thêm một ngôn ngữ phát triển không chỉ hữu ích cho việc học tập, nghiên cứu và các chiến lược phát triển mà còn cho phép bạn trở nên quen thuộc hơn với nhiều giao diện API khác nhau của nền tảng.

Mã chiến lược

'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''

InitAccount = None

def CancelPendingOrders():
    ret = False
    while True:
        orders = _C(exchange.GetOrders)
        if len(orders) == 0 :
            return ret

        for j in range(len(orders)):
            exchange.CancelOrder(orders[j].Id)
            ret = True
            if j < len(orders) - 1:
                Sleep(Interval)
    return ret 

def onTick():
    acc = _C(exchange.GetAccount)
    ticker = _C(exchange.GetTicker)
    spread = ticker.Sell - ticker.Buy
    diffAsset = (acc.Balance - (acc.Stocks * ticker.Sell)) / 2
    ratio = diffAsset / acc.Balance
    LogStatus("ratio:", ratio, _D())
    if abs(ratio) < threshold:
        return False
    if ratio > 0 :
        buyPrice = _N(ticker.Sell + spread, ZPrecision)
        buyAmount = _N(diffAsset / buyPrice, XPrecision)
        if buyAmount < MinStock:
            return False
        exchange.Buy(buyPrice, buyAmount, diffAsset, ratio)
    else :
        sellPrice = _N(ticker.Buy - spread, ZPrecision)
        sellAmount = _N(-diffAsset / sellPrice, XPrecision)
        if sellAmount < MinStock:
            return False 
        exchange.Sell(sellPrice, sellAmount, diffAsset, ratio)
    return True

def main():
    global InitAccount, LoopInterval
    InitAccount = _C(exchange.GetAccount)
    LoopInterval = max(LoopInterval, 1)
    while True:
        if onTick():
            Sleep(1000)
            CancelPendingOrders()
            Log(_C(exchange.GetAccount))
        Sleep(LoopInterval * 1000)

Mã bắt đầu bằng

'''backtest
start: 2019-12-01 00:00:00
end: 2020-02-01 11:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT","stocks":1}]
'''

Đây là cấu hình kiểm thử ngược, nghĩa là cấu hình kiểm thử ngược (cài đặt) được lưu dưới dạng mã và kiểm thử ngược được tự động cấu hình theo cài đặt này. Phần này có thể bị xóa. Nếu bị xóa, bạn sẽ cần phải thiết lập thủ công thông tin cấu hình backtest trên trang backtest trong quá trình backtest. Tham khảo: https://www.fmz.com/bbs-topic/859

Các tham số của chiến lược này hoàn toàn giống với các tham số của phiên bản JavaScript. Mã chiến lược cũng được ghép từng câu một và cấu trúc chương trình không thay đổi. Bạn có thể so sánh chúng từng câu một để thấy sự khác biệt giữa các chiến lược được viết bằng các ngôn ngữ khác nhau ngôn ngữ.

Kiểm tra ngược

Cấu hình tham số Phiên bản Python của chiến lược cân bằng nền tảng đơn

Thống kê Phiên bản Python của chiến lược cân bằng nền tảng đơn

Phiên bản Python của chiến lược cân bằng nền tảng đơn

Địa chỉ chiến lược: https://www.fmz.com/strategy/183374

Chiến lược này chỉ mang tính tham khảo, kiểm tra ngược và thử nghiệm. Nếu bạn quan tâm, bạn có thể tối ưu hóa và nâng cấp.