Mengimplementasikan robot perdagangan kuantitatif dimulai atau berhenti waktu gadget dengan menggunakan Python

Penulis:Lydia, Dibuat: 2022-12-20 14:35:09, Diperbarui: 2023-09-20 10:21:21

img

Mengimplementasikan robot perdagangan kuantitatif dimulai atau berhenti waktu gadget dengan menggunakan Python

Sebagai platform perdagangan kuantitatif yang kuat, fleksibel dan mudah digunakan untuk seluruh jaringan, FMZ Quant Trading Platform memiliki hambatan yang sangat rendah untuk digunakan, dan program robot memakan sedikit sumber daya. Sebagai contoh, waktu non-pembukaan menyumbang sebagian besar dari seluruh hari ketika melakukan program dan perdagangan kuantitatif komoditas berjangka. Dengan cara ini, kami berharap bahwa robot hanya akan berjalan pada waktu pembukaan, dan bahwa ia hanya akan berjalan pada waktu pembukaan setiap hari untuk menghemat uang. Bukankah itu menarik? Untuk memenuhi persyaratan ini, kita dapat menggunakan bahasa Python untuk menulis robot strategi yang berjalan di FMZ Quant Trading Platform, dan biarkan robot mengontrol awal dan berhenti robot pada interval reguler melalui antarmuka API diperpanjang dari FMZ Quant Trading Platform.

Jika ada kebutuhan, mari kita lakukan!

Pada kenyataannya, seluruh kode sangat sederhana. Contoh memanggil antarmuka API ekstensi FMZ Quant Trading Platform dapat digunakan secara langsung.

Alamatnya:https://www.fmz.com/api#simplecontoh

Gunakan fungsi dalam contoh secara langsung:def api (method, *args)Antarmuka yang kita butuhkan untuk memanggil juga sangat sederhana. dua antarmuka berikut digunakan (dapat ditemukan di dokumen FMZ)

  • RestartRobot Mulai kembali antarmuka robot dan masukkan parameter ke robot ID. Penggunaan khususiduntuk memanggil:api ('RestartRobot', id)

  • StopRobot Untuk menghentikan antarmuka robot, parameter juga robotIDAku tidak tahu. RobotID:

img

Untuk memanggil FMZ Quant Trading Platform ekstensi API, Anda perlu menggunakanAPI KEYdari platform perdagangan kuantum FMZ. Anda dapat menghasilkan API KEY Anda sendiri dalam manajemen akun. Kita melewatiAPI KEYsebagai parameter strategi. Screenshot dari mendapatkan akun FMZ Quant Trading PlatformAPI KEY:

img

Sisanya adalah menulis logika waktu, yang juga sangat sederhana.

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

Elipsis menunjukkan bahwa lebih banyak pengaturan seperti"175708,14:55:33-15:10:33"dapat diatur. Parameter waktu adalah string JSON, yang akan dianalisis ke dalam daftar dalam kode strategi. Artinya:

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

Mereka dipisahkan oleh koma. Bagian sebelum koma175708adalah robot ID, dan bagian setelah koma adalah waktu awal / berhenti waktu. Dalam contoh di atas, robot dengan ID 175708 dimulai pada pukul 14:55:33 dan berhenti pada pukul 15:10:33.

Kemudian, dalam strategi, robot akan terus berputar. Setiap putaran putaran pertama akan mendapatkan waktu saat ini, dan kemudian menilai apakah akan memicu memulai atau menghentikan robot sesuai dengan perbandingan antara waktu saat ini dan waktu penyetelan. Jika dipicu, hubungi api ('RestartRobot', id) atau api (StopRobot, id) untuk memulai dan 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("String configuration error: delimiter,")
        param["id"] = arr[0]
        param["isProcessOpenThisDay"] = False
        param["isProcessCloseThisDay"] = False

        arr = arr[1].split("-")
        if len(arr) != 2:
            raise Exception("String configuration error: delimiter-")

        begin = arr[0]
        arrBegin = begin.split(":")
        if len(arrBegin) != 3:
            raise Exception("String configuration error: start time separator:")
        
        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("String configuration error: end time separator:")            
        
        param["end"] = {}
        param["end"]["hour"] = float(arrEnd[0])
        param["end"]["min"] = float(arrEnd[1])
        param["end"]["sec"] = float(arrEnd[2])
        arrParams.append(param)

    # Test
    Log("Output parameters", 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", "Did you perform a start today", "Did you perform a stop today"],
            "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("Robot ID:", arrParams[i]["id"], "Execution started, please log in to the platform to check if it started successfully", "Extended API return value:", 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("Robot ID:", arrParams[i]["id"], "Execution stopped, please log in to the platform to check if it stopped successfully", "Extended API return value:", ret, strPush)
        
        if nowDay != nowTime.tm_mday:
            nowDay = nowTime.tm_mday

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

Pengaturan parameter robot:

img

Strategi berjalan:

Potongan layar:

img img

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

Pengakhiran

Sebagai contoh, FMZ Quant Trading Platform yang diperluas API masih sangat kuat. Robot timing memiliki desain yang sederhana, dimulai pada saat yang tepat dan berhenti pada saat yang tepat. Robot ini tidak mencakup mekanisme seperti apakah startup berhasil, inspeksi, pengecualian mencoba ulang, dll. Jika Anda tertarik, Anda dapat menambahkan fungsi dan memperluasnya. Strategi ini hanya untuk referensi.


Berkaitan

Lebih banyak