Oscilador de equidade por MQL5 significa - página 6

 
joo:

É melhor escrever no ficheiro o menos frequentemente possível, por isso é melhor fazê-lo como uma matriz. Os valores não devem ser medidos com mais frequência do que uma vez por minuto, caso contrário, haverá problemas em exibi-los no gráfico (e é exageradamente intensivo em recursos). Ou seja, no final da corrida. Mas esta variante também é possível:

O algoritmo surge da seguinte forma:

1) Dirigir um perito no testador.

2) Medimos o valor do interesse.

3) Registou este valor no ficheiro.

4) Escrevemos de forma fiel a um ficheiro separado, o que significa que temos um novo valor.

5) Iniciar um loop infinito, a condição de saída é falsa no ficheiro da bandeira.

6) Num gráfico separado, o script lê o ficheiro com a bandeira, se houver um novo valor, desenha um risco no gráfico, escreve em falso no ficheiro.

Este é mais ou menos o aspecto visual do modo de teste no testador.

Espere um pouco, o concurso terá terminado, talvez sejam apresentadas soluções mais elegantes e bonitas.

joo, Espere, que outro valor é de interesse, se todos os valores são de interesse? :)

Penso que é assim:

1. No OnTick do Consultor Especialista, formamos um conjunto programático de estados de contagem,

2. no final dos testes, escrever este conjunto de programas como um todo num ficheiro (é melhor escrever cada parâmetro num ficheiro separado),

3. depois ir buscar a matriz unidimensional especificada no indicador OnInit

4. e copiá-lo para a matriz de indicadores no OnCalculated.

O único problema é que mesmo escrever a matriz continua a ser um problema por alguma razão (ver acima)

 
DV2010:

Espere, qual é o outro valor de interesse se eu estou interessado em todos os valores? :)

Não quero saber de todas elas.

DV2010:

Eu penso que é assim

1. formulemos um conjunto de programas de estados de contagem no OnTick do Expert Advisor,

2. no final dos testes, escrever este conjunto de programas como um todo num ficheiro (é melhor escrever cada parâmetro num ficheiro separado),

Pode fazer isso.

DV2010:

3. depois ir buscar a matriz unidimensional especificada no indicador OnInit

Então porquê em oninite? Só precisa de o fazer uma vez? Disse que quase tem de monitorizar os testes em tempo real.

DV2010:

4. e copiá-lo para a matriz de indicadores no OnCalculated.

O único problema é que mesmo escrever a matriz continua a ser um problema por alguma razão (ver acima)

O problema será que não é possível exibir os dados do ticky no gráfico. A não ser, claro, que recolha as carraças, então ....... De qualquer modo, já vos avisei - não guardem dados mais do que uma vez por minuto. Mas se quiser analisar, digamos, sem ligação a um instrumento comercial, pode também carregá-lo para um ficheiro excel.

 

joo, não! :)

Tudo o que preciso até agora é que o testador faça o seu trabalho e obtenha os osciladores das curvas dos indicadores de conta de que preciso sobre a história!

Diga-me, na sua opinião, porque é que o meu Conselheiro Especialista, cujo código citei acima e ligo a seguir, se recusa a registar dados?

Arquivos anexados:
 
DV2010:

Rosh

Não consigo compreender qual é exactamente a razão, mas ao contrário dos meus indicadores, quando se começa com os seus, recebe-se uma mensagem:

Agora fiz um Expert Advisor simples semelhante, baseado no vosso código, que deve escrever todos os valores de Equidade em ficheiro (alterei apenas a saída de todos os valores, incluindo zero bytes escritos, tornei as variáveis globais, e dividi a abertura e escrita do ficheiro em OnInit e OnTick), mas apesar da ausência de erro de escrita e o ficheiro ser criado, as entradas e o ficheiro estão vazios.

Há algo de errado?

FileClose(filename);
 
Rosh:

Não estragou nada, pois não?

Eu fiz, mas a diferença com corrigido ( FileClose(handle); ) é pouco sentida :)

Ainda não escreve! :) Ao mesmo tempo, mantém-se em silêncio como um partidário (a menos que se conte 0 bytes a ser escrito como uma "explicação").

 
DV2010:

Mexido, mas a diferença com o corrigido ( FileClose(handle); ) parece pouco :)

Ainda não escreve! :) Ao mesmo tempo, é silencioso como um partidário (a menos que se conte 0 bytes a ser escrito como "explicação").

Não sei o que está aí a fazer. Aqui está uma variante que funciona

//+------------------------------------------------------------------+
//|                                          Demo_File_Common_EA.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//--- input parameters
input string   filename="equity.txt";
int handle;
string common_folder;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
//---
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   FileClose(handle);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileSeek(handle,0,SEEK_END);
      uint written=FileWrite(handle,TimeToString(TimeCurrent()),AccountInfoDouble(ACCOUNT_EQUITY));
      if(written>0)
        {
         //PrintFormat("Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
        }
     }
   else
     {
      Print("Не удалось открыть на запись файл ",filename,".  Ошибка ",GetLastError());
     }

  }
