Perguntas de um "boneco" - página 57

 
Lizar:

Vou dar uma vista de olhos à versão publicada no artigo. Até agora, alguns peritos em espionagem, funcionam muito bem.

MetaDriver:

Não creio que esta tecnologia vá funcionar no testador.

Funciona.

É simplesmente fantástico que funcione no testador. Ainda não fui capaz de a implementar. Mas isto é provavelmente devido à falta de experiência. Por agora, já me acomodei a um temporizador, mas é um temporizador longo.

Ao tentar anexar o Expert Advisor ao gráfico, recebo a seguinte mensagem:

Não compreendo o que o USDJPY tem a ver com isto. Até comentei a tomada de controlo da inicialização no código e esta mensagem continua a sair.

 
Lizar:

Funciona.

Konstantin, entendo correctamente que o código executável da EA, que normalmente reside em OnTick() ou OnTimer(), precisa de ser colocado em OnChartEvent() para fazer o seu esquema funcionar em modo multi-divisas, tanto em tempo real como em testador.
 
tol64:

É simplesmente fantástico que funcione no testador. Ainda não fui capaz de a implementar. Mas isto é provavelmente devido à falta de experiência. Parei no temporizador por agora, mas é demasiado tempo.

Ao tentar anexar o Expert Advisor ao gráfico, recebo uma tal mensagem:

Não compreendo o que o USDJPY tem a ver com isto. Até comentei o facto de o código ter sido inicializado e esta mensagem continua a ser divulgada.

Ainda não o analisei.

Tol64:
Konstantin, entendo correctamente que o código executável da EA, que normalmente reside em OnTick() ou OnTimer(), precisa de ser colocado em OnChartEvent() para fazer o seu esquema funcionar em modo multi-divisas, tanto em tempo real como em testador.

Sim.

 
tol64:

É simplesmente fantástico que funcione no testador. Ainda não fui capaz de a implementar. Mas isso deve-se à falta de experiência, suponho eu. Parei no temporizador por agora, mas é demasiado tempo.

Ao tentar anexar o Expert Advisor ao gráfico, recebo uma tal mensagem:

Não compreendo o que o USDJPY tem a ver com isto. Até comentei o facto de o código ter sido inicializado e a mensagem ainda sair.

Já dei uma vista de olhos. O Expert Advisor está a trabalhar. Houve apenas uma mensagem de erro.

O que lhe estava a dar era uma mensagem de que o símbolo não tinha sido seleccionado na janela MarketWatch. Ou definir os símbolos com que o Expert Advisor trabalha para a janela MarketWatch, ou comentar as chamadas de spyros sobre símbolos relevantes no OnInit().

Estou a anexar a versão modificada do exSpy Control Panel MCM.mq5.

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
Arquivos anexados:
 
Lizar:

Já dei uma vista de olhos. O perito está a trabalhar. Houve apenas uma gralha na mensagem de erro.

O que lhe deu foi uma mensagem de que o símbolo não foi seleccionado na janela do MarketWatch. Ou definir os símbolos com os quais o consultor especializado trabalha para a janela MarketWatch, ou comentar as chamadas dos spyros sobre os símbolos apropriados no OnInit().

Anexei a versão modificada do exSpy Control Panel MCM.mq5.

Eu até me ri de mim mesmo pela minha falta de atenção)))) USDJPY estava na janela do Market Watch. Não havia outro símbolo e as impressões tinham apenas a mesma mensagem. )))

Obrigado.

 
tol64:
Konstantin, entendo correctamente que o código executável do Expert Advisor, que normalmente se encontra em OnTick() ou OnTimer(), deve ser colocado em OnChartEvent() para fazer o seu esquema funcionar em modo de multi-moeda, tanto em tempo real como em testador.

É melhor implementar todas as funcionalidades necessárias sob a forma de procedimentos e funções separadas (recomendo estas últimas), e depois chamá-lo de qualquer lugar no Expert Advisor.

Se utilizar OOP, todas as funcionalidades necessárias podem ser implementadas como um conjunto de vários métodos da classe principal (geralmente é descendente da classe Expert).

 
Interesting:

É melhor implementar todas as funcionalidades necessárias como procedimentos e funções separadas (recomendo estas últimas), e depois chamá-lo de qualquer lugar no Expert Advisor.

Se utilizar OOP, pode implementar todas as funcionalidades necessárias como um conjunto de vários métodos da classe principal (geralmente é descendente da classe Expert Advisor).

Neste momento, todas as funcionalidades estão quase implementadas desta forma. Quase. Isto é, todo o código é algumas das funções que contêm os cálculos básicos. Ainda não dominei completamente o OOP, mas já consigo ver o lucro da sua utilização. O código está a crescer de dia para dia e em breve será muito inconveniente utilizá-lo sem o OOP.

Criei um tópico separado onde vos dei os resultados de vários métodos de teste com várias moedas:Resultados de Teste de Perito Multidivisas. Há ainda muitas coisas sobre este assunto que me continuam a ser pouco claras.

 

Porque é que as minhas citações não estão a ser carregadas? Por exemplo, no EURUSD, eles só carregam até Agosto desse ano. E é tudo. Eles não querem carregá-los mais. Há mais algum sítio onde eu possa encontrar ficheiros com citações?

Estabelecio número de barras como ilimitado. Actualizei-o várias vezes. Carreguei várias vezes em HOME. Continua a não funcionar.

 

E onde está a "lista completa anunciada" de todos os ficheiros MT5 e os seus detalhes.

Acabei de sair do baobá hoje, desculpe.

 

Um indicador fractal multitemporal.

A essência do indicador é mostrar os fractais de um período de tempo (ou vários ao mesmo tempo) sobre outro.

