5. Recebendo e Enviando Estratégias

5. Recebendo e Enviando Estratégias

Com a conexão estabelecida com o WebBroker, o cliente está pronto para enviar e receber atualizações de estratégias.
Como mencionado anteriormente, o WebBroker utiliza o protocolo SignalR para realizar a transmissão bidirecional de dados em tempo real.

 

📤 Enviando uma estratégia

Para enviar uma nova estratégia ao robô, utilize o método SendStrategyToRobot, que exige dois parâmetros:

  • request_id: um identificador único da requisição (tipo string).

  • strategy_params: um objeto em formato JSON contendo os parâmetros da estratégia.

Exemplo em python do envio de uma Swing Trade:
import uuid request_id = str(uuid.uuid4()) strategy_params = { "Side": "C", "Symbol": "PETR3", "OrderQty": 5000, "PriceLimit": 44, "PriceLimit2": 44.5, "PriceStartGain": 44.5, "PriceStartReduction": null, "PriceSendOrderGain": 44.2, "PriceSendOrderReduction": null, "PriceStopLoss": 42.85, "PriceSendOrderLoss": 42.85, "MaxLeftPercent": 50, "FollowProclaim": true, "StartTime": "2025-02-03T10:00:00", "EndTime": "2025-02-03T18:55:00", "TargetStrategy": "2028", "BVSPAccount": "502", "BMFAccount": "502", "AccountNumber": "502" } user.webbroker_connection.send("SendStrategyToRobot", [request_id, strategy_params])

 

Demos em python e angular poderão ser baixados nas seções 5.1 e 5.2:

Outros exemplos de JSON para o envio de estratégias podem ser encontrados na seção 6, Estratégias Disponíveis.

 

📥 Recebendo atualizações de estratégias

As atualizações referentes às estratégias — incluindo criação, modificação ou andamento — são recebidas através do evento OnCurrentUserStrategies, conforme descrito no item 4.1 da seção 4, Iniciando a conexão com o WebBroker.

Esse método de escuta recebe um parâmetro strategy, representado por um objeto JSON que contém os dados completos da estratégia atualizada.

Dentro desse objeto, há um campo chamado strategy_id, que é um identificador único gerado pelo WebBroker para representar a estratégia. Esse ID é fundamental, pois permite que o cliente realize alterações nos campos editáveis da estratégia ou modifique seu status operacional.

exemplo de recebimento da estratégia Swing Trade:
{ "EntryLevel": 44, "EntryPrice": 44, "GainLevel": 44.5, "StopLevel": 42.85, "PriceSendOrderLoss": 42.85, "ReductionLevel": 0, "ReductionPrice": 0, "ReductionPercentage": 50, "GainPrice": 44.2, "ExitAfterFullEntry": true, "AvoidAggression": false, "EntrySide": "C", "AccountNumber": "502", "BVSPAccounts": [ "502" ], "BMFAccounts": [ "502" ], "BrokerId": "PNT", "Coefficients": { "Type": "MarketMaker", "LimitPrice": 44, "PriceMarket": 41.293839, "PriceExecuted": 0 }, "CreateDate": "2025-02-04T15:29:23Z", "EndDate": "0001-01-01T00:00:00", "EndTime": "2025-02-03T18:55:00", "ErrorDescription": "Starting Loss Trade price: 41.37. Trade Number: 78660. Trigger price: 42.85. Loss price: 42.85", "IsNewOrder": false, "Label": "", "StrategyLegs": [ { "AvgFillPrice": 0, "CurrOpenQtyOnMkt": 0, "ErrorDescription": "Starting Loss Trade price: 41.37. Trade Number: 78660. Trigger price: 42.85. Loss price: 42.85", "ExchangeCode": "", "FilledQty": 0, "LastTimeExecReport": "2025-02-04T18:22:45.6691668+00:00", "OrderQty": 5000, "PriceLimit": 0, "PriceStopLoss": 0, "Side": "V", "Symbol": "PETR3", "ExecutionProgress": 0, "FinancialLim": 0, "Status": "OK", "MarketDif": 41.2900009155273 }, { "AvgFillPrice": 41.3714, "CurrOpenQtyOnMkt": 0, "ErrorDescription": "Starting Swing Trade price: 41.37. Trade Number: 78660. Trigger price: 44. Sent price: 44", "ExchangeCode": "", "FilledQty": 5000, "LastTimeExecReport": "2025-02-04T18:22:43.6692622+00:00", "OrderQty": 5000, "PriceLimit": 0, "PriceStopLoss": 0, "Side": "C", "Symbol": "PETR3", "ExecutionProgress": 1, "FinancialLim": 0, "Status": "Completed", "MarketDif": 41.2900009155273 } ], "OnBehalfOfTraderId": "502", "OStatus": 2, "OStatus2": 2, "PriceLimits": [ 44, 44, 44.5 ], "PushId": "", "PushStatus": "", "PushValidity": "0001-01-01T00:00:00", "RobotId": "PNT", "StartTime": "2025-02-04T12:25:06", "StrategyId": "39865968-a440-4d93-b761-34279b924378", "StrategyName": "SwingTrade", "StrategyStatus": "OK", "LastCoefficientUpdate": "2025-02-04T18:22:45.6691678+00:00", "SelCoeff": 0, "ExecCoeff": 0, "MarketCoeff": 0, "UsedCoeff": 0, "StrategyUniqueKey": null, "StratType": 2028, "TargetStrategy": "MarketMakerIVS", "TraderID": "502", "UserId": "", "VirtualOrderId": 6020400007, "SendStrategyToClient": true, "ClOrdID": "668b28c0-0962-913c-4ff1-6f312cc0dc97" }

 

