avatar of 发明者量化-小小梦 发明者量化-小小梦
fokus pada mesej peribadi
4
fokus pada
1271
Pengikut

Gunakan Python untuk melaksanakan robot dagangan kuantitatif untuk memulakan atau menghentikan alat

Dicipta dalam: 2020-02-14 21:56:58, dikemas kini pada: 2023-10-10 21:13:38
comments   4
hits   3047

Gunakan Python untuk melaksanakan robot dagangan kuantitatif untuk memulakan atau menghentikan alat

Gunakan Python untuk melaksanakan robot dagangan kuantitatif untuk memulakan atau menghentikan alat

Sebagai platform dagangan kuantitatif yang berkuasa, fleksibel dan mudah digunakan di seluruh rangkaian, Platform Dagangan Kuantitatif Inventor mempunyai ambang yang sangat rendah untuk digunakan dan program robot menggunakan sumber yang sangat sedikit. Tetapi kami masih berharap robot itu boleh dimulakan apabila ia perlu berjalan dan berhenti apabila ia tidak perlu berjalan. Contohnya, apabila melakukan dagangan niaga hadapan komoditi yang diprogramkan dan kuantitatif, masa pembukaan bukan pasaran menyumbang sebahagian besar hari itu. Dengan cara ini, kami sangat berharap untuk membiarkan robot berjalan hanya semasa waktu buka pasaran. Adalah menarik untuk memikirkan berapa banyak kos yang boleh dijimatkan dengan menjalankannya hanya semasa waktu buka pasaran setiap hari. Untuk memenuhi keperluan ini, kami boleh menggunakan Python untuk menulis robot strategi yang berjalan pada platform dagangan kuantitatif FMZ. Antara muka API lanjutan bagi platform dagangan kuantitatif pencipta mengawal permulaan dan penghentian robot pada masa yang ditetapkan.

Apabila ada permintaan, lakukan sahaja!

Malah, keseluruhan kod adalah sangat mudah Contoh memanggil antara muka API lanjutan platform dagangan kuantitatif pencipta boleh 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) Antara muka yang perlu kita panggil juga sangat mudah, menggunakan dua antara muka berikut (boleh didapati dalam dokumen FMZ)

  • RestartRobot Mulakan semula antara muka robot dan masukkan ID robot sebagai parameter. Gunakan khususid, anda boleh memanggilnya seperti ini:api('RestartRobot', id)

  • StopRobot Hentikan antara muka robot, parameter juga robotID

robotIDLihat, dapatkan, tangkapan skrin: Gunakan Python untuk melaksanakan robot dagangan kuantitatif untuk memulakan atau menghentikan alat

Untuk memanggil API sambungan Platform Dagangan Kuantitatif Pencipta, anda perlu menggunakan Platform Dagangan Kuantitatif PenciptaAPI KEY。 Anda boleh menjana sendiri dalam Pengurusan AkaunAPI KEY。 Kami meletakkanAPI KEYDiluluskan sebagai parameter kepada strategi. Dapatkan Akaun Platform Dagangan Kuantitatif PenciptaAPI KEYtangkapan skrin: Gunakan Python untuk melaksanakan robot dagangan kuantitatif untuk memulakan atau menghentikan alat

Yang tinggal hanyalah menulis logik pemasaan, yang juga sangat mudah.

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

Ellipsis menunjukkan bahawa lebih serupa"175708,14:55:33-15:10:33"tetapan. Parameter pemasaan ialah rentetan JSON, yang dihuraikan ke dalam senarai dalam kod dasar. Setiap elemen dalam senarai ialah satu set tetapan mula/henti robot. Sekarang:

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

Tanda koma digunakan untuk memisahkannya. Bahagian sebelum koma175708ialah ID robot, dan bahagian selepas koma ialah masa mula/masa berhenti. Dalam contoh di atas, robot dengan ID 175708 dimulakan pada 14:55:33 dan berhenti pada 15:10:33.

Kemudian strategi terus mencari, setiap kali ia mula-mula mendapat masa semasa, dan kemudian membandingkan masa semasa dengan masa yang dijadualkan untuk menentukan sama ada perlu untuk mencetuskan permulaan atau berhenti robot. Jika dicetuskan, panggil api(‘RestartRobot’, id) atau api(‘StopRobot’, id) untuk memulakan atau 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("字符串配置错误:分隔符号,")
        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)

Tetapan parameter robot:

Gunakan Python untuk melaksanakan robot dagangan kuantitatif untuk memulakan atau menghentikan alat

Operasi strategi:

tangkapan skrin Gunakan Python untuk melaksanakan robot dagangan kuantitatif untuk memulakan atau menghentikan alat

Robot yang dikendalikan oleh strategi ini: Gunakan Python untuk melaksanakan robot dagangan kuantitatif untuk memulakan atau menghentikan alat

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

Kesimpulan

Sebagai titik permulaan, API lanjutan platform dagangan kuantitatif Inventor adalah sangat berkuasa untuk menggunakan API lanjutan ini untuk membina platform dagangan kuantitatif anda sendiri berdasarkan platform FMZ. Reka bentuk robot pemasaan ini agak mudah Ia hanya bermula dan berhenti apabila tiba masanya. Ia tidak termasuk sebarang mekanisme seperti sama ada permulaan itu berjaya, pengesahan, percubaan semula yang tidak normal, dan lain-lain. Mereka yang berminat boleh menambah fungsi dan mengembangkan. ia. Strategi tersebut adalah untuk rujukan pembelajaran sahaja