Alat kecil untuk memulakan atau menghentikan bot dagangan kuantitatif menggunakan Python

Penulis:Mimpi kecil, Dicipta: 2020-02-14 21:56:58, Dikemas kini: 2023-10-10 21:13:38

img

Alat kecil untuk memulakan atau menghentikan bot dagangan kuantitatif menggunakan Python

Sebagai platform dagangan kuantitatif yang kuat dan mudah digunakan, platform dagangan kuantitatif pencipta walaupun menggunakan ambang yang sangat rendah dan program robot mengambil sedikit sumber. Sebagai contoh, dalam program perdagangan berjangka komoditi dan kuantiti, masa tidak terbuka mengambil sebahagian besar hari. Jadi kita sangat berharap bahawa hanya robot yang beroperasi pada waktu buka, setiap hari hanya beroperasi pada waktu buka. Untuk keperluan ini, kita boleh menggunakan bahasa Python untuk menulis bot strategi yang berjalan di platform perdagangan kuantiti FMZ, dan membiarkan robot ini melalui Pencipta memperluas antara muka API untuk platform dagangan kuantitatif, mengawal permulaan dan penghentian bot pada masa yang sama.

Jika ada permintaan, buatlah!

Sebenarnya, kodnya sangat mudah dan boleh digunakan secara langsung dengan memanggil contoh pencipta untuk memperluas API platform perdagangan kuantitatif.

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

Fungsi yang digunakan secara langsung dalam contoh:def api(method, *args)Antara muka yang kita perlukan untuk memanggil juga sangat mudah, menggunakan dua antara muka berikut ((boleh dicari di dokumen FMZ)

  • Mulakan semulaRobot Menghidupkan semula antara muka bot, parameter boleh dihantar ke ID bot. Penggunaan khususidDi sini, anda boleh menghubungi:api('RestartRobot', id)

  • StopRobot Hentikan antara muka robot, parameter juga robotID

    RobotIDLihat, dapatkan, gambar skrin:img

Panggilan Pencipta Platform Perdagangan Kuantitatif Peningkatan API yang diperlukan untuk menggunakan Pencipta Platform Perdagangan KuantitatifAPI KEYSaya tidak tahu apa yang berlaku. Anda boleh membuat akaun anda sendiri dalam pengurusan akaun anda.API KEYSaya tidak tahu apa yang berlaku. Kita akanAPI KEYPerkhidmatan ini digunakan sebagai parameter untuk strategi. Memperoleh akaun inventor dalam platform pertukaran kuantitatifAPI KEYGambar skrin:img

Yang tinggal ialah menulis logik masa, yang juga sangat mudah, dan menetapkan parameter masa:

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

Perwakilan boleh menetapkan lebih banyak yang serupa."175708,14:55:33-15:10:33"Peranti yang digunakan adalah: Parameter waktu adalah satu senar JSON yang akan diselesaikan dalam kod dasar sebagai senarai. Setiap elemen dalam senarai adalah satu set bot memulakan / menghentikan tetapan. Maksudnya:

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

Di mana bahagian sebelum koma ditempatkan sebagai titik koma.175708Untuk ID bot, bahagian di belakang koma adalah masa permulaan / berhenti. Contoh di atas adalah bot ID: 175708, bermula pada pukul 14:55:33 dan berhenti pada pukul 15:10:33.

Kemudian, strategi ini berputar-putar, mencari masa semasa setiap kali, dan kemudian menilai sama ada perlu mencetuskan permulaan atau penghentian bot berdasarkan perbandingan masa semasa dan masa penentuan masa. Jika mencetuskan, panggil api (RestartRobot button, id) atau api (StopRobot button, id) untuk memulakan atau menghentikan bot.

Kode strategi penuh:

# -*- 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)

Seting parameter bot:

img

Strategi yang dijalankan:

Gambar gambarimg

Robot yang digunakan oleh strategi ini:img

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

Penghujung

Sebagai percubaan, API pelanjutan bagi platform dagangan kuantitatif juga sangat kuat, dan tidak ada masalah untuk menggunakan API pelanjutan ini untuk platform dagangan kuantitatif sendiri berdasarkan platform FMZ. Reka bentuk robot pemasa ini agak mudah, hanya tidak mempunyai otak untuk memulakan masa, berhenti pada masa, dan tidak memasukkan mekanisme permulaan sama ada berjaya, pemeriksaan, cubaan semula yang luar biasa, dan sebagainya, yang berminat dapat menambah fungsi, memperluaskan. Strategi untuk rujukan pembelajaran sahaja


Berkaitan

Lebih lanjut