Erros, bugs, perguntas - página 623

 
MetaDriver:
Vai ter um despertar rude... :))

Provavelmente,

Li a essência do problema, não compreendo porque é que cada indicador deve ter um temporizador, e porque é que existem tantos indicadores,

se for possível obter as Licitações do instrumento requerido directamente no temporizador EA e colocá-las na montagem geral,

Se quiser usar um indicador, precisará de muitos indicadores, porque a resolução será boa.

é diferente com os espiões - eles não têm relógios e eventos para todos os instrumentos podem não acontecer durante muito tempo, ou podem começar a fazer tic-tac um após o outro.

Por exemplo, ao negociar onde há um Último preço, os dados da Oferta nem sempre estão lá, por isso verifique e escreva ou Bid ou Last.

 

MetaDriver:

Proponho um compromisso: apanhar carraças com espiões e enviá-las imediatamente ao Consultor Especialista principal com uma etiqueta de milissegundos (GetTickCount()). O Expert Advisor organiza-os de acordo com as suas etiquetas e corta em segundos blocos.

Não é muito simples, mas será preciso.

Não é uma má variante. Na minha opinião, é a única que vale a pena tomar como base.

Urain:

A propósito, ao negociar onde há um Último preço, os dados da Oferta nem sempre estão lá, por isso verifique e escreva ou Bid ou Last.

Bom esclarecimento, não me deparei com tal. Terá de ser tida em conta.
 

MetaDriver:

Предлагаю компромисс: ловишь тики шпионами и сразу отправляешь в головной эксперт, снабдив милисекундной меткой(GetTickCount()). Эксперт их упорядочивает в соответствии с метками и нарезает секундные блоки.

Не очень просто, зато с точностью будет порядок.

Interessante:

Não é uma má opção. Na minha opinião, o único que vale a pena tomar como base.

Bom esclarecimento, não me deparei com isto. Terá de ser tida em conta.

Pode não ser uma má variante, mas o mecanismo de envio de carraças está ausente no terminal. Tente pensar em 5-10 carrapatos/seg. em 16 pares. Mais uma vez - já desapareceu)).

E não precisa de tal precisão - 1seg é suficiente.

Graças a todos vós - o assunto está terminado.

 

O problema é muito desagradável devido à substituição de barras minúsculas por barras de prazos mais elevados num passado histórico distante, quando a história minuto a minuto ainda não estava disponível. A única solução que me vem à mente é a complexa conversão de barras falsas em barras reais, e não pode garantir a precisão. Não se trata tanto de complexidade como de dúvidas quanto à exactidão de tal conversão.

A tarefa inicial consiste em verificar a relevância dos fusos horários Fibonacci que estão a ser construídos. Se a zona estiver demasiado distante e a largura de trabalho de todas as suas subzonas (até 34 larguras de base por defeito) for tão estreita que a borda direita não atinge o momento presente, então não a construímos, caso contrário criamos um objecto no gráfico. Tentei resolver isto de duas formas semelhantes, uma das quais cito. A única diferença é que, na primeira forma, eu estava a dançar desde o início da história usando

   datetime firstDate=(datetime)SeriesInfoInteger(_Symbol,_Period,SERIES_FIRSTDATE);
E no segundo - pelo contrário (cito este método), a essência e os resultados são absolutamente os mesmos. Testado em NZD/USD.

Se tiver uma história falsa que termine numa data que não 2009, como eu tenho, reordene os dois Fusos Horários de Fibo para que um deles passe por essa data de ponta e o segundo já esteja completamente no lado direito da história, onde todas as barras são reais. Neste caso, não se esqueça de alterar os valores de startTime1, endTime1 e, se necessário, startTime2, endTime2 no guião; não se pode ajustar os preços - não é importante. Agora pode testá-lo... O resultado será triste: se o algoritmo de verificação permanecer inalterado para ambos os fusos horários, funcionará correctamente apenas para a zona que tem um pé antes da data de inclinação e outro pé depois dela, o algoritmo filtrará erradamente e impedir-nos-á de o construir. Note-se que ambas as zonas estão bastante próximas uma da outra e têm larguras semelhantes, e estas duas larguras estendem-se muito para o futuro e serão relevantes durante muito tempo, de facto nenhuma delas deve ser filtrada (comente as condições e veja que ambos os fusos horários são construídos).

void OnStart()
  {
   datetime startTime1=D'2009.07.08 18:00:00';
   datetime endTime1=D'2009.11.03 12:17:00';
   datetime startTime2=D'2009.06.30 08:00:00';
   datetime endTime2=D'2009.10.21 20:16:00';

   double startPrice1=0.61930;
   double endPrice1=0.70948;
   double startPrice2=0.65470;
   double endPrice2=0.76300;

   int FTZ1pos1,FTZ2pos1,bandwidth;
   datetime Arr[],time1;

   CopyTime(_Symbol,PERIOD_M1,0,1,Arr);
   time1=Arr[0];

   FTZ1pos1=CopyTime(_Symbol,PERIOD_M1,time1,startTime1,Arr);
   bandwidth=CopyTime(_Symbol,PERIOD_M1,endTime1,startTime1,Arr)*(34+2); // +2 - небольшой запас общей ширины
                                                                         // зоны на всякий случай

   if(FTZ1pos1<=bandwidth)
      ObjectCreate(0,"FTZ1",OBJ_FIBOTIMES,0,
                   startTime1,startPrice1,
                   endTime1,endPrice1
                  );


// ---
   FTZ2pos1=CopyTime(_Symbol,PERIOD_M1,time1,startTime2,Arr);
   bandwidth=CopyTime(_Symbol,PERIOD_M1,endTime2,startTime2,Arr)*(34+2); // +2 - небольшой запас общей ширины
                                                                         // зоны на всякий случай

   if(FTZ2pos1<=bandwidth)
      ObjectCreate(0,"FTZ2",OBJ_FIBOTIMES,0,
                   startTime2,startPrice2,
                   endTime2,endPrice2
                  );
  }

