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

Gunakan Python untuk mengimplementasikan robot perdagangan kuantitatif untuk memulai atau menghentikan gadget

Dibuat di: 2020-02-14 21:56:58, diperbarui pada: 2023-10-10 21:13:38
comments   4
hits   3047

Gunakan Python untuk mengimplementasikan robot perdagangan kuantitatif untuk memulai atau menghentikan gadget

Gunakan Python untuk mengimplementasikan robot perdagangan kuantitatif untuk memulai atau menghentikan gadget

Sebagai platform perdagangan kuantitatif yang kuat, fleksibel, dan mudah digunakan di seluruh jaringan, Platform Perdagangan Kuantitatif Inventor memiliki ambang batas penggunaan yang sangat rendah dan program robot hanya membutuhkan sedikit sumber daya. Tetapi kami tetap berharap robot itu dapat dinyalakan ketika perlu dijalankan, dan dihentikan ketika tidak perlu dijalankan. Misalnya, saat melakukan perdagangan berjangka komoditi terprogram dan kuantitatif, waktu non-pembukaan pasar mencakup sebagian besar hari. Dengan cara ini, kami sangat berharap agar robot tersebut dapat beroperasi hanya selama jam buka pasar. Sungguh menarik untuk membayangkan berapa banyak biaya yang dapat dihemat dengan mengoperasikannya hanya selama jam buka pasar setiap hari. Untuk memenuhi persyaratan ini, kita dapat menggunakan Python untuk menulis robot strategi yang berjalan pada platform perdagangan kuantitatif FMZ. Antarmuka API yang diperluas dari platform perdagangan kuantitatif penemu mengendalikan awal dan akhir robot pada waktu yang ditentukan.

Jika ada permintaan, lakukan saja!

Sebenarnya, keseluruhan kodenya sangat sederhana. Contoh pemanggilan antarmuka API yang diperluas dari platform perdagangan kuantitatif milik penemu dapat digunakan secara langsung

Alamat: https://www.fmz.com/api#%E7%AE%80%E5%8D%95%E7%9A%84%E4%BE%8B%E5%AD%90

Gunakan fungsi dalam contoh secara langsung:def api(method, *args) Antarmuka yang perlu kita panggil juga sangat sederhana, menggunakan dua antarmuka berikut (dapat ditemukan dalam dokumen FMZ)

  • RestartRobot Mulai ulang antarmuka robot dan masukkan ID robot sebagai parameter. Gunakan spesifikid, Anda dapat menyebutnya seperti ini:api('RestartRobot', id)

  • StopRobot Hentikan antarmuka robot, parameternya juga robotID

robotIDLihat, dapatkan, tangkapan layar: Gunakan Python untuk mengimplementasikan robot perdagangan kuantitatif untuk memulai atau menghentikan gadget

Untuk memanggil API ekstensi Inventor Quantitative Trading Platform, Anda perlu menggunakan Inventor Quantitative Trading PlatformAPI KEY。 Anda dapat membuatnya sendiri di Manajemen AkunAPI KEY。 Kami menempatkanAPI KEYDiterapkan sebagai parameter ke strategi. Dapatkan Akun Platform Perdagangan Kuantitatif InventorAPI KEYtangkapan layar: Gunakan Python untuk mengimplementasikan robot perdagangan kuantitatif untuk memulai atau menghentikan gadget

Yang tersisa hanyalah menulis logika pengaturan waktu, yang juga sangat sederhana. Tetapkan parameter pengaturan waktu:

["175708,14:55:33-15:10:33", ...]

Tanda elipsis menunjukkan bahwa lebih banyak yang mirip"175708,14:55:33-15:10:33"pengaturan. Parameter waktu adalah string JSON, yang diurai menjadi daftar dalam kode kebijakan. Setiap elemen dalam daftar adalah serangkaian pengaturan mulai/berhenti robot. Sekarang:

"175708,14:55:33-15:10:33"

Tanda koma digunakan untuk memisahkannya. Bagian sebelum koma175708adalah ID robot, dan bagian setelah koma adalah waktu mulai/waktu berhenti. Dalam contoh di atas, robot dengan ID 175708 dimulai pada pukul 14:55:33 dan berhenti pada pukul 15:10:33.

Kemudian strategi tersebut terus mencari, setiap kali memperoleh waktu saat ini terlebih dahulu, lalu membandingkan waktu saat ini dengan waktu yang dijadwalkan guna menentukan apakah perlu memicu permulaan atau penghentian robot. Jika dipicu, panggil api(‘RestartRobot’, id) atau api(‘StopRobot’, id) untuk memulai atau menghentikan robot.

Kode strategi lengkap:

# -*- coding: utf-8 -*-
import time
import json

try:
    import md5
    import urllib2
    from urllib import urlencode
except:
    import hashlib as md5
    import urllib.request as urllib2
    from urllib.parse import urlencode

def api(method, *args):
    d = {
        'version': '1.0',
        'access_key': accessKey,
        'method': method,
        'args': json.dumps(list(args)),
        'nonce': int(time.time() * 1000),
        }

    d['sign'] = md5.md5(('%s|%s|%s|%d|%s' % (d['version'], d['method'], d['args'], d['nonce'], secretKey)).encode('utf-8')).hexdigest()
    return json.loads(urllib2.urlopen('https://www.fmz.com/api/v1', urlencode(d).encode('utf-8')).read().decode('utf-8'))

RobotParams = json.loads(strRobotParams)

def main():
    global RobotParams 
    arrParams = []
    nowDay = 0
    strPush = ""
    if isPushMsg:
        strPush = "@"

    for i in range(len(RobotParams)):
        param = {}
        arr = RobotParams[i].split(",")
        if len(arr) != 2:
            raise Exception("字符串配置错误:分隔符号,")
        param["id"] = arr[0]
        param["isProcessOpenThisDay"] = False
        param["isProcessCloseThisDay"] = False

        arr = arr[1].split("-")
        if len(arr) != 2:
            raise Exception("字符串配置错误:分隔符号-")

        begin = arr[0]
        arrBegin = begin.split(":")
        if len(arrBegin) != 3:
            raise Exception("字符串配置错误:起始时间分隔符号:")
        
        param["begin"] = {}
        param["begin"]["hour"] = float(arrBegin[0])
        param["begin"]["min"] = float(arrBegin[1])
        param["begin"]["sec"] = float(arrBegin[2])

        end = arr[1]
        arrEnd = end.split(":")
        if len(arrEnd) != 3:
            raise Exception("字符串配置错误:结束时间分隔符号:")            
        
        param["end"] = {}
        param["end"]["hour"] = float(arrEnd[0])
        param["end"]["min"] = float(arrEnd[1])
        param["end"]["sec"] = float(arrEnd[2])
        arrParams.append(param)

    # 测试
    Log("输出参数", arrParams, "#FF0000")  

    while True:
        nowTime = time.localtime(time.time())
        nowHour = nowTime.tm_hour 
        nowMin = nowTime.tm_min
        nowSec = nowTime.tm_sec
        
        tbl = {
            "type" : "table", 
            "title" : "msg", 
            "cols" : ["id", "begin", "end", "今天是否执行过启动", "今天是否执行过停止"],
            "rows" : []
        }

        for i in range(len(arrParams)):
            tbl["rows"].append([arrParams[i]["id"], json.dumps(arrParams[i]["begin"]), json.dumps(arrParams[i]["end"]), arrParams[i]["isProcessOpenThisDay"], arrParams[i]["isProcessCloseThisDay"]])
            if nowDay != nowTime.tm_mday:
                arrParams[i]["isProcessOpenThisDay"] = False
                arrParams[i]["isProcessCloseThisDay"] = False

            if arrParams[i]["isProcessOpenThisDay"] == False:
                if nowTime.tm_hour == arrParams[i]["begin"]["hour"] and nowTime.tm_min >= arrParams[i]["begin"]["min"] and nowTime.tm_sec >= arrParams[i]["begin"]["sec"]:
                    ret = api('RestartRobot', int(arrParams[i]["id"]))                    
                    arrParams[i]["isProcessOpenThisDay"] = True
                    Log("机器人ID:", arrParams[i]["id"], "执行启动,请登录平台检查是否启动成功", "扩展API返回值:", ret, strPush)

            if arrParams[i]["isProcessCloseThisDay"] == False:
                if nowTime.tm_hour == arrParams[i]["end"]["hour"] and nowTime.tm_min >= arrParams[i]["end"]["min"] and nowTime.tm_sec >= arrParams[i]["end"]["sec"]:
                    ret = api('StopRobot', int(arrParams[i]["id"]))
                    arrParams[i]["isProcessCloseThisDay"] = True
                    Log("机器人ID:", arrParams[i]["id"], "执行停止,请登录平台检查是否停止成功", "扩展API返回值:", ret, strPush)
        
        if nowDay != nowTime.tm_mday:
            nowDay = nowTime.tm_mday

        LogStatus(_D(), nowTime, "\n`" + json.dumps(tbl) + "`")
        Sleep(500)

Pengaturan parameter robot:

Gunakan Python untuk mengimplementasikan robot perdagangan kuantitatif untuk memulai atau menghentikan gadget

Operasi strategi:

tangkapan layar Gunakan Python untuk mengimplementasikan robot perdagangan kuantitatif untuk memulai atau menghentikan gadget

Robot yang dioperasikan dengan strategi ini: Gunakan Python untuk mengimplementasikan robot perdagangan kuantitatif untuk memulai atau menghentikan gadget

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

Kesimpulan

Sebagai titik awal, API yang diperluas dari platform perdagangan kuantitatif Inventor sangatlah canggih. API yang diperluas ini sepenuhnya memungkinkan untuk digunakan guna membangun platform perdagangan kuantitatif Anda sendiri berdasarkan platform FMZ. Desain robot pengatur waktu ini relatif sederhana. Ia hanya memulai dan berhenti ketika waktunya tiba. Ia tidak menyertakan mekanisme apa pun seperti apakah startup berhasil, verifikasi, pengulangan abnormal, dan sebagainya. Mereka yang tertarik dapat menambahkan fungsi dan memperluasnya. dia. Strategi ini hanya untuk referensi pembelajaran