Características da linguagem mql4, sutilezas e técnicas - página 19

 

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

Bibliotecas: Especialista

fxsaber, 2019.06.04 16:40

// MT4-советник показывает, в каком режиме Long/Short был запущен.

#include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003

int GetLongShortFlag( const int Chart_ID = 0 )
{
  MqlParam Params[];
  string Names[];
  
  const int Res = EXPERT::Parameters(Chart_ID, Params, Names);
  
  return(((Res & 3) << 1) + (Res & 1));
}

string LongShortToString( const int Chart_ID = 0 )
{
  const int Flag = GetLongShortFlag(Chart_ID);
  string Str = NULL;
  
  if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY) && (bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Long & Short";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY))
    Str = "Only Long";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Only Short";
    
  return(Str);
}

int OnInit()
{
  Alert(LongShortToString());
  
  return(INIT_FAILED);
}


Alternativa

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Qualquer pergunta nova sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos

fxsaber, 2019.06.04 19:40

string LongShortToString2()
{
  string Str = "Long & Short";

  if (OrderSend(_Symbol, OP_BUY, 1, 0, 0, 0, 0) && (GetLastError() == ERR_LONGS_NOT_ALLOWED))
    Str = "Only Short";
  else if (OrderSend(_Symbol, OP_SELL, 1, 0, 0, 0, 0) && (GetLastError() == ERR_SHORTS_NOT_ALLOWED))
    Str = "Only Long";
    
  return(Str);
}


Nem sempre vai funcionar, mas na maioria das vezes é suficiente.

 
Comentários não relacionados a este tópico foram movidos para"Quaisquer perguntas de novatos sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos".
 

A tarefa era salvar todos os carrapatos (sem perdas) da Market Watch com o menor esforço.

Eu escrevi um Loader-script, que abre um gráfico para cada símbolo e executa o indicador-coletor nele.

O truque todo é executar o indicador através do carregamento de tal arquivo tpl (dado na íntegra)

<chart>
<window>
<indicator>
name=Custom Indicator
<expert>
name=HistoryTicks_OnlySave
</expert>
</indicator>
</window>
</chart>

É bom porque não há barras. Portanto, nenhum recurso é gasto com eles.

Ao final do dia, há 60 gráficos. A mesma quantidade de indicadores. ~500Kb de carrapatos por minuto são escritos.

RAM ~450Mb, CPU ~3-8% (8 HyperThreading).


Se você quiser fazer algo como isto, recomendo vivamente que você execute o Expert Advisor, que acompanha a freqüência com que os dados mudam na Market Watch. Meu EA não se atualiza por mais de três segundos e depois é forçado a fazer um novo login. O problema é que o MT4 (e o MT5 também), em caso de problemas na rede, pode voltar a se conectar após 10-15 segundos, e às vezes até um minuto. Somente então o próprio re-login é que faz o login. A fim de não perder carrapatos nesses 10-15 segundos ou mesmo um minuto, recomendo que se faça a tarefa de reconexão. O mesmo se aplica aos terminais com TCs de combate.

 
fxsaber:

O desafio é salvar todos os carrapatos (sem perdas) da Market Watch com o mínimo de esforço.

É sem perdas? Este mito já foi dissipado.

 
Andrey Khatimlianskii:

Sem perdas, então? Acho que esse mito já foi dissipado.

Eu não me lembro exatamente como me convenci disso. Eu sei que comparei o histórico coletado no MT4 com o do corretor. Consegui uma correspondência de 100%.

Eu uso a solução HistoryTicks da QB. Quando comparo o resultado do testador virtual em ticks coletados e o resultado do testador MT5 em ticks baixados - 100% de correspondência.

Os problemas só podem se dever à conectividade. Conselheiros especializados, é claro, senhorita. Os indicadores não o fazem.

 
fxsaber:

Eu não me lembro exatamente como me convenci disso. Eu sei que comparei o histórico coletado no MT4 com o do corretor. Houve uma correspondência de 100%.

Eu uso a solução HistoryTicks da QB. Quando comparo o resultado do testador virtual em ticks coletados e o resultado do testador MT5 em ticks baixados - 100% de correspondência.

