Mercado de ações. Estoques. Rapidez na execução de ordens comerciais. - página 8

 
Replikant_mih #:

Não pode o que?) A melhor oferta - 10.1, eu lanço um limite para comprar a 11, recolho o copo inteiro a 11 se o volume no copo a 11 não for suficiente para cumprir a aplicação inteira, ou parar em algum lugar no meio. Se for necessário que isso seja exatamente cumprido, bem, para fazer uma batida maior e isso é tudo. Se eu quisesse que meu pedido fosse preenchido com precisão, teria que aumentar o preço máximo e estabelecer um preço em algum lugar à sua frente, se eu quisesse que meu pedido fosse preenchido com precisão. Em geral, se eu varrer o copo inteiro a uma grande profundidade - para mim é mais como um sinal de que estou fazendo algo errado))))))


COI - bem, você executa tudo no caminho, depois remove o resto. Tanto para o COI). Eu não faço arbitragem comercial, talvez não entenda algumas especificidades restritas. Se você quiser comer todos os pedidos até certo nível - bem, você pode observar que volume existe, e jogar para Rosno tanto assim, se não estiver satisfeito com a variante de retirada restante. Em resumo, a tarefa não é clara para mim).

Eu já falei, isso eu faço em Quick

procedure TExpert.SellBuySpot;
var
  outStr, id: string;
  res: long;
  ErrCode: long;
  ErrSize: Dword;
  ErrStr: LPSTR;
  Dt: TDateTime;
begin
  FOrder:= 0;
  FTransID:= GetTransID();
  id:= IntToStr(TransID);
  case BuySell of
    1: outStr:= 'ACCOUNT=' + ExpData.SpotAccaunt + '; CLIENT_CODE=' +
               ExpData.Client + '; TYPE=L; TRANS_ID=' + id + '; CLASSCODE=' +
               ExpData.SpotData.ClassCode + '; SECCODE=' + ExpData.SpotData.SecCode +
               '; ACTION=NEW_ORDER; OPERATION=B' + '; PRICE=' +
               FloatToStr(ExpData.SpotData.SellPrice + 10 * ExpData.SpotData.Step) +
               '; QUANTITY=' + FloatToStr(aVol) + ';';
    2: outStr:= 'ACCOUNT=' + ExpData.SpotAccaunt + '; CLIENT_CODE=' +
               ExpData.Client + '; TYPE=L; TRANS_ID=' + id + '; CLASSCODE=' +
               ExpData.SpotData.ClassCode + '; SECCODE=' + ExpData.SpotData.SecCode +
               '; ACTION=NEW_ORDER; OPERATION=S' + '; PRICE=' +
               FloatToStr(ExpData.SpotData.BuyPrice - 10 * ExpData.SpotData.Step) +
               '; QUANTITY=' + FloatToStr(aVol) + ';';
  end;
  ErrCode:= 0;
  ErrSize:= 0;
  ErrStr:= nil;
  res:= T2QSendASyncTrans(LPSTR(AnsiString(outStr)), ErrCode, ErrStr, ErrSize);
  if(res <> TRANS2QUIK_SUCCESS) then
  begin
    FTransID:= 0;
    FTransBusy:= false;
  end else
  begin
    Dt:= now();
    FMemo.Lines.Add(DateToStr(Dt) + ' ' + FormatDateTime('hh:mm:ss.zzz', Now()) +
                              ' --> Ордер ' + ExpData.SpotData.SecCode + ' отправлен.');
  end;
end;

Mas às vezes (acontece raramente) a ordem permanece no copo, portanto

Ele tem que ser removido e colocado um novo e assistir novamente - tudo isso leva muito tempo.

Além disso, pode fechar antes de você poder tirá-lo!

É por isso que o mais confiável é o COI, mas não está no local.

Em arbitragem, tudo é muito simples, se você comprou 100 unidades de uma perna, então você deve vender imediatamente 100 unidades de outra perna (a palavra-chave IMEDIATAMENTE).

