Strategi Keseimbangan Platform Tunggal Versi Python

Penulis:Lydia, Dicipta: 2022-12-02 21:38:52, Dikemas kini: 2023-09-20 11:14:48

img

Versi JavaScript

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

Dalam artikel ini, mari kita berlatih memindahkan strategi JavaScript yang mudah. Melalui pemindahan strategi, kita boleh menjadi lebih biasa dengan panggilan antara muka Platform Dagangan Kuantum FMZ, dan memahami sedikit perbezaan antara bahasa yang berbeza dalam strategi pembangunan platform. Sebenarnya, perbezaan antara versi JavaScript dan versi Python sangat sedikit, kerana panggilan antara muka pada dasarnya sama.

Penerangan Strategi

Penerangan dipetik dari versi JavaScript:

Ini memerlukan untuk membuka kedudukan. Sebagai contoh, jika akaun mempunyai 5000 yuan dan satu mata wang, jika nilai mata wang lebih besar daripada baki akaun 5000 yuan dan perbezaan harga melebihi nilai ambang, sebagai contoh, jika mata wang kini bernilai 6000 yuan, maka jual (6000-5000) / 6000/2 mata wang, menunjukkan bahawa mata wang telah menghargai dan kita boleh menukar wang kembali. Jika mata wang telah merosot, sebagai contoh, 4000 yuan, maka kita membeli (5000-4000) / 4000/2 mata wang. Jika mata wang menurun, beli beberapa. Jika ia naik lagi, jual lagi, Seperti baki, kedua-dua belah pihak mempunyai lindung nilai yang berbeza, jadi saya memanggilnya strategi keseimbangan

Prinsip strategi ini sangat mudah. Kod versi JavaScript tidak panjang, hanya lebih daripada 70 baris. Strategi bahasa Python dengan tatabahasa yang lebih ringkas ditransplantasikan, dan kodnya lebih pendek, yang sangat sesuai untuk pemula belajar. Terdapat banyak kod yang dikongsi oleh pemaju di Platform Dagangan Kuantum FMZ, dan bahasa ini menyokongJavaScript/C++/PythonOleh itu, menguasai lebih banyak bahasa pembangunan bukan sahaja berguna untuk strategi pembelajaran, penyelidikan, dan pembangunan, tetapi juga biasa dengan pelbagai antara muka API platform.

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

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

Ia merujuk kepada konfigurasi backtesting, yang bermaksud bahawa konfigurasi backtesting (tetapan) disimpan dalam bentuk kod dan dikonfigurasikan secara automatik mengikut tetapan semasa backtesting. Bahagian ini boleh dipadam. Jika dipadam, kita perlu menetapkan maklumat konfigurasi backtesting pada halaman backtesting secara manual. Rujukan:https://www.fmz.com/bbs-topic/859

Parameter strategi ini sepenuhnya konsisten dengan versi JavaScript. Kod strategi juga dipindahkan ayat demi ayat. Struktur program tidak berubah. Anda boleh membandingkan strategi yang ditulis dalam bahasa yang berbeza ayat demi ayat.

Ujian semula

Konfigurasi Parameter

img

Statistik

img img

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

Strategi ini adalah untuk rujukan, pembelajaran dan ujian belakang sahaja.


Berkaitan

Lebih lanjut