Artigo original: https://www.mql5.com/ru/code/7304, código indicador em MQL4

Primeiro tentei copiar e colar a partir de .mq4-versão com algumas micro correcções para .mq5 (nem sequer cito este código - o problema ocorreu quando descobri uma manipulação descuidada de arrays como High[shift+i] no interior em código fonte MQL4.

bool Fractal (string F,int Per, int shift) {...}

Tentei reescrevê-lo em MQL5 (sem visibilidade por defeito de tais matrizes fora da OnCalculate).

Depois tentei reescrevê-lo para MQL5 usando várias pegas iFractals com diferentes parâmetros PERÍODO_.... Como resultado, os fractais desfizeram-se, embora por vezes apenas uma série de setas fractais na TF que lhe corresponde consiga aterrar adequadamente. O que é notável, quando volto ao mesmo período de tempo no terminal de alguns outros períodos de tempo diferentes, os fractais aparecem de forma diferente, o que sugere o seguinte: os dados no terminal deste indicador desconhecido vagueiam de forma incompreensível, mas sempre pensei que a mesma imagem errónea deveria repetir-se de forma estável. Claro que a segunda variante nem sequer contémbool Fractal(string F,int Per, int shift) {...}, que quero dirigir aos criadores experientes de indicadores.

Eis o que consegui desenhar:

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   8

#property indicator_label1  "FractalUp1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_width1  2

#property indicator_label2  "FractalDw1"
#property indicator_type2   DRAW_ARROW
#property indicator_color2 clrRed
#property indicator_width2  2

#property indicator_label3  "FractalUp2"
#property indicator_type3   DRAW_ARROW
#property indicator_color3 clrBlue
#property indicator_width3  2

#property indicator_label4  "FractalDw2"
#property indicator_type4   DRAW_ARROW
#property indicator_color4 clrBlue
#property indicator_width4  2

#property indicator_label5  "FractalUp3"
#property indicator_type5   DRAW_ARROW
#property indicator_color5 clrGold
#property indicator_width5  2

#property indicator_label6  "FractalDw3"
#property indicator_type6   DRAW_ARROW
#property indicator_color6 clrGold
#property indicator_width6  2

#property indicator_label7  "FractalUp4"
#property indicator_type7   DRAW_ARROW
#property indicator_color7 clrSienna
#property indicator_width7  2

#property indicator_label8  "FractalDw4"
#property indicator_type8   DRAW_ARROW
#property indicator_color8 clrSienna
#property indicator_width8  2

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];

int ArrowShift=-10;

int handle1;
int handle2;
int handle3;
int handle4;

int OnInit()
  {
//   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer1,EMPTY_VALUE);

   SetIndexBuffer(1,ExtMapBuffer2,INDICATOR_DATA);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer2,EMPTY_VALUE);

//---
   SetIndexBuffer(2,ExtMapBuffer3,INDICATOR_DATA);
   PlotIndexSetInteger(2,PLOT_ARROW,217);
   PlotIndexSetInteger(2,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer3,EMPTY_VALUE);

   SetIndexBuffer(3,ExtMapBuffer4,INDICATOR_DATA);
   PlotIndexSetInteger(3,PLOT_ARROW,218);
   PlotIndexSetInteger(3,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer4,EMPTY_VALUE);

//---
   SetIndexBuffer(4,ExtMapBuffer5,INDICATOR_DATA);
   PlotIndexSetInteger(4,PLOT_ARROW,217);
   PlotIndexSetInteger(4,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer5,EMPTY_VALUE);

   SetIndexBuffer(5,ExtMapBuffer6,INDICATOR_DATA);
   PlotIndexSetInteger(5,PLOT_ARROW,218);
   PlotIndexSetInteger(5,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer6,EMPTY_VALUE);

//---
   SetIndexBuffer(6,ExtMapBuffer7,INDICATOR_DATA);
   PlotIndexSetInteger(6,PLOT_ARROW,217);
   PlotIndexSetInteger(6,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer7,EMPTY_VALUE);

   SetIndexBuffer(7,ExtMapBuffer8,INDICATOR_DATA);
   PlotIndexSetInteger(7,PLOT_ARROW,218);
   PlotIndexSetInteger(7,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer8,EMPTY_VALUE);

   handle1=iFractals(_Symbol, PERIOD_M15);
   handle2=iFractals(_Symbol, PERIOD_H1);
   handle3=iFractals(_Symbol, PERIOD_H4);
   handle4=iFractals(_Symbol, PERIOD_D1);

   return(0);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int B1 = BarsCalculated(handle1);
   int B2 = BarsCalculated(handle2);
   int B3 = BarsCalculated(handle3);
   int B4 = BarsCalculated(handle4);

   CopyBuffer(handle1,0,0,B1,ExtMapBuffer1);
   CopyBuffer(handle1,1,0,B1,ExtMapBuffer2);
   CopyBuffer(handle2,2,0,B2,ExtMapBuffer3);
   CopyBuffer(handle2,3,0,B2,ExtMapBuffer4);
   CopyBuffer(handle3,4,0,B3,ExtMapBuffer5);
   CopyBuffer(handle3,5,0,B3,ExtMapBuffer6);
   CopyBuffer(handle4,6,0,B4,ExtMapBuffer7);
   CopyBuffer(handle4,7,0,B4,ExtMapBuffer8);

   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   return;
  }
 

Obviamente, faltam-lhe algumas verificações condicionais dentro da OnCalculate bem como em função externa do tipo bool ou simplesmente não utilizo correctamente o que já tenho no meu código. Além disso, talvez seja necessário inicializar correctamente as matrizes no local certo e definir como séries temporais?