Tangan-tangan mengajarkan Anda untuk mengubah kebijakan tunggal varietas Python menjadi kebijakan multi-varietas.

Penulis:Mimpi kecil, Dibuat: 2020-01-20 17:33:36, Diperbarui: 2023-10-17 21:18:46

img

Pertama, tangan-tangan mengajarkan Anda untuk mengubah kebijakan tunggal Python menjadi kebijakan multi-varietas.

Pada artikel sebelumnya, saya menggunakan strategi Python yang sangat sederhana:"Strategi Perburuan dan Kecelakaan Python"Strategi ini dapat mengoperasikan satu akun untuk melakukan perdagangan terprogram pada pasangan perdagangan tertentu, prinsipnya sangat sederhana, yaitu mengejar tumbang. Kadang-kadang kita ingin menggunakan logika perdagangan yang sama untuk mengoperasikan pasangan perdagangan yang berbeda.

Adapun sumber kode yang diubah adalah:

'''backtest
start: 2019-02-20 00:00:00
end: 2020-01-10 00:00:00
period: 1m
exchanges: [{"eid":"OKEX","currency":"BTC_USDT"},{"eid":"OKEX","currency":"ETH_USDT","stocks":30},{"eid":"OKEX","currency":"LTC_USDT","stocks":100}]
'''

import time
import json

params = {
    "arrBasePrice": [-1, -1, -1],     # -1
    "arrRatio": [0.05, 0.05, 0.05],         # 0.05
    "arrAcc": [],           # _C(exchange.GetAccount)
    "arrLastCancelAll": [0, 0, 0], # 0
    "arrMinStocks": [0.01, 0.01, 0.01],     # 0.01
    "arrPricePrecision": [2, 2, 2], # 2
    "arrAmountPrecision": [3, 2, 2], # 2
    "arrTick":[]
}

def CancelAll(e):
    while True : 
        orders = _C(e.GetOrders)
        for i in range(len(orders)) :
            e.CancelOrder(orders[i]["Id"], orders[i])
        if len(orders) == 0 :
            break
        Sleep(1000)

def process(e, index):
    global params
    ticker = _C(e.GetTicker)
    params["arrTick"][index] = ticker
    if params["arrBasePrice"][index] == -1 :
        params["arrBasePrice"][index] = ticker.Last
    if ticker.Last - params["arrBasePrice"][index] > 0 and (ticker.Last - params["arrBasePrice"][index]) / params["arrBasePrice"][index] > params["arrRatio"][index]:
        params["arrAcc"][index] = _C(e.GetAccount)
        if params["arrAcc"][index].Balance * params["arrRatio"][index] / ticker.Last > params["arrMinStocks"][index]:
            e.Buy(ticker.Last, params["arrAcc"][index].Balance * params["arrRatio"][index] / ticker.Last)
            params["arrBasePrice"][index] = ticker.Last
    if ticker.Last - params["arrBasePrice"][index] < 0 and (params["arrBasePrice"][index] - ticker.Last) / params["arrBasePrice"][index] > params["arrRatio"][index]: 
        params["arrAcc"][index] = _C(e.GetAccount)
        if params["arrAcc"][index].Stocks * params["arrRatio"][index] > params["arrMinStocks"][index]:
            e.Sell(ticker.Last, params["arrAcc"][index].Stocks * params["arrRatio"][index])
            params["arrBasePrice"][index] = ticker.Last
    ts = time.time()
    if ts - params["arrLastCancelAll"][index] > 60 * 5 :
        CancelAll(e)
        params["arrLastCancelAll"][index] = ts 

def main():
    global params
    
    for i in range(len(exchanges)) :    
        params["arrAcc"].append(_C(exchanges[i].GetAccount))
        params["arrTick"].append(_C(exchanges[i].GetTicker))
        exchanges[i].SetPrecision(params["arrPricePrecision"][i], params["arrAmountPrecision"][i])

    for key in params :
        if len(params[key]) < len(exchanges):
            raise "params error!"

    while True:
        tblAcc = {
            "type" : "table",
            "title": "account",
            "cols": ["账户信息"], 
            "rows": []
        }        

        tblTick = {
            "type" : "table",
            "title": "ticker",
            "cols": ["行情信息"], 
            "rows": []
        }
        for i in range(len(exchanges)): 
            process(exchanges[i], i)

        for i in range(len(exchanges)):
            tblAcc["rows"].append([json.dumps(params["arrAcc"][i])])
            tblTick["rows"].append([json.dumps(params["arrTick"][i])])

        LogStatus(_D(), "\n`" + json.dumps([tblAcc, tblTick]) + "`")
        Sleep(500)

Kedua, temukan perbedaan.