Os problemas só podem se dever à conectividade. Conselheiros especializados, é claro, senhorita. Os indicadores não o fazem.

Ahem... Eu estava falando de sua exposição:

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Erros, bugs, perguntas

fxsaber, 2018.02.26 09:05

Se um pacote de três carrapatos chegar, o evento Calculate será chamado três vezes, mas SymbolInfoTick retornará o último carrapato em cada uma dessas três chamadas. Isto é, a chamada coleta de carrapatos sem passar por indicadores é questionável, para dizer de forma branda.


Alguma coisa mudou?

 
Andrey Khatimlianskii:

Ahem... Eu estava falando de sua exposição:

Alguma coisa mudou?

Quando houve uma manipulação com o CopyTicks, houve uma comparação dos resultados da coleta de carrapatos e do CopyTicks.

Eu não me lembro exatamente, mas acho que houve uma correspondência.

Temos que usar o CustomTicksAdd para adicionar um lote de carrapatos e olhar para ele. Mas é o MT5.


Para o MT4 pode ser verificado desta forma. Dois carrapatos vizinhos registrados devem ser sempre diferentes. E os volumes das barras do servidor devem coincidir com os das barras dos carrapatos coletados.

Em 2018 eu devia saber algo inteligente. Não consigo me lembrar agora.

 
fxsaber:

Eu não me lembro exatamente como me convenci disso. Eu sei que comparei o histórico coletado no MT4 com o do corretor. Houve uma correspondência de 100%.

Eu uso a solução HistoryTicks da QB. Quando comparo o resultado do testador virtual em ticks coletados e o resultado do testador MT5 em ticks baixados - 100% de correspondência.

Os problemas só podem se dever à conectividade. Conselheiros especializados, é claro, senhorita. Os indicadores não o fazem.

Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos

Dê um assessor para coletar o histórico do tick

zenz, 2018.03.07 11:10

Eu fiz a comparação em setembro. O arquivo Alpari tem uma semana de atraso de publicação, portanto, se eu fizer a comparação atual, não a obterei antes da próxima semana (e não vejo muito sentido - já a descobri por mim mesmo).

Portanto, aqui estão dois screenshots a partir de 22.09.2017. O terminal estava rodando em um computador vazio, com o único indicador que escrevia o registro. Sistema operacional XP SP3, versão terminal MT4 build 1090. Conta Alpari Pro-ECN Real.



À esquerda está a foto do arquivo Alpari, e à direita estão os carrapatos registrados pelo indicador.

Aqui você pode notar que os tiques antes de 17 segundos e depois (16 e 18 segundos) coincidem completamente, ou seja, o caso, neste caso, não está em dessincronização de tempo. Repito que não é apenas dentro de um segundo que os carrapatos saltam - ou seja, não apenas os rápidos - mas os "lentos" também são engolidos. Não encontrei nenhuma sistemática nisto.

Explicação: à direita do ponto após os segundos no arquivo da Alpari não estão milhas ou microssegundos, mas o número de tick - é feito dessa forma por alguma razão.

Aqui está um link para essa linha:https://www.mql5.com/ru/forum/229889/page4#comment_6741502 Não creio que nada tenha mudado no MT4 desde então, embora eu não tenha verificado mais, mas presumo que tanto os indicadores como os EAs no MT4 falham ticks.

Дайте советник для сбора тиковой истории
Дайте советник для сбора тиковой истории
  • 2018.03.07
  • www.mql5.com
Дайте готовый советник для записи тиков в csv файл...
 
zenz:

Aqui está o link para essa linha:https://www.mql5.com/ru/forum/229889/page4#comment_6741502. Não creio que nada tenha mudado no MT4 desde então, embora eu não tenha verificado mais, mas presumo que tanto os indicadores como os EAs no MT4 falham ticks.

Não há certeza de que, do lado do servidor comercial, estes carrapatos "falhados" foram enviados.

 
fxsaber:

Não há certeza de que no lado do servidor comercial estes carrapatos "perdidos" foram enviados.

Eu também estava pensando nisso, eu concordo. Eu estava fazendo uma pesquisa na época e descobri que as discrepâncias não eram isoladas, mas recorrentes - então eu as deixei ir.