Resultado desejado:Deve haver dois fusos horários Fibo

Algures entre a primeira e a segunda linha de base 0 há um ponto de inclinação que separa as barras de minutos falsas das barras reais.

Se rejeitar cálculos no número de barras, e tudo é calculado com datas, então certamente não dará a precisão desejada, porque tem de subtrair fins-de-semana (+/- hora de fecho/abertura do mercado), feriados, etc., e muito menos barras em falta na ausência de carraças ao longo de um minuto e divergência em relação à linha do tempo.

O que aconselha como uma solução fiável?

 

Ficheiro de erro de carregamento no Expert Advisor. Encontrar 10 diferenças. O primeiro código refere-se ao guião, o segundo ao Expert Advisor, são idênticos Ctrl-C Ctrl-V. O código funciona no guião, não funciona no Expert Advisor.

#include <\\MyClass\RegulFind-v1-1.mqh>
#include <Trade\Trade.mqh>
int hMa,hRsi ;
double mMa[],mRsi[];                             
Kohonen  koh;
CTrade trade ;
void OnStart()
  {
   koh.LoadMap("KitMaRsi.csv") ;
   hMa=iMA(_Symbol,Period(),10,0,MODE_EMA,PRICE_CLOSE) ;
   if(hMa ==INVALID_HANDLE)
      Print("Ошибка загрузки машки====================== ",GetLastError());
   hRsi=iRSI(_Symbol,Period(),10,PRICE_CLOSE);
   if(hRsi ==INVALID_HANDLE)
      Print(" Ошибка загрузки РСИ ==========");   
   
  }
#include <\\MyClass\RegulFind-v1-1.mqh>
#include <Trade\Trade.mqh>
int hMa,hRsi ;
double mMa[],mRsi[];                             
Kohonen  koh;
CTrade trade ;
int OnInit()
  {
   koh.LoadMap("KitMaRsi.csv") ;
   hMa=iMA(_Symbol,Period(),10,0,MODE_EMA,PRICE_CLOSE) ;
   if(hMa ==INVALID_HANDLE)
      Print("Ошибка загрузки машки====================== ",GetLastError());
   hRsi=iRSI(_Symbol,Period(),10,PRICE_CLOSE);
   if(hRsi ==INVALID_HANDLE)
      Print(" Ошибка загрузки РСИ ==========");   
   return(0);
  }
 
ivandurak:

Ficheiro de erro de carregamento no Expert Advisor. Encontrar 10 diferenças. O primeiro código refere-se ao guião, o segundo ao Expert Advisor, são idênticos Ctrl-C Ctrl-V. O código funciona no guião, não funciona no Expert Advisor.

O provador tem uma caixa de areia de arquivo diferente. Se quiser trabalhar com um ficheiro *.csv no testador e de forma normal, coloque-o no directório comum e abra o ficheiro com o modificador FILE_COMMON


P.S. Para o colocar na pasta comum, deve escrever um ficheiro com o modificador
FILE_COMMON, ou encontrar algo como isto (uma variante para XP):

C:\Documents and Settings\Documents\Documents and Settings\Todos os utilizadores\Documentos de aplicação\MetaQuotes\Terminal\FilesCommon



 
x100intraday:

O que aconselha como uma solução fiável?

Voltar a MT4.

Contactei os criadores sobre o futuro deste problema, mas eles mantiveram-se em silêncio, por isso, pessoalmente, não tenho a certeza sobre o futuro.

 

A troca com as variáveis de carácter parece não funcionar.

Em vez de:

string type = "Buy";

switch(type)
{
case "Buy" : {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
case "Sell": {direction = ORDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
default: {return(lot_value);}
}

'tipo' - tipo de expressão de troca ilegal
Comprar' - a expressão constante não é integral

Tenho de o desenhar assim:

if(zShift == "Buy")  {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK);}
if(zShift == "Sell") {direction = ORDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID);}
if(zShift != "Buy" || zShift != "Sell") {return(lot_value);}

Não é tão claro e está torto.

Funciona bem em outras línguas.

Devo escrevê-lo de outra forma?

 
awkozlov:

O interruptor não parece funcionar com variáveis de carácter.


A documentação diz (ênfase acrescentada) - Switch operator:

Compara o valor de uma expressão com constantes em todas as variantes de casos e passa o controlo para o operador que corresponde ao valor da expressão. Cada variante de caso pode ser marcada com uma constante inteira , uma constante de carácter, ou uma expressão constante. Uma expressão constante pode não incluir variáveis ou chamadas de funções. A expressão do operador dointerruptor deve ser do tipo inteiro.

 
awkozlov:

Funciona em outras línguas...

O facto de funcionar em outras línguas é uma característica. O interruptor destinava-se originalmente apenas a tipos integrais. Não existe tal característica aqui.