Type/to search
8
Follow
1364
Followers
Use Python para implementar um robô de negociação quantitativa para iniciar ou parar um gadget
Discussions
Created 2020-02-14 21:56:58  Updated 2023-10-10 21:13:38
 4
 3273

img

Use Python para implementar um robô de negociação quantitativa para iniciar ou parar um gadget

Como uma plataforma de negociação quantitativa poderosa, flexível e fácil de usar em toda a rede, a Plataforma de Negociação Quantitativa Inventor tem um limite de uso muito baixo e o programa do robô consome muito poucos recursos. Mas ainda esperamos que o robô possa ser ligado quando precisar funcionar e parado quando não precisar.
Por exemplo, ao fazer negociações programadas e quantitativas de futuros de commodities, o horário de abertura fora do mercado representa a grande maioria do dia. Dessa forma, esperamos muito deixar o robô rodar somente durante o horário de abertura do mercado. É emocionante pensar em quanto custo pode ser economizado ao rodá-lo somente durante o horário de abertura do mercado todos os dias. Para atender a esse requisito, podemos usar Python para escrever um robô de estratégia que seja executado na plataforma de negociação quantitativa FMZ.
A interface API estendida da plataforma de negociação quantitativa do inventor controla o início e a parada do robô em um horário fixo.

Quando houver demanda, faça!

Na verdade, todo o código é muito simples. O exemplo de chamar a interface API estendida da plataforma de negociação quantitativa do inventor pode ser usado diretamente

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

Use a função no exemplo diretamente:def api(method, *args)
A interface que precisamos chamar também é muito simples, usando as duas interfaces a seguir (podem ser encontradas no documento FMZ)

  • RestartRobot
    Reinicie a interface do robô e passe o ID do robô como parâmetro.
    Use específicoid, você pode chamá-lo assim:api('RestartRobot', id)

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

    robôIDVer, obter, captura de tela:
    img

Para chamar a API de extensão da plataforma de negociação quantitativa do Inventor, você precisa usar a plataforma de negociação quantitativa do InventorAPI KEY
Você pode gerar o seu próprio no Gerenciamento de ContasAPI KEY
Nós colocamosAPI KEYPassado como parâmetro para a estratégia.
Obtenha a conta da plataforma de negociação quantitativa InventorAPI KEYcaptura de tela:
img

Tudo o que resta é escrever a lógica de temporização, que também é muito simples. Defina os parâmetros de temporização:

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

As reticências indicam que há mais semelhanças"175708,14:55:33-15:10:33"configurações.
O parâmetro de tempo é uma string JSON, que é analisada em uma lista no código da política. Cada elemento na lista é um conjunto de configurações de início/parada do robô.
Agora mesmo:

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

As vírgulas são usadas para separá-los. A parte antes da vírgula175708é o ID do robô e a parte depois da vírgula é o horário de início/término.
No exemplo acima, o robô com ID 175708 foi iniciado às 14:55:33 e parado às 15:10:33.

Em seguida, a estratégia continua a busca, cada vez obtendo primeiro a hora atual e, em seguida, comparando a hora atual com a hora programada para determinar se é necessário acionar o início ou a parada do robô.
Se acionado, chame api('RestartRobot', id) ou api('StopRobot', id) para iniciar ou parar o robô.

O código de estratégia completo:

# -*- 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ções de parâmetros do robô:

img

Operação de estratégia:

captura de tela
img

Robôs operados por esta estratégia:
img

Endereço estratégico: https://www.fmz.com/strategy/184600

Conclusão

Como ponto de partida, a API estendida da plataforma de negociação quantitativa Inventor é muito poderosa. É completamente possível usar essas APIs estendidas para construir sua própria plataforma de negociação quantitativa com base na plataforma FMZ.
O design deste robô de cronometragem é relativamente simples. Ele apenas inicia e para quando chega a hora. Ele não inclui nenhum mecanismo como se a inicialização foi bem-sucedida, verificação, nova tentativa anormal, etc. Aqueles que estão interessados ​​podem adicionar funções e expandir isto.
A estratégia é apenas para referência de aprendizagem

Related Recommendations
Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)