Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

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
languagejson
{
  "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
}

...