Melaksanakan robot perdagangan kuantitatif dimulakan atau berhenti gadget dengan menggunakan Python

Penulis:Lydia, Dicipta: 2022-12-20 14:35:09, Dikemas kini: 2023-09-20 10:21:21

img

Melaksanakan robot perdagangan kuantitatif dimulakan atau berhenti gadget dengan menggunakan Python

Sebagai platform perdagangan kuantitatif yang kuat, fleksibel dan mudah digunakan untuk seluruh rangkaian, Platform Dagangan Kuantiti FMZ mempunyai halangan yang sangat rendah untuk digunakan, dan program robot mengambil sedikit sumber. Sebagai contoh, masa yang tidak dibuka menyumbang kepada sebahagian besar sepanjang hari ketika menjalankan program dan perdagangan kuantitatif niaga hadapan komoditi. Dengan cara ini, kami berharap bahawa robot hanya akan berjalan pada waktu pembukaan, dan bahawa ia hanya akan berjalan pada waktu pembukaan setiap hari untuk menjimatkan wang. Bukankah menarik? Untuk memenuhi keperluan ini, kita boleh menggunakan bahasa Python untuk menulis robot strategi yang berjalan di Platform Dagangan FMZ Quant, dan biarkan robot mengawal permulaan dan berhenti robot pada selang waktu yang tetap melalui antara muka API lanjutan Platform Dagangan FMZ Quant.

Jika ada keperluan, mari kita lakukan!

Malah, keseluruhan kod sangat mudah. contoh memanggil sambungan API antara muka Platform Dagangan Kuantum FMZ boleh digunakan secara langsung.

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

Gunakan fungsi dalam contoh secara langsung:def api (method, *args)Antara muka yang perlu kita panggil juga sangat mudah. dua antara muka berikut digunakan (boleh didapati dalam dokumen FMZ)

  • Mulakan semulaRobot Mulakan semula antara muka robot dan masukkan parameter ke dalam ID robot. Penggunaan khususiduntuk memanggil:api ('RestartRobot', id)

  • StopRobot Untuk menghentikan antara muka robot, parameter juga robotID. RobotID:

img

Untuk memanggil FMZ Quant Trading Platform sambungan API, anda perlu menggunakanAPI KEYdaripada Platform Dagangan Kuantum FMZ. Anda boleh menjana API KEY anda sendiri dalam pengurusan akaun. Kita melaluiAPI KEYsebagai parameter strategi. Tangkapan skrin mendapatkan akaun Platform Dagangan Kuantum FMZAPI KEY:

img

Selebihnya adalah menulis logik masa, yang juga sangat mudah.

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

Elipsis menunjukkan bahawa lebih banyak tetapan seperti"175708,14:55:33-15:10:33"boleh ditetapkan. Parameter masa adalah rentetan JSON, yang akan dianalisis ke dalam senarai dalam kod strategi. Setiap elemen dalam senarai adalah satu set tetapan permulaan / berhenti robot. Iaitu:

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

Mereka dipisahkan dengan koma.175708adalah robot ID, dan bahagian selepas koma adalah masa permulaan / berhenti masa. Dalam contoh di atas, robot dengan ID 175708 bermula pada 14:55:33 dan berhenti pada 15:10:33.

Kemudian, dalam strategi, robot akan terus berputar. Setiap putaran putaran pertama akan mendapatkan masa semasa, dan kemudian menilai sama ada untuk mencetuskan permulaan atau berhenti robot mengikut perbandingan antara masa semasa dan masa penyesuaian. Jika dicetuskan, panggil api ('RestartRobot', id) atau api (StopRobot, id) untuk memulakan dan menghentikan robot.

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

Tetapan parameter robot:

img

Strategi berjalan:

Tangkapan skrin:

img img

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

Penghujung

Sebagai contoh, FMZ Quant Trading Platform's diperluaskan API masih sangat kuat. Robot masa adalah mudah dalam reka bentuk, ia adalah untuk memulakan pada masa dan berhenti pada masa. Ia tidak termasuk mekanisme seperti sama ada permulaan berjaya, pemeriksaan, pengecualian cuba semula, dan lain-lain. Jika anda berminat, anda boleh menambah fungsi dan mengembangkannya. Strategi ini adalah untuk rujukan sahaja.


Berkaitan

Lebih lanjut