Desenvolvedores! Testa sequer o que cria? - página 6

 
Mikalas:

Pode dizer-me como controla se uma encomenda é modificada (sem resposta do servidor)?

A modificação de uma ordem desencadeia vários eventos e eu controlo todos estes eventos e também controlo o tempo em que a tarefa pendente está na lista pendente.

Tenho um robô dos fortes a fazer 500-600 transacções por sessão e nenhuma perda de eventos até agora, ou seja, todas as tarefas na lista de espera são executadas e não chegam à verificação do temporizador.

 
Yurich:

Por definição, um modelo de evento não pode ser completamente fiável; se um evento não ocorreu, isso não significa que não tenha acontecido.

Se alguns dos eventos chegam e outros não, então são necessários blocos duplicados de código para garantir o processamento dos resultados do comando, o que verificaria o estado comparando-o com o anterior, etc. Então a questão é, se o código de duplicação funciona de forma absolutamente fiável, porquê utilizar um código construído sobre eventos? Porquê usar dois códigos em vez de um que não é guiado por eventos? Para criar redundância?
 
Yurich:

A modificação de uma ordem desencadeia vários eventos e eu controlo todos estes eventos e também controlo o tempo que uma tarefa de lista de espera está na lista de espera.

O meu robô dos fortes faz 500-600 negócios por sessão e não houve até agora nenhum evento de perda, ou seja, todas as tarefas na lista de espera são executadas e não chegam à verificação do temporizador.

Isso é mais interessante... Então não houve um caso em que o evento esperado afinal não tenha acontecido?
 
C-4:
Isso é mais interessante... Então nunca houve um caso em que um evento esperado não tenha acontecido?
Quando disse que não houve perda de eventos, quis dizer que as tarefas que foram colocadas na lista de espera, esperavam pelo seu evento (pelo menos um da cadeia de eventos significativos). Talvez haja perdas de eventos que Michael diz, eu não mantenho um registo de eventos, mas eles não afectam o funcionamento geral do meu modelo de eventos.
 

a:Michael.

Em geral, até que a situação seja resolvida de alguma forma, é mais fácil para si fazer uma verificação adicional:

int dealsCount = 0;
///
/// С заданной периодичностью синхронизируем количество обработанных и поступивших трейдов.
///
void OnTimer(void)
{
   if(dealsCount != HistoryDealsTotal())
   {
      //Пришли новые трейды. их нужно обработать
      for(int i = dealsCount; i < HistoryDealsTotal(); i++)
      {
          ulong ticket = HistoryDealGetTicket(i);
          DealChecking(ticket);
      } 
   }
}

///
/// Поступило новое событие о поступлении трейда.
///
void  OnTradeTransaction(
      const MqlTradeTransaction&    trans,
      const MqlTradeRequest&        request,
      const MqlTradeResult&         result
   )
{
   if(trans.type == TRADE_TRANSACTION_DEAL_ADD)
     DealChecking(trans.deal);
   ...
}

///
/// Обработчик трейдов.
/// \param ticket - Уникальный идентификатор трейда, который надо обработать.
void DealChecking(int ticket)
{
   
   // Далее идет нужная обработка.
   ...
   //Трейд обработан - увеличиваем количество обработанных трейдов.
   dealsCount++;
}

Não há redundância nesta implementação porque existe apenas um único responsável efectivo pelo evento "novo comércio". Mas é chamado de duas formas diferentes: via temporizador e via evento OnTradeTransaction. Se a nova operação não tiver chamado o evento OnTradeTransaction por alguma razão, ocorrerá uma dessincronização do montante total e do montante de operações processadas. Todas as transacções não processadas neste caso ainda chegarão ao DealChecking handler através do for loop.

Este esquema pode ser restrito para qualquer evento, não apenas para TRADE_TRANSACTION_DEAL_ADDD.
 
Mikalas:

...

P/S E não há necessidade de "rasgar o texto" e toda a frase começa assim:

Conhecendo o tipo de negociação, pode decidir analisar o estado actual das ordens, posições e negociações na sua conta de negociação.

Pode sempre encontrar mais detalhes na Ajuda.

Concordo comYurich sobre tudo o resto. Provavelmente também deveria reconsiderar o seu esquema.

 

Caros colegas!

Muito obrigado a todos pelas vossas opiniões!

Apenas uma minhoca me roe: Para que serve então a PLATAFORMA?

 

Mikalas:

Então porque precisa de uma PLATAFORMA?

Essa foi provavelmente uma questão retórica :) Caso contrário, a resposta já foi dada neste tópico:

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Desenvolvedores! Testa sequer o que cria?

C-4, 2013.12.10 12:08

Não o recomendo. É muito mais fácil consertar este bug juntamente com o MQ do que construir um novo terminal para a praça por si próprio. Vai ficar atolado em intermináveis correcções de bugs e escrevendo "funcionalidade padrão". Falo a partir da minha própria experiência. Desenvolvi parcialmente um desses complexos auto-fabricados com base em Stock# - o resultado é outra "bicicleta" para tarefas específicas. É melhor lutar com o serviço de apoio, será mais fácil e mais barato.
Também não estou satisfeito com tudo no terminal, por exemplo, com a atitude de "último preço". Mas espero que quando uma massa crítica de corretores de bolsa se reunir, a MQ comece a ouvir as suas necessidades.
 
ok. qual é a verdadeira alternativa ao MT5?
 
Armen:
ok. qual é a verdadeira alternativa ao MT5?

Esta é exactamente a pergunta que precisa de fazer a si próprio antes de criar tais linhas. Antes da chegada do MT5, para negociar no FORTS, tinha de pelo menos escrever o seu próprio terminal comercial. Se não houver soluções prontas nesta área, à excepção do Quick, que dificilmente é aplicável ao comércio algorítmico (aqueles que uma vez escreveram um programa com mais de 1000 linhas no QPile compreenderão do que estou a falar). Existe um conjunto auxiliar de bibliotecas Stock#, mas não evoluiu para um terminal comercial completo "out of the box" (correr e negociar). Na verdade, levará até 6 meses para que um programador de média ou alta capacidade crie uma plataforma de negociação usando Stock#. O programador principiante será sobrepujado por este produto. Existem também terminais como Kofite, TSLab, WealthLab. Mas tem de compreender claramente que eles não são directamente apoiados pelos corretores, por isso tem de lidar com o Quick + a sua Super Plataforma de Negociação (com todos os problemas associados à transferência de dados através do DDE). E se quiser trabalhar através do protocolo PlazaII - por 3 000 rublos por mês, o corretor dar-lhe-á essa oportunidade.

No segmento burguês, as coisas não são melhores. Nem todos os corretores americanos fornecem uma plataforma de negociação com a possibilidade de algotrading. Nem todos os corretores americanos são possíveis de trabalhar com a Rússia. É bom se lhe derem um API. E mais uma vez estamos de volta a escrever a nossa própria bicicleta para esta API. Não só isso, mas as plataformas que fornecem são demasiado diferentes, orientadas para diferentes segmentos de mercado. Basta comparar o Wealth-Lab com o ThinkOrSwim. Sem normas, sem interface unificada.

Em geral, se o seu lema é "Eu só sonho com a paz" ou "Eu negoceio para testar novo software e escrever a próxima bicicleta" - então deve realmente procurar outra plataforma que não o MetaTrader5.