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 (tipostring).strategy_id: identificador único da estratégia (tipostring), corresponde ao campoStrategyIdretornado 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 (tipostring).strategy_id: identificador único da estratégia (tipostring), corresponde ao campoStrategyIdretornado 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 campoStrategyIddurante 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