Closed benjzyq closed 2 months ago
你是通过交易系统下单来成交的吗,如果不是的话,这个订单对应的成交不会被推送给你策略所使用的session,持仓也不会被记录。 只有通过交易系统发出的订单成交了,才会记录下持仓。策略的日志会显示回报的推送记录,会先推送poisition,再推送trade,net直接可以取到这个session记录到的最新持仓。
你是通过交易系统下单来成交的吗,如果不是的话,这个订单对应的成交不会被推送给你策略所使用的session,持仓也不会被记录。 只有通过交易系统发出的订单成交了,才会记录下持仓。策略的日志会显示回报的推送记录,会先推送poisition,再推送trade,net直接可以取到这个session记录到的最新持仓。
我有点没有懂“通过交易系统下单来成交”这句话。我的步骤是先./spot -c=spot.json -l=info运行spot交易引擎,然后运行我的策略py文件。这是正常的使用步骤吗?
你是通过交易系统下单来成交的吗,如果不是的话,这个订单对应的成交不会被推送给你策略所使用的session,持仓也不会被记录。 只有通过交易系统发出的订单成交了,才会记录下持仓。策略的日志会显示回报的推送记录,会先推送poisition,再推送trade,net直接可以取到这个session记录到的最新持仓。
比如基于文档给出的example, `from pyalgo import *
class Demo: """"""
def __init__(self, sub: DepthSubscription):
self.sub = sub
# use to send/kill order
self.smtord = SmartOrder(sub)
self.fin = False
# add trading phase if you need
# otherwise self.sub.phase is always Phase.UNDEF
# set callback
self.sub.on_data = self.on_depth
self.sub.on_order = self.on_order
def on_order(self, order: Order):
info(f"{order}")
def on_depth(self, depth: Depth):
info(f"{self.sub.datetime}, {self.sub.symbol}")
if self.sub.net == 0:
self.smtord.send(
self.sub.bid_prc(0),
55,
Side.BUY,
OrderType.LIMIT,
Tif.GTC,
)
if name == "main": eng = Engine(0.001) session = eng.make_session( addr="ws://localhost:8111", session_id=3, name="test", trading=True )
sub = session.subscribe("dogefdusd", "depth")
demo = Demo(sub)
eng.run()`
这个样子是没有办法记录net的
你是通过交易系统下单来成交的吗,如果不是的话,这个订单对应的成交不会被推送给你策略所使用的session,持仓也不会被记录。 只有通过交易系统发出的订单成交了,才会记录下持仓。策略的日志会显示回报的推送记录,会先推送poisition,再推送trade,net直接可以取到这个session记录到的最新持仓。
我有点没有懂“通过交易系统下单来成交”这句话。我的步骤是先./spot -c=spot.json -l=info运行spot交易引擎,然后运行我的策略py文件。这是正常的使用步骤吗?
你在运行策略的时候会调用make_session来创建session,通过这个session来订阅instrument,这个instrument的持仓数据就会和这个session绑定在一起,你下单的时候,系统会在订单号里把这个session的id编码进去,用来区分不同的订单,交易所返回的成交回报里面也会有这个订单号,就可以解码出是哪个session发出的订单成交了,把这个持仓记录到对应的session里面去,并异步的写入到pos.db里面。所以如果你是通过其他方式下单,例如通过binance的网页下单,他的订单号是随机生成的,就无法解码出是哪个session发出的订单,这个订单就会被认为是外部订单,系统不会记录与这个订单有关的成交和持仓,你的策略也不会收到回报,net也不会有变化
你是通过交易系统下单来成交的吗,如果不是的话,这个订单对应的成交不会被推送给你策略所使用的session,持仓也不会被记录。 只有通过交易系统发出的订单成交了,才会记录下持仓。策略的日志会显示回报的推送记录,会先推送poisition,再推送trade,net直接可以取到这个session记录到的最新持仓。
我有点没有懂“通过交易系统下单来成交”这句话。我的步骤是先./spot -c=spot.json -l=info运行spot交易引擎,然后运行我的策略py文件。这是正常的使用步骤吗?
你在运行策略的时候会调用make_session来创建session,通过这个session来订阅instrument,这个instrument的持仓数据就会和这个session绑定在一起,你下单的时候,系统会在订单号里把这个session的id编码进去,用来区分不同的订单,交易所返回的成交回报里面也会有这个订单号,就可以解码出是哪个session发出的订单成交了,把这个持仓记录到对应的session里面去,并异步的写入到pos.db里面。所以如果你是通过其他方式下单,例如通过binance的网页下单,他的订单号是随机生成的,就无法解码出是哪个session发出的订单,这个订单就会被认为是外部订单,系统不会记录与这个订单有关的成交和持仓,你的策略也不会收到回报,net也不会有变化
看起来我是通过您说的那个方式订阅的: `if name == "main": eng = Engine(0.001) session = eng.make_session( addr="ws://localhost:8111", session_id=3, name="test", trading=True )
sub = session.subscribe("dogefdusd", "depth")
demo = Demo(sub)
eng.run()`
即使是这样他也没有记录。我上面给出了我做测试的代码
你好,就是我请问正确的获取position的方式是什么?我发现即使我成功交易了,我的.net仍然返回的是0.0。然后我打开了pos.db发现里面仅仅是创建了session对应的table,里面没有数据。