Jika kita melihat kode yang berbeda, apakah kita menemukan perbedaan yang signifikan dari kode yang ada di artikel sebelumnya? Pada kenyataannya logika transaksi adalah sama persis, tidak ada perubahan, hanya saja kita mengubah strategi menjadi berbagai, maka tidak bisa menggunakan variabel tunggal yang sebelumnya tidak dapat digunakan sebagai bentuk dari parameter strategi, solusi yang lebih masuk akal adalah, membuat parameter menjadi array, indeks dari setiap posisi array sesuai dengan transaksi yang ditambahkan.

img

Kemudian kita bungkus bagian dari kode logika transaksi ini menjadi fungsi.processDalam strategi utama loop, fungsi ini dipanggil berdasarkan transaksi yang ditambahkan pada pasangan iterasi, sehingga setiap pasangan transaksi menjalankan satu kode logis transaksi.

  • "Saya tidak tahu apa yang akan terjadi", katanya.

    for i in range(len(exchanges)): 
        process(exchanges[i], i)
    
  • Parameter kebijakan:

    params = {
        "arrBasePrice": [-1, -1, -1],           # -1
        "arrRatio": [0.05, 0.05, 0.05],         # 0.05
        "arrAcc": [],                           # _C(exchange.GetAccount)
        "arrLastCancelAll": [0, 0, 0],          # 0
        "arrMinStocks": [0.01, 0.01, 0.01],     # 0.01
        "arrPricePrecision": [2, 2, 2],         # 2
        "arrAmountPrecision": [3, 2, 2],        # 2
        "arrTick":[]
    }
    

    Dengan cara ini, setiap pasangan perdagangan dapat memiliki parameternya sendiri, karena setiap transaksi memiliki perbedaan harga yang mungkin sangat besar, dan parameternya juga mungkin berbeda, yang kadang-kadang membutuhkan pengaturan diferensiasi.

  • Fungsi CancelAll

    Perbandingan adalah perubahan fungsi ini. Fungsi ini hanya mengubah kode sedikit demi sedikit, dan kemudian berpikir, maksud dari perubahan tersebut.

  • Data grafik status bar

    Ditambah grafik yang menampilkan data pasar dan data aset akun di kolom status, yang dapat menampilkan aset dan pasar yang sesuai dengan setiap objek bursa secara real-time.

Jika Anda memiliki ide-ide desain di atas, tidakkah mudah untuk mengubah strategi Python menjadi strategi multi-varietas?

3. Uji ulang.

img

img

img

Strategi ini hanya untuk referensi belajar, uji ulang, dan minat untuk mengoptimalkan upgrade.Alamat strategis


Berkaitan

Lebih banyak

bbbwwed2009Meng, kenapa kamu tidak bisa mengatur arah exchange.SetDirection (untuk "buy") dan e. bukan exchange.

Kuda Hitam BesarBerapa modal minimum untuk strategi ini?

Kuda Hitam Besar"Saya tidak mau melakukan transaksi, dan tidak ada tanggapan selama setengah hari.

Kuda Hitam BesarBaiklah, baiklah, sudah selesai, saya telah mengubahnya menjadi koin asli, tidak heran.

Kuda Hitam Besar/upload/asset/164f3fe6e84331d800583.png sekarang baik-baik saja, tapi saya memiliki banyak uang di akun saya, berapa minimal modal yang harus Anda investasikan dalam strategi ini, apakah saya tidak memiliki cukup uang di akun saya?

Kuda Hitam Besar/upload/asset/16495fcb1185338f8af27.png adalah IP administrator yang ditambahkan

Kuda Hitam BesarGetAccount: 400: {"error_message":"Invalid IP","code":30011,"error_code":"30011","message":"Invalid IP"} IP. Saya menambahkannya ke dalam API.

Kuda Hitam Besar/upload/asset/164330beccf32fc55e7b6.png Bagaimana caranya?

Kuda Hitam BesarBerapa banyak siklus K-line yang disetel robot

Mimpi kecilTidak ada piringan, strategi ini adalah strategi pengajaran, belajar, dan dapat dimodifikasi, diperluas, dan dioptimalkan sendiri.

Mimpi kecilAnda dapat melihat secara spesifik kode sumber strategi ini, strategi ini terbuka, logika strategisnya sangat sederhana adalah mengejar dan menjatuhkan. Perhatikan, ini adalah strategi mata uang digital langsung, tidak dapat menjalankan futures, Anda dapat mengubahnya menjadi futures sendiri.

Mimpi kecilSaat Anda meminta API KEY, alamat IP yang Anda atur adalah alamat daftar putih yang diizinkan untuk diakses. Setelah Anda atur, hanya alamat IP ini yang dapat digunakan untuk mengakses API KEY Anda. Apakah Anda mengatur alamat IP host Anda?

Mimpi kecilPada saat itu, Anda harus menginstal Python pada server yang di-host.

Mimpi kecilKebijakan ini tidak melihat garis K, pengaturan yang tidak disengaja, kata ulangan karena mempengaruhi titik partikel, diatur untuk 1 menit.