Portanto, o desafio é fazer um contra-ataque o mais rápido possível ao preço e volume certos.

Adicionado por

No MT-5 tudo é muito mais simples, mais rápido e há opções

Por exemplo, não há problema para percorrer o deck SPOT e não tomar o melhor preço de uma vez, tendo calculado o volume total do preço selecionado + preços anteriores (melhores)

É por isso que eu estava preocupado com a velocidade de execução das ordens de negociação na Bolsa de Valores no MT-5.

Mas, mesmo assim, não há garantia de que o mercado mudará drasticamente, e se você levar o preço muito fundo, você pode sair da situação de arbitragem!

Em Quick, a velocidade de transação no SPOT foi de 240 a 490 ms, com um ping de 3-4 ms!

Em FORTS, no mesmo ping, a transação vai de 4,5 a 12 ms.

Infelizmente, devido à baixa liquidez na Forts, você tem que vender os futuros primeiro.

 
prostotrader #:

Eu já disse que é isso que faço em Quick

Mas às vezes (é raro, mas acontece) a ordem permanece no copo, portanto

Portanto, tenho que tirá-lo e colocar um novo e observá-lo novamente - tudo isso leva muito tempo.

Além disso, pode fechar antes de você poder tirá-lo!

É por isso que o mais confiável é o COI, mas não está no local.

Em arbitragem, tudo é muito simples, se você comprou 100 unidades de uma perna, então você deve vender imediatamente 100 unidades de outra perna (a palavra-chave IMEDIATAMENTE).

Portanto, o desafio é fazer um contra-ataque o mais rápido possível ao preço e volume certos.

Adicionado por

No MT-5 tudo é muito mais simples, mais rápido e há opções

Por exemplo, não há problema para percorrer o deck SPOT e não tomar o melhor preço de uma vez, tendo calculado o volume total do preço selecionado + preços anteriores (melhores)

É por isso que eu estava preocupado com a velocidade de execução das ordens de negociação na Bolsa de Valores no MT-5.

Mas, mesmo assim, não há garantia de que o mercado mudará drasticamente, e se você levar o preço muito fundo, você pode sair da situação de arbitragem!

Em Quick, a velocidade de transação no SPOT foi de 240 a 490 ms, com um ping de 3-4 ms!

Em FORTS, no mesmo ping, a transação vai de 4,5 a 12 ms.

Infelizmente, devido à baixa liquidez nos fortes, é preciso vender primeiro os futuros.


Entendi.
É real arbitrar uma ação contra um futuro no mt5-Quik? Ou eu preciso de algum componente "intelectual" para competir de alguma forma com meus companheiros mais velozes?

 
Replikant_mih #:


Entendi.
É realista arbitrar as ações contra os futuros a velocidades mt5-Quik? Ou eu preciso de algum componente "intelectual" para de alguma forma competir com os companheiros mais velozes?

Se apenas Classic, então Quick é suficientemente bom, e se, como eu quero tentar, scalping, então eu preciso pelo menos de MT-5 (2 terminais)

 
prostotrader #:

Se apenas Classic, então Quick é suficientemente bom, e se, como eu quero tentar, scalping, então eu preciso pelo menos de MT-5 (2 terminais)

2 porque o corretor não permite negociar ações e futuros em um terminal (como em Otkritie) ou porque tudo funciona em sua conexão de terminais e não haverá necessidade de mudar nada? Apenas mt5-mt5 em vez de mt5-Quik.

 
Replikant_mih #:

2 porque o corretor não permite que você negocie ações e futuros em um terminal (como Otkritie) ou porque tudo funciona em sua conexão terminal e, portanto, você não precisará refazer nada? Será apenas mt5-mt5 ao invés de mt5-Quik.

Não, agora é só quik, comecei a escrever mt5 - mt5

Adicionado por

Bem, aí está, escrito.

