Strategi Keseimbangan Platform Tunggal dari Versi Python

Penulis:Lydia, Dibuat: 2022-12-02 21:38:52, Diperbarui: 2023-09-20 11:14:48

img

Versi JavaScript

Alamat strategi:https://www.fmz.com/strategy/345

Dalam artikel ini, mari kita latih porting strategi JavaScript sederhana. Melalui porting strategi, kita dapat menjadi lebih akrab dengan panggilan antarmuka FMZ Quant Trading Platform, dan memahami sedikit perbedaan antara bahasa yang berbeda dalam strategi pengembangan platform.

Deskripsi Strategi

Deskripsi dikutip dari versi JavaScript:

Ini membutuhkan untuk membuka posisi. Misalnya, jika akun memiliki 5000 yuan dan satu mata uang, jika nilai mata uang lebih besar dari saldo akun 5000 yuan dan perbedaan harga melebihi nilai ambang batas, misalnya, jika mata uang sekarang bernilai 6000 yuan, maka jual (6000-5000)/6000/2 mata uang, menunjukkan bahwa mata uang telah meningkat dan kita dapat mengubah uang kembali. Jika mata uang telah mengalami penurunan nilai, misalnya, 4000 yuan, maka kita membeli (5000-4000)/4000/2 mata uang. Jika mata uang menurun, beli beberapa. Jika naik lagi, jual lagi, Seperti saldo, kedua belah pihak memiliki lindung nilai yang berbeda, jadi saya menyebutnya strategi keseimbangan

Prinsip strategi sangat sederhana. Kode versi JavaScript tidak panjang, hanya lebih dari 70 baris. Strategi bahasa Python dengan tata bahasa yang lebih ringkas ditransplantasikan, dan kode jauh lebih pendek, yang sangat cocok untuk pemula untuk dipelajari. Ada banyak kode yang dibagikan oleh pengembang di FMZ Quant Trading Platform, dan bahasa ini mendukungJavaScript/C++/PythonOleh karena itu, menguasai lebih banyak bahasa pengembangan tidak hanya bermanfaat untuk strategi pembelajaran, penelitian, dan pengembangan, tetapi juga akrab dengan berbagai antarmuka API platform.

Kode Strategi

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

Kode dimulai dengan

'''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}]
'''

Ini mengacu pada konfigurasi backtesting, yang berarti bahwa konfigurasi backtesting (pengaturan) disimpan dalam bentuk kode dan dikonfigurasi secara otomatis sesuai dengan pengaturan selama backtesting. Bagian ini dapat dihapus. Jika dihapus, kita perlu mengatur informasi konfigurasi backtesting di halaman backtesting secara manual. Referensi:https://www.fmz.com/bbs-topic/859

Parameter strategi ini sepenuhnya konsisten dengan versi JavaScript. Kode strategi juga ditransplantasikan kalimat demi kalimat. Struktur program tidak berubah. Anda dapat membandingkan strategi yang ditulis dalam bahasa yang berbeda kalimat demi kalimat.

Pengujian balik

Konfigurasi parameter

img

Statistik

img img

Alamat strategi:https://www.fmz.com/strategy/183374

Strategi ini hanya untuk referensi, pembelajaran dan back testing saja.


Berkaitan

Lebih banyak