Panduan memulai atau menghentikan robot perdagangan kuantitatif menggunakan Python

Penulis:Mimpi kecil, Dibuat: 2020-02-14 21:56:58, Diperbarui: 2023-10-10 21:13:38

img

Panduan memulai atau menghentikan robot perdagangan kuantitatif menggunakan Python

Sebagai platform perdagangan kuantitatif yang kuat, fleksibel dan mudah digunakan di seluruh dunia, inventor platform perdagangan kuantitatif meskipun penggunaan ambang batasnya sangat rendah dan program robot memakan sedikit sumber daya. Sebagai contoh, ketika melakukan program perdagangan berjangka komoditas, waktu buka tidak menempati sebagian besar hari. Jadi kita sangat berharap robot hanya beroperasi pada waktu buka, setiap hari hanya beroperasi pada waktu buka. Untuk kebutuhan ini, kita dapat menggunakan bahasa Python untuk menulis strategi robot yang berjalan di platform perdagangan kuantitatif FMZ, sehingga robot ini dapat melewati Penemu memperluas antarmuka API untuk platform perdagangan kuantitatif, yang secara otomatis mengontrol start dan stop robot.

Jika ada permintaan, lakukan saja!

Pada kenyataannya, seluruh kode sangat sederhana, dan contoh yang disebut inventor kuantitatif platform perdagangan untuk memperluas antarmuka API dapat digunakan langsung.

Alamat:https://www.fmz.com/api#简单的例子

Fungsi yang digunakan secara langsung dalam contoh:def api(method, *args)Interface yang kita butuhkan untuk memanggilnya juga sangat sederhana, dengan dua interface berikut (bisa dicek di dokumen FMZ)

  • Perangkat lunak Setelah mengaktifkan kembali antarmuka robot, parameter dapat ditransfer ke ID robot. Penggunaan khususid"Saya tidak tahu apa yang akan terjadi", katanya.api('RestartRobot', id)

  • StopRobot Hentikan antarmuka robot, parameternya juga robotID

    RobotIDLihat, dapatkan, gambar:img

Aplikasi ini dapat digunakan untuk mengkoneksikan informasi yang dibutuhkan oleh pengguna.API KEYSaya tidak tahu. Anda dapat membuat akun Anda sendiri dalam manajemen akun.API KEYSaya tidak tahu. Kita akanAPI KEYIni adalah salah satu dari beberapa strategi yang digunakan oleh Google. Mengakses akun inventor di platform perdagangan kuantitatifAPI KEYGambar:img

Yang tersisa adalah menulis logika waktu, yang juga sangat sederhana, dan mengatur parameter waktu:

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

Anda dapat mengatur lebih banyak hal yang sama."175708,14:55:33-15:10:33"Perangkat lunak ini memiliki beberapa fitur yang berbeda. Parameter waktu adalah string JSON yang akan diselesaikan dalam kode kebijakan, diselesaikan sebagai daftar. Setiap elemen dalam daftar adalah seperangkat pengaturan start/stop robot. Ini adalah:

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

Bagian sebelum koma ditulis dengan titik koma.175708Untuk robot ID, bagian di belakang koma adalah start time/stop time. Contoh di atas adalah robot dengan ID: 175708, dimulai pada pukul 14:55:33 dan berhenti pada pukul 15:10:33.

Kemudian strategi berputar-putar, dengan setiap putaran mencari waktu saat ini, dan kemudian memutuskan apakah perlu memicu memulai atau menghentikan robot berdasarkan perbandingan waktu saat ini dan waktu penjadwalan. Jika dipicu, panggil api (RestartRobot button, id) atau api (StopRobot button, 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)

Peraturan parameter robot:

img

Strategi yang digunakan:

Gambarimg

Robot yang dioperasikan oleh strategi ini:img

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

Kesimpulan

Sebagai gantinya, penemu API ekstensi untuk platform perdagangan kuantitatif juga sangat kuat, dan tidak ada masalah dengan API ekstensi ini untuk platform perdagangan kuantitatif mereka sendiri berdasarkan platform FMZ. Desain robot pencetak waktu ini relatif sederhana, hanya tidak memiliki otak untuk memulai waktu, untuk berhenti waktu, dan tidak termasuk memulai apakah berhasil, pemeriksaan, uji ulang yang tidak normal, dan lain-lain mekanisme, yang tertarik dapat menambahkan fungsi, memperluas. Strategi hanya untuk referensi belajar


Berkaitan

Lebih banyak