Utilizando o Python para implementar botes de negociação quantitativa para iniciar ou parar o utilitário

Autora:Sonhos pequenos, Criado: 2020-02-14 21:56:58, Atualizado: 2023-10-10 21:13:38

img

Utilizando o Python para implementar botes de negociação quantitativa para iniciar ou parar o utilitário

Como uma plataforma de negociação quantitativa com funções robustas, flexíveis e fáceis de usar em toda a web, a plataforma de negociação quantitativa dos inventores, embora tenha um limite de uso muito baixo e os programas robóticos ocupem poucos recursos; mas ainda assim, queremos que os robôs sejam iniciados quando precisarem e não precisem parar quando precisarem. Por exemplo, quando fazemos programação de futuros de commodities e negociações quantitativas, o tempo de não negociação ocupa a maior parte do dia. Assim, queremos muito que o robô funcione apenas no horário de negociação, e é muito emocionante pensar em economizar mais. Para essa necessidade, podemos usar a linguagem Python para escrever um robô estratégico que funcione na plataforma de negociação quantitativa FMZ, e que o robô passe por um processo de negociação de preços e preços. O inventor quantificou a interface API de expansão da plataforma de negociação, controlando o início e o fim do robô em tempo real.

Se houver necessidade, diga e faça!

Na verdade, todo o código é muito simples e pode ser usado diretamente usando o exemplo de uma plataforma de negociação quantitativa chamada de Inventor Extension API.

Endereço:https://www.fmz.com/api#简单的例子

Funções usadas diretamente no exemplo:def api(method, *args)A interface que precisamos para fazer a chamada também é muito simples, usando as duas seguintes interfaces (que podem ser consultadas no documento FMZ)

  • RestartRobot O bot reinicia a interface e os parâmetros são transmitidos para o ID do robô. Utilização específicaidO Twitter é um dos principais meios de comunicação do mundo.api('RestartRobot', id)

  • StopRobot Parar a interface do robô, os parâmetros também são robôsID

    RobôsIDVeja, obtenha, capture:img

A plataforma de negociação quantitativa dos inventores de chamadas de extensão de API requer a utilização da plataforma de negociação quantitativa dos inventores.API KEYNão, não é. O que você pode fazer é gerar sua própria conta no gerenciamento.API KEYNão, não é. Então, nósAPI KEYO que é que é isso? Obtenção de contas de inventores de plataformas de negociação quantitativaAPI KEYImagens de vídeo:img

O que resta é escrever uma lógica de tempo, que é muito simples, e definir os parâmetros de tempo:

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

Os representantes de omissão podem configurar mais semelhantes."175708,14:55:33-15:10:33"O que é que ele está a fazer? O parâmetro de tempo é uma string JSON que é analisada como uma lista no código da estratégia. Cada elemento na lista é um conjunto de configurações de inicialização/desligação do robô. O que significa:

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

A parte anterior do ponto é separada por vírgulas e a parte anterior é separada por vírgulas.175708Para o ID do robô, a parte atrás do ponto de viragem é o tempo de inicialização/parada. O exemplo acima é o robô ID: 175708, 14:55:33 iniciado e 15:10:33 interrompido.

Em seguida, a estratégia continua a procurar, obtendo primeiro o tempo atual em cada busca, e então, com base na comparação do tempo atual com o tempo cronometrado, julga se o bot precisa ser iniciado ou interrompido. Se isso ocorrer, você pode ligar para o API (RestartRobot button, id) ou API (StopRobot button, id) para iniciar e parar o robô.

O código completo da estratégia:

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

Configuração dos parâmetros do robô:

img

A estratégia funciona:

Imagensimg

Os robôs operados por esta estratégia:img

A estratégia é endereçada:https://www.fmz.com/strategy/184600

Fim

Como pilar, as APIs de expansão da plataforma de negociação quantitativa do inventor também são muito poderosas, e não há problema em usar essas APIs para fazer sua própria plataforma de negociação quantitativa baseada na plataforma FMZ. Este robô cronometrado é um projeto relativamente simples, apenas sem cérebro para o tempo de inicialização, para o tempo de parada, e não inclui o início do sucesso, verificação, reinicialização de anomalias, etc. mecanismos, interessados em aumentar as funções, expandir. A estratégia é apenas para referência.


Relacionados

Mais.