Agora, não está claro quando será possível testar...


 
prostotrader #:

Não, agora apenas Quick, eu comecei a escrever MT5 - MT5

Adicionado por

Bem, aí está, eu o escrevi.

Agora, não está claro quando será possível testá-lo...


Parabéns!

E como você planeja - para cada par de futuros spot sua EA ou uma EA para todos os pares?

 
Andrey Miguzov #:

Parabéns!

Como você planeja - para cada par de futuros spot um EA diferente ou um EA para todos os pares?

Meu próprio conjunto cliente-servidor para cada par

Por que a dor de cabeça de rastrear todos os futuros e SPOTs de uma EA?

O EA é essencialmente apenas um (cliente), o servidor é apenas um performer - uma muleta para comprar SPOTs :)

Adicionado

Consultor - o cliente envia (recebe) automaticamente para (do) servidor todos os dados necessários.

Não importa qual par, o conselheiro se ajusta automaticamente ao par de futurespot.

 
prostotrader #:

Por que a dor de cabeça de rastrear todos os futuros e SPOTs de uma EA.

Honestamente falando, eu me inspirei muito em suas capturas de tela de minha conta pessoal na Otkritie e ainda estou depurando o Expert Advisor para negociar ações futuras (não para escalar, mas para os clássicos no modo head-on).

A abordagem lógica é entrar no par com maior lucro antes da expiração (levando em conta a comissão e o número real de contratos).

Por conseguinte, devemos analisar todos os pares reais. Se um define um EA para cada par - eles trabalharão independentemente um do outro.

A dor de cabeça está realmente presente, especialmente quando se fecha posições em um par e se muda para outro. Além disso, acho que vai diminuir a velocidade quando houver muitos pares.


ZZZ: Dado o valor atual das taxas, num futuro próximo, a rentabilidade de tal estratégia será ainda maior, se o câmbio for aberto, é claro :)

Vejo pelo vídeo + você mesmo escreveu que você escreve para o escalpe. A média de entrada e saída - é a média do EMA (link) ou você a mede de alguma outra forma (se não for um segredo)?

 
Andrey Miguzov #:

A entrada e saída média é o EMA médio (link) ou você está calculando a média de alguma outra forma (se não for segredo)?

Não há segredo, eu apenas calculo a média toda vez que acesso à função

exp_data.midle_enter = exp_data.midle_enter * exp_data.m_ent_cnt;
  exp_data.m_ent_cnt++;
  exp_data.midle_enter = (exp_data.midle_enter + result)/exp_data.m_ent_cnt; 

exp_data.midle_exit = exp_data.midle_exit * exp_data.m_exit_cnt;
  exp_data.m_exit_cnt++;
  exp_data.midle_exit = (exp_data.midle_exit + result)/exp_data.m_exit_cnt;

Estes dados são necessários para entender o nível de preços deste par.

 
prostotrader #:

Não há segredo, eu apenas calculo a média toda vez que a função é chamada.

Preciso destes dados para entender o nível de preços de um determinado par.

Vejo, se em termos ondulatórios, éo SMA. Mas quanto mais longe estiver do início do cálculo, mais longe o valor médio se afastará do valor atual.

Grosso modo, este método de cálculo da média não "esquece" os valores antigos, porque exp_data.m_ent_cnt aumenta mais e mais a cada chamada e cada novo valor tem cada vez menos efeito sobre o resultado final.

De acordo com minhas observações, o valor médio muda durante o dia e é bastante sensível.

Em teoria, a EMA deveria ser mais adequada para o escalpe, o código será aproximadamente o seguinte:

double EMA_period = 100.0; //Период ЕМА для усреднения, тиков
double SmoothFactor = 2.0/(1.0+EMA_period);
 
if (EMA_ask<0) EMA_ask=ask; //первый тик
   else
  EMA_ask=ask*SmoothFactor+EMA_ask*(1.0-SmoothFactor);
Razão: