python - Darwinex ZeroMQ & MT4 - 如何迭代 ZeroQM 返回值?(Python)
问题描述
我正在尝试在 Metatrader 4 和 Darwinex ZeroMQ (Python) 之间架起一座桥梁。我让连接 100% 正常工作 - 返回值。问题是值返回为“NoneType”,看起来像字典,但不可迭代。有人知道如何将信息分配给变量吗?我是 python 新手,我正在尝试创建一个小型机器人。
按照 Darwinex 文档的链接:https ://github.com/darwinex/dwx-zeromq-connector
请参阅下面我的 Python 代码和返回值:
from DWX_ZeroMQ_Connector_v2_0_1_RC8 import DWX_ZeroMQ_Connector
_zmq = DWX_ZeroMQ_Connector(_verbose=True)
_zmq._generate_default_order_dict()
_zmq._DWX_MTX_GET_ALL_OPEN_TRADES_()
_zmq._DWX_MTX_GET_ALL_OPEN_TRADES_().get('_trades')
按照下面 Jupiter notebook 上的截图,更容易看到结果:
解决方案
我使用自己的套接字进行通信。这里有一些编辑过的代码示例:
import zmq
import threading
import time
import ast
def fetch_to_db(data):
try:
if 'OPEN_TRADES' in data:
res = ast.literal_eval(data)
orders = res['_trades']
for key,value in orders.items():
#print(key)
value['orderID'] = key
print(value)
print()
else:
print('FETCH ERROR')
except Exception as e:
print(e)
def get_open_trades(stop):
try:
while True:
data = str('TRADE;GET_OPEN_TRADES')
c = zmq.Context()
s = c.socket(zmq.PUSH)
s.connect('tcp://127.0.0.1:32768')
s.send_string(data)
s.send_string(data)
time.sleep(1)
if stop():
s.close()
break
except Exception as e:
print(e)
def receiver_sock(stop):
try:
c = zmq.Context()
s = c.socket(zmq.PULL)
s.setsockopt(zmq.RCVHWM, 1)
s.connect('tcp://127.0.0.1:32769')
while True:
data = s.recv_string()
fetch_to_db(data)
time.sleep(0.00001)
if stop():
s.close()
break
except Exception as e:
print(e)
def loop_s():
try:
stop_threads = False
receiver_socket = threading.Thread(target = receiver_sock, args =(lambda : stop_threads, ))
receiver_socket.setDaemon(True)
receiver_socket.start()
open_trades = threading.Thread(target = get_open_trades, args =(lambda : stop_threads, ))
open_trades.setDaemon(True)
open_trades.start()
except Exception as e:
print(e)
try:
loop_s()
while True: time.sleep(100)
except KeyboardInterrupt:
print('CLOSING')
processes = [get_open_trades,receiver_sock]
for i in processes:
stop_threads = True
t1 = threading.Thread(target = i, args =(lambda : stop_threads, ))
fetch_to_db 函数为每个订单返回一个字典,包括 orderID
问候
推荐阅读
- javascript - 如何在 UTC 中为当前时间创建一个新的 javascript 日期对象?
- parallel-processing - 并行处理输出未对齐或不同类型的 xarray 数据集
- amazon-web-services - Beanstalk:ebextensions 定制因服务失败:找不到命令
- python - Python - 在 BeautifulSoup 命令上使用 json 值
- selenium - 使用 Selenium 获取所有 Chrome 浏览器(包括 service worker 和扩展)日志
- postgresql - PostgreSQL 验证表值并返回否则返回默认值
- python - Instapy 问题,可能连接到 firefox webdriver
- c++ - 使用 arduino-timer.h 为 Arduino 通过引用/指针传递结构
- c# - 如何获取我可以看到谁拥有的数据行值?
- sql - Power BI Microsoft SQL:“;”附近的语法不正确。')' 附近的语法不正确