✏️ Alterando campos de uma estratégia

Para realizar alterações nos campos de uma estratégia existente, utilize o método ReplaceStrategy, que requer três parâmetros:

  • request_id: identificador único da requisição (tipo string).

  • strategy_id: identificador único da estratégia (tipo string), corresponde ao campo StrategyIdretornado nas atualizações.

  • strategy_params: objeto em formato JSON contendo apenas os campos da estratégia que devem ser alterados.

⚠️ Observação: Nem todos os campos de uma estratégia são editáveis. Para saber quais campos podem ser modificados, consulte as tabelas específicas de cada estratégia na seção 6, Estratégias Disponíveis.

Exemplo em python:
import uuid request_id = str(uuid.uuid4()) strategy_Id = "39865968-a440-4d93-b761-34279b924378" strategy_params = { "OrderQty": 6000, "PriceLimit": 44.1, "PriceLimit2": 446, "PriceStartGain": 44.5, "PriceSendOrderGain": 44.23, "PriceStopLoss": 42.9, "PriceSendOrderLoss": 43.00, "EndTime": "2025-02-03T19:55:00" } user.webbroker_connection.send("ReplaceStrategy", [request_id, strategy_Id, strategy_params])

 

❌ Cancelando uma estratégia

Para cancelar uma estratégia ativa, utilize o método CancelStrategy, que requer dois parâmetros:

  • request_id: identificador único da requisição (tipo string).

  • strategy_id: identificador único da estratégia (tipo string), corresponde ao campo StrategyIdretornado nas atualizações.

exemplo em python:
import uuid request_id = str(uuid.uuid4()) strategy_Id = "39865968-a440-4d93-b761-34279b924378" user.webbroker_connection.send("CancelStrategy", [request_id, strategy_Id])

 

✏️ Alterando o Status de uma Estratégia

Para alterar o status de uma estratégia (Ativa ou Inativa), utilize o método SetStrategyStatus, que requer três parâmetros obrigatórios:

  • request_id: Identificador único da requisição (tipo string).

  • strategy_id: Identificador único da estratégia (tipo string), correspondente ao valor retornado no campo StrategyId durante as atualizações.

  • status: Status desejado (tipo string). Utilize:

    • OK — para ativar a estratégia (status Ativa).

    • OnHold — para inativar a estratégia (status Inativa).

exemplo em python:
import uuid request_id = str(uuid.uuid4()) strategy_Id = "39865968-a440-4d93-b761-34279b924378" user.webbroker_connection.send("SetStrategyStatus", [request_id, strategy_Id,"OnHold"])

 

Plug and Trade Sistemas