//+------------------------------------------------------------------+
 
Rosh:

Não sei o que está aí a fazer. Aqui está uma opção que funciona

Óptimo! Assim, para escrever para um ficheiro, para além de FileWrite, também é necessário definir um ponteiro através de FileSeek.
Документация по MQL5: Файловые операции / FileWrite
Документация по MQL5: Файловые операции / FileWrite
  • www.mql5.com
Файловые операции / FileWrite - Документация по MQL5
 

... Sobre uma questão já levantada ontem.

Inseri-o no OnTick e no OnCalculated:

Print("ObjectsTotal =", ObjectsTotal(ChartID()));

mas depois de testar, apesar da presença de objectos relacionados com posições de abertura e fecho (setas e parâmetros de linhas no Terminal podem ser vistos em: Gráficos>Objectos>Objectos Lista), o valor de retorno é 0 por alguma razão.

Quem me poderá dizer por que razão isso acontece?

Pode ser que o testador não veja os objectos que são automaticamente criados por si mesmo?

 
DV2010:

Quem me pode dizer por que razão é este o caso?

O testador não vê de todo os objectos que cria automaticamente?

Os objectos gráficos que são criados durante os testes não têm nada a ver com os objectos que estão presentes no gráfico que é aberto após a conclusão dos testes. Isto significa que não há forma de alcançar as setas de entrada/saída que aparecerão no gráfico após a conclusão dos testes.
 
Rosh:
Os objectos gráficos criados durante os testes não estão de forma alguma relacionados com os objectos do gráfico que é aberto após os testes. Por outras palavras, não há forma de alcançar as setas de entrada/saída que aparecerão no gráfico após a conclusão dos testes.

Era exactamente disto que eu tinha medo!

Bem, então terei dedesenhar os meus própriosobjectos, embora tudo o que eu precise seja apenas de mudar a cor das linhas dependendo do sinal de resultado (lucro ou perda) das posições correspondentes, porque do ponto de vista da análise mais rápida da distribuição de negócios lucrativos e perdedores, a cor do resultado é muito mais importante do que a cor da direcção. Mais importante - quanto mais não seja porque se pode ver a direcção para cima ou para baixo no gráfico (tanto pela inclinação da linha como pela cor das setas), ao passo que para compreender os lucros ou perdas de um comércio utilizando a abordagem padrão é necessário comparar sempre o tipo de posição com a direcção do mercado).

E é bom se houver apenas algumas posições no testador. Mas e se houver centenas ou milhares? Na abordagem padrão seria impossível ver a distribuição de posições perdedoras e rentáveis neste caso, enquanto que se os negócios deficitários fossem mostrados com linhas vermelhas e rentáveis - com linhas azuis, a distribuição pode muito provavelmente ser vista mesmo na escala mais pequena.

Porque é que isto é importante? Porque um sistema de negociação pode comportar-se de forma diferente em diferentes períodos de tempo, e para identificar os seus pontos mais fracos e trabalhar através desses pontos, é necessário ter uma ideia da dinâmica de preços com a qual essas séries de negociações perdidas estão associadas.

Muitos pedidos dos comerciantes são de natureza privada e têm tanto vantagens como desvantagens, ou seja, da categoria "em maior ou menor grau". A possibilidade de estabelecer o tipo de linhas de negócio na interface do MetaTrader, na minha opinião, tornaria a análise da história muito mais confortável para muitos comerciantes, enquanto do ponto de vista programático, penso que é fácil de fazer e não há desvantagens. Por outras palavras, precisamos de uma alternativa à variante tradicional de processamento por tipo de posição, variante de processamento por resultados de negócios. Então talvez possa acrescentar ou, pelo menos, pô-lo à votação entre os participantes do fórum?

Pode haver duas maneiras de o implementar:

1. A ligação do desenho do objecto com a EA OnTcik, para que estes objectos possam ser mudados programmaticamente.

2. Adicionar definição no nível da interface da janela.

Os osciladores dos estados de conta resolverão parcialmente este problema, mas apenas parcialmente, porque a representação mais conveniente da eficácia dos negócios - é a sua representação visual, mais próxima da dinâmica dos preços.

Falando em geral, na minha opinião, o testador e a visualização da eficiência do negócio são o ponto mais fraco da actual versão 5. Até agora, temos aqui apenas o legado das versões anteriores na forma do Quadro e Resultados, mas ambas nos permitem julgar apenas sobre a eficácia do Expert Advisor em geral, e a impressão pode ser enganosa (aconteceu tantas vezes que o gráfico de Equidade global do Expert Advisor está em constante ascensão, enquanto que um exame mais atento revelará maiores drawdowns relativos e outras "surpresas").