avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada Pesan pribadi
4
fokus pada
1271
Pengikut

Versi Python dari strategi keseimbangan platform tunggal

Dibuat di: 2020-02-05 10:02:03, diperbarui pada: 2023-10-12 21:20:47
comments   1
hits   2701

Versi Python dari strategi keseimbangan platform tunggal

Versi Python dari strategi keseimbangan platform tunggal

Versi JavaScript

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

Dalam artikel ini, mari kita berlatih porting strategi JavaScript sederhana. Dengan mencangkok strategi, Anda akan menjadi lebih akrab dengan panggilan antarmuka Platform Perdagangan Kuantitatif Inventor dan memahami sedikit perbedaan antara berbagai bahasa saat mengembangkan strategi di platform. Faktanya, perbedaan antara strategi versi JavaScript dan versi Python strateginya sangat kecil karena panggilan antarmuka pada dasarnya sama.

Deskripsi Strategi

Mengutip dari versi JavaScript dari instruksi:

Ini memerlukan pembukaan posisi. Misalnya, jika akun memiliki 5.000 yuan dan 1 koin, jika nilai koin lebih besar dari saldo akun 5.000 dan perbedaan harga melebihi ambang batas, misalnya, koin sekarang bernilai 6.000 yuan, kemudian jual (6.000-5.000)/6.000. /2 koin, itu berarti koin telah dihargai, tukarkan uangnya kembali, jika koin terdepresiasi, misalnya, menjadi 4000 yuan, beli (5000-4000)/4000/2 koin, beli kembali sebagian saat koin jatuh, jika naik lagi, saya akan menjualnya lagi, seperti keseimbangan, dengan lindung nilai yang berbeda di kedua sisi, jadi saya menyebutnya strategi seimbang.

Prinsip strateginya sangat sederhana, dan versi kode JavaScript-nya tidak panjang, hanya lebih dari 70 baris. Ditransplantasikan ke strategi bahasa Python dengan sintaksis yang lebih ringkas, kodenya lebih pendek dan sangat cocok untuk dipelajari oleh pemula. Ada banyak kode yang dibagikan oleh pengembang di Inventor Quantitative Trading Platform, dan bahasanya mendukungJavaScript/C++/PythonDll., jadi menguasai satu bahasa pengembangan lagi tidak hanya membantu strategi pembelajaran, penelitian, dan pengembangan, tetapi juga memungkinkan Anda menjadi lebih akrab dengan berbagai antarmuka API pada platform tersebut.

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 adalah konfigurasi backtest, artinya konfigurasi backtest (pengaturan) disimpan dalam bentuk kode, dan backtest secara otomatis dikonfigurasikan sesuai dengan pengaturan ini. Bagian ini dapat dihapus. Jika dihapus, Anda perlu mengatur informasi konfigurasi backtest secara manual pada halaman backtest selama backtesting. Referensi: https://www.fmz.com/bbs-topic/859

Parameter strategi ini sama persis dengan versi JavaScript. Kode strategi juga ditransplantasikan kalimat demi kalimat, dan struktur programnya tidak berubah. Anda dapat membandingkannya kalimat demi kalimat untuk melihat perbedaan antara strategi yang ditulis dalam bahasa yang berbeda. bahasa.

Pengujian ulang

Konfigurasi parameter Versi Python dari strategi keseimbangan platform tunggal

Statistik Versi Python dari strategi keseimbangan platform tunggal

Versi Python dari strategi keseimbangan platform tunggal

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

Strategi ini hanya untuk referensi, pengujian ulang dan pengujian. Jika Anda tertarik, Anda dapat mengoptimalkan dan meningkatkannya.