Chiến lược cân bằng nền tảng duy nhất của Python

Tác giả:Lydia., Tạo: 2022-12-02 21:38:52, Cập nhật: 2023-09-20 11:14:48

img

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 đổi một chiến lược JavaScript đơn giản. Thông qua chuyển đổi chiến lược, chúng ta có thể trở nên quen thuộc hơn với cuộc gọi của giao diện nền tảng FMZ Quant Trading Platform, và hiểu sự khác biệt nhỏ giữa các ngôn ngữ khác nhau trong chiến lược phát triển nền tảng. Trên thực tế, sự khác biệt giữa phiên bản JavaScript và phiên bản Python rất nhỏ, bởi vì các cuộc gọi giao diện về cơ bản giống nhau.

Mô tả chiến lược

Mô tả trích từ phiên bản JavaScript:

Điều này đòi hỏi phải mở một vị trí. Ví dụ, nếu tài khoản có 5000 nhân dân tệ và một loại tiền tệ, nếu giá trị của đồng tiền lớn hơn số dư tài khoản 5000 nhân dân tệ và sự khác biệt giá vượt quá giá ngưỡng, ví dụ, nếu đồng tiền hiện có giá trị 6000 nhân dân tệ, sau đó bán (6000-5000)/6000/2 tiền tệ, cho thấy rằng đồng tiền đã tăng giá và chúng tôi có thể chuyển đổi tiền trở lại. Nếu đồng tiền đã mất giá, ví dụ, 4000 nhân dân tệ, sau đó chúng tôi mua (5000-4000)/4000/2 tiền tệ. Nếu đồng tiền giảm, mua một số. Nếu nó tăng trở lại, bán lại, giống như số dư, hai bên có các phòng hộ khác nhau, vì vậy tôi gọi nó là chiến lược cân bằng.

Nguyên tắc của chiến lược rất đơn giản. Mã của phiên bản JavaScript không dài, chỉ hơn 70 dòng. Chiến lược ngôn ngữ Python với ngữ pháp ngắn gọn hơn được cấy ghép, và mã ngắn hơn nhiều, rất phù hợp cho người mới bắt đầu học. Có rất nhiều mã được chia sẻ bởi các nhà phát triển trên nền tảng giao dịch FMZ Quant, và ngôn ngữ hỗ trợJavaScript/C++/PythonDo đó, làm chủ nhiều ngôn ngữ phát triển hơn không chỉ hữu ích cho các chiến lược học tập, nghiên cứu và phát triển, mà còn quen thuộc với các 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}]
'''

Nó đề cập đến cấu hình backtesting, có nghĩa là cấu hình backtesting (cài đặt) được lưu dưới dạng mã và được cấu hình tự động theo cài đặt trong quá trình backtesting. Ghi chú:https://www.fmz.com/bbs-topic/859

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

Kiểm tra ngược

Cấu hình tham số

img

Số liệu thống kê

img img

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

Chiến lược chỉ dành cho tham khảo, học tập và kiểm tra lại. Nếu bạn quan tâm, bạn có thể tối ưu hóa và nâng cấp nó.


Có liên quan

Thêm nữa