Swing Trade
O objetivo desta documentação é mapear as propriedades, validações e eventos da boleta Swing Trade.
Parâmetros da ordem
Relação Virtual Order e campos da boleta:
Boleta | Virtual Order | Tipo | Obrigatório | Descrição |
---|---|---|---|---|
Ativo | Symbols | string | Sim | Um único ativo adiciona como primeiro na lista no VO |
Quantidade | OrderQty | long | Sim |
|
Conta Cliente | ClientAccount | string | Sim | Pode ser nulo. mas tem que ter uma permissão para que seja nulo. |
Hora inicial | StartTime | DateTime | Sim |
|
Hora final | Endtime | DateTime | Sim |
|
Data final | EndDayTime | DateTime | Sim | Default é a data atual com a hora final padrão. |
Disparo entrada X ($) |
| double | Não | O valor é adicionado no índice 0 da lista. |
Disparo ganho X ($) | PriceStartGain | float | Sim |
|
Disparo da redução X ($) | PriceStartReduction | float | Não |
|
Ag. rompimento | OnPriceBreak | boolean | Não | Default é false |
Envio entrada ($) |
| double | Não | O valor é adicionado no índice 1 da lista. |
Envio ganho ($) | PriceSendOrderGain | float | Sim |
|
Envio da redução ($) | PriceSendOrderReduction | float | Sim |
|
Disparo stop X ($) | PriceStopLoss | float | Não |
|
Envio stop ($) | PriceSendOrderLoss | float | Não |
|
Redução (%) | MaxLeftPercent | float | Sim | Default é 50.00 |
Aguardar entrada completa | FollowProclaim | boolean | Não | Default é true |
Exemplo de um JSON de envio de ordem
{
"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",
"StrategyId": ""
}
Exemplo do json de execução de ordem
{
"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"
}
Exemplo de código em Angular para envio de ordem
CriarEstrategia() {
let requestLocalId = Guid.create().toString();
const orderParameters: OrderForm = {
"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",
"StrategyId": ""
}
this.signalRService.connection.send("SendStrategyToRobot", requestLocalId, orderParameters);
}
Eventos de Inicialização
Eventos de inicialização é o momento quando abrimos a boleta. Nessa situação a boleta precisa passar por processos de montagem como alteração de texto, exibição de campos dinâmicos ou aplicação de valores default nos campos.
Glossário:
C → Compra
V → Venda
O checkbox “Aguardar entrada completa“ na inicialização fica marcado.
O input “Redução (%)“ é preenchido com o default 50,00 (50%).
Para Swing Trade de Compra existem campos que seus labels são modificados. Dos campos:
Disparo entrada C ($);
Disparo ganho V ($);
Disparo da redução V ($);
Disparo stop V ($).
Para Swing Trade de Venda existem campos que seus labels são modificados. Dos campos:
Disparo entrada V ($);
Disparo ganho C ($);
Disparo da redução C ($);
Disparo stop C ($).
Validações
Campos obrigatórios para serem preenchidos: Symbols, OrderQty, PriceStartGain, PriceSendOrderGain.
O campo OnPriceBreak não poderá ser alterado se já tiver alguma ordem executada.
O input PriceStartReduction (boleta de Compra) tem que ser inferior ao PriceStartGain. Caso o input PriceLimits[0] esteja preenchido verificar se valor é superior.
O input PriceStartReduction (boleta de Venda) tem que ser superior ao PriceStartGain. Caso o input PriceLimits[0] esteja preenchido verificar se valor é inferior.
O input PriceSendOrderReduction é obrigatório quando o input PriceStartReduction estiver preenchido.
O valor do input PriceSendOrderReduction deve está entre PriceSendOrderGain e PriceLimits[1] , caso PriceLimits[1] estiver preenchido ignorar o limite do mesmo.
Campo MaxLeftPercent é obrigatório somente se o campo PriceStartReduction estiver preenchido;
Se na boleta for do tipo Compra e os inputs PriceLimits[0] e PriceLimits[1] estiverem preenchidos o valor do PriceLimits[1] deve ser superior ou igual que o PriceLimits[0].
Se a boleta for do tipo Venda e os inputs PriceLimits[0] e PriceLimits[1] estiverem preenchidos o valor do PriceLimits[1] deve ser inferior ou igual que o PriceLimits[0].
Se boleta for do tipo Compra o input PriceStartReduction deve ser superior ou igual ao PriceSendOrderReduction.
Se boleta for do tipo Venda o input PriceStartReduction deve ser inferior ou igual ao PriceSendOrderReduction.
Os inputs PriceStopLoss e PriceSendOrderLoss podem ter valor negativos se o ativo permitir.
Related content
Plug and Trade Sistemas