Além dos parâmetros obrigatórios e comuns para todas as estratégias, descritos na seção “Estratégias Disponíveis”, a SpreadMaker poderá ter ou não, de acordo com a sua obrigatoriedade, os seguintes parâmetros:
Nome do campo | obrigatório | Tipo | Observação |
Method | Y | string | Aceita valores: 0 - Diferença Ponderada, 1 - Razão, 3 - Diferença |
SpreadTol | Y | float | Coeficiente spread alvo, calculado a partir do preço das pernas: Compra – Venda (Diferença), Compra / Venda (Razão) |
SellOrderMaxProclaimedQty | Y | int | Quantidade apregoada venda |
SellOrderMinProclaimedQty | Y | int | Quantidade mínima para venda |
NumSecsToSolveMismatchedLeg | N | int | Tempo em segundos para a resolução automática de despernamento |
BVSPAccount | Y | string | Conta Bovespa do usuário |
TolStop | N | float | Define um coeficiente de parada. Se o coeficiente do mercado alcançar um valor igual ou pior que este valor, o robô automaticamente substiruirá o ‘Coeficiente Selecionado’ pelo valor configurado no campo ‘TolLoss’ |
TolLoss | Condicionado ao TolStop | float | Novo coeficiente atribuído se a condição do TolStop for cumprida |
StrategyLegs | Y | object | Duas, 1 perna de compra e outra de venda |
EndDate | N | date | Define a data final até quando a ordem deverá ficar ativa |
Propriedades das StrategyLegs | |||
Symbol | Y | string | Papel negociado |
Side | Y | string | Compra ou venda |
OrderQty | Y | int | Quantidade negociada |
IsFinancialQty | N | boolean | Especifica se a quantidade é financeira ou não, valor defaul = false |
BookDepth | N | int | Profundidade máxima a apregoar no book (apregoado por preços). Aceita valores: -1 : Pedra/espera, Só lançará a perna em questão quando a confirmação da execução das outras pernas for recebida. 0 : Pedra, Desliga a apregoação naquela perna. 1 : Apregoa até a profundidade 1 do book |
IgnoreQty | Y | int | Quantidade a ser ignorada no book no momento de pegar o preço que está na pedra, no caso de uma apregoação. |
Para exemplificar o envio de uma SpreadMaker com o método Diferença, foi criado um form para capturar os parâmetros de criação de ordem.
Bloco de código |
---|
<div class="main-content">
<div class="container-fluid">
<div class="row">
<div class="col-md-6">
<div class="card ">
<div class="card-header ">
<h4 class="card-title">Spread Maker Order</h4>
</div>
<div class="card-body ">
<form [formGroup]="formstrategia" (ngSubmit)="CriarEstrategia()" class="form-horizontal">
<div class="form-group">
<input type="text" readonly class="form-control" formControlName="TargetStrategy" id="TargetStrategy"
placeholder="Tipo Estrátegia">
</div>
<div class="form-check-radio">
<label class="form-check-label">
<input class="form-check-input" type="radio" value="1" formControlName="Method">Razão
<span class="form-check-sign"></span>
</label>
</div>
<div class="form-check-radio">
<label class="form-check-label">
<input class="form-check-input" type="radio" value="3" formControlName="Method">Diferença
<span class="form-check-sign"></span>
</label>
</div>
<div class="form-check-radio">
<label class="form-check-label">
<input class="form-check-input" type="radio" value="0"
formControlName="Method">Diferença Ponderada
<span class="form-check-sign"></span>
</label>
</div>
<label for="Target">Target </label>
<div class="form-group">
<input type="text" class="form-control" formControlName="Target"
id="Target" placeholder="1.11 ">
</div>
<div class="row">
<div class="col-sm-12">
<div class="row">
<div class="col-md-6">
<label>SellOrderMaxProclaimedQty</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="SellOrderMaxProclaimedQty"
id="SellOrderMaxProclaimedQty" placeholder="ex: 500">
</div>
</div>
<div class="col-md-6">
<label for="autoSizingInput">SellOrderMinProclaimedQty</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="SellOrderMinProclaimedQty"
id="SellOrderMinProclaimedQty" placeholder="ex: 200">
</div>
</div>
</div>
</div>
</div>
<label for="autoSizingInput">NumSecsToSolveMismatchedLeg </label>
<div class="form-group">
<input type="text" class="form-control" formControlName="NumSecsToSolveMismatchedLeg"
id="NumSecsToSolveMismatchedLeg" placeholder="ex: 6 ">
</div>
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input" type="checkbox" formControlName="IgnoreTradesOutOfPriceLimit">
<span class="form-check-sign"></span>
Ignore Trades Out Of PriceLimit
</label>
</div>
<div class="form-check mt-3">
<div class="form-check">
<label class="form-check-label">
<input class="form-check-input" type="checkbox" formControlName="ConsiderCrossTrades"> Consider
Cross Trades
<span class="form-check-sign"></span>
</label>
</div>
</div>
<label for="autoSizingInput">BVSPAccount</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="BVSPAccount" id="BVSPAccount"
placeholder="ex: 502 ">
</div>
<label for="autoSizingInput">BMFAccount</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="BMFAccount" id="BMFAccount"
placeholder="ex: 502">
</div>
<label for="autoSizingInput"> Account Number</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="AccountNumber" id="AccountNumber"
placeholder="ex: 501 ">
</div>
<label for="autoSizingInput"> TolStop</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="TolStop" id="TolStop" placeholder="ex: 2.98 ">
</div>
<label for="autoSizingInput"> TolLoss</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="TolLoss" id="TolLoss" placeholder="ex: 2.97 ">
</div>
<label for="autoSizingInput"> StartTime</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="StartTime" id="StartTime"
placeholder="ex: 2023-01-17T10:00:00 ">
</div>
<label for="autoSizingInput"> EndTime</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="EndTime" id="EndTime"
placeholder="ex: 2023-01-17T21:00:00 ">
</div>
<div class="card-header ">
<h4 class="card-title">Strategy Legs</h4>
</div>
<div class="card-body ">
<div *ngFor="let leg of legFormGroups; let i = index" >
<h5><label for="'Leg' + i"><b>Leg <span *ngIf="i==0">Venda</span> <span *ngIf="i==1">Compra</span></b></label></h5>
<div class="col" [formGroup]="leg" class="row">
<label for="'Symbol' + i"><b>Symbol</b></label>
<div class="form-group">
<input type="text" class="form-control" formControlName="Symbol" id="'Symbol' + i"
placeholder=" ">
</div>
<label for="'Side' + i">Side</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="Side" id="Side' + i" placeholder=" ">
</div>
<label for="'OrderQty' + i">Order Qty</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="OrderQty" id="'OrderQty' + i"
placeholder=" ">
</div>
<label for="'IsFinancialQty' + i">IsFinancial Qty</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="IsFinancialQty"
id="'IsFinancialQty' + i" placeholder=" ">
</div>
<label for="'BookDepth' + i"><b>BookDepth</b> </label>
<div class="form-group">
<input type="text" class="form-control" formControlName="BookDepth" id="'BookDepth' + i"
placeholder=" ">
</div>
<label for="'IgnoreQty' + i">IgnoreQty</label>
<div class="form-group">
<input type="text" class="form-control" formControlName="IgnoreQty" id="'IgnoreQty' + i"
placeholder=" ">
</div>
<h5><label for="'Leg' + %i"><b> </b></label></h5>
</div>
</div>
</div>
<div class="card-footer ">
<button type="submit" class="btn btn-info btn-round">Submit</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div> |
No nosso exemplo estamos colocando a chamada no spreadmaker.components.ts
Bloco de código |
---|
fstrategia: FormGroup;
// incluir form no construtor
constructor(
private authService: AuthService,
private fb: FormBuilder,
) {
this.fstrategia = fb.group({
TargetStrategy: new FormControl(1002),
Method: new FormControl(''),
Target: [''],
SellOrderMaxProclaimedQty: new FormControl(''),
SellOrderMinProclaimedQty: new FormControl(''),
NumSecsToSolveMismatchedLeg: new FormControl(''),
IgnoreTradesOutOfPriceLimit: new FormControl(false),
ConsiderCrossTrades: new FormControl(false),
BVSPAccount: new FormControl(''),
BMFAccount: new FormControl(''),
AccountNumber: new FormControl(''),
TolStop: new FormControl(0.98),
TolLoss: new FormControl(0.97),
StartTime: new FormControl(''),
EndTime: [''],
StrategyLegs: new FormArray([])
});
.
.
.
.
CriarEstrategia(){
let requestLocalId = Guid.create().toString();
let serializedForm = JSON.stringify(this.fstrategia.value);
this.connection.send("SetStrategyParams", requestLocalId,serializedForm);
} |
A estratégia criada pelo método “CriarEstrategia()
" será recebida instantaneamente pelo métodos de recebimento de estratégia do WebBroker e enviada para o robô da PnT.
O Json correspondente enviado para o WebBroker:
Bloco de código | ||
---|---|---|
| ||
{
"TargetStrategy": 1002,
"AccountNumber": 501,
"StartTime": "2023-02-23T10:00:00",
"EndTime": "2023-02-23T18:00:00",
"Method": 3,
"SpreadTol": 1.11,
"StrategyLegs": [
{
"Symbol": "PETR4",
"Side": "V",
"OrderQty": "1100",
"IsFinancialQty": false,
"BookDepth": 1,
"IgnoreQty": 300
},
{
"Symbol": "PETR3",
"Side": "C",
"OrderQty": "1200",
"IsFinancialQty": false,
"BookDepth": 1,
"IgnoreQty": 200
}
],
"SellOrderMaxProclaimedQty": 500,
"SellOrderMinProclaimedQty": 200,
"NumSecsToSolveMismatchedLeg": 6,
"BVSPAccount": 501,
"TolStop": 1.98,
"TolLoss": 1.97
} |
...