Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1231

 

Estou a tentar fazer uma entrada simples. Como eu queria - se o preço aberto for inferior ao preço fechado pelo número de pontos (no bar anterior), então compre no início de um novo bar, tendo em conta o lucro e o stop loss. Mas algo parece estar a funcionar de uma forma diferente do que eu queria. Ajude-me a compreender


   MqlRates rt[1];

   if(CopyRates(_Symbol,_Period,0,1,rt)!=1)
     {
      Print("CopyRates of ",_Symbol," failed, no history");
      return;
     }
   
   ENUM_ORDER_TYPE signal=WRONG_VALUE;

      if(rt[1].open - rt[1].close >= padenie) 
	 {
         signal=ORDER_TYPE_BUY;
         printf(rt[1].open+"____"+rt[1].close);
         }
         
      if(signal !=WRONG_VALUE && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100)
         ExtTrade.PositionOpen(_Symbol,signal,1,SYMBOL_ASK,SymbolInfoDouble(_Symbol,SYMBOL_BID)-sl,SymbolInfoDouble(_Symbol,SYMBOL_ASK)+tp);
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Технические индикаторы требуют для своих расчетов указания значений цен и/или значений объемов, на которых они будут считаться. Существуют 7 предопределенных идентификаторов перечисления ENUM_APPLIED_PRICE, для указания нужной ценовой базы расчетов. Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается...
 
BorisD:

Estou a tentar fazer uma entrada simples. Como eu queria - se o preço aberto for inferior ao preço fechado pelo número de pontos (no bar anterior), então compre no início de um novo bar, tendo em conta o lucro e o stop loss. Mas algo parece estar a funcionar de uma forma diferente do que eu queria. Por favor ajude-me a compreender


Erro 1: Está a copiar UM item. Por conseguinte, o índice do item será [0].

Abrir 100, Fechar 105 - barra de touro. Aberto - Fechado = 100 - 105 = - 5. O '-5' será sempre inferior ao seu valor definido, pois o resultado é um número negativo.

Abrir 110, Fechar 103 - barra em baixa. Aberto - Fechado = 110 - 103 = 7. '7' é um número positivo e este já funcionará correctamente.


Para resumir: corrigir a referência ao índice (em vez de [1], devemos referir-nos ao índice [0]. Antes de calcular, considerar o tipo de vela: se está em alta ou em baixa.

 

Uma continuação da questão das construções DRAW_HISTOGRAM2.

Exemplo:

// Индикатор Проба DRAW_HISTOGRAM2.mq5
//+------------------------------------------------------------------+
#property indicator_chart_window                   
#property indicator_buffers   20                    
#property indicator_plots     20                  

#property indicator_color1    clrOrange                
#property indicator_color2    clrOrange               
#property indicator_color3    clrLimeGreen        
#property indicator_color4    clrLimeGreen        

#property indicator_type5     DRAW_HISTOGRAM2
#property indicator_color5    clrOrange               
#property indicator_type6     DRAW_HISTOGRAM2
#property indicator_color6    clrLimeGreen        

//#property indicator_color9    clrRed                

double
   Line_High_Up[], Line_High_Dn[], Hist_High_Up[], Hist_High_Dn[],
   Line_Low_Up[],  Line_Low_Dn[],  Hist_Low_Up[],  Hist_Low_Dn[],  Line_Red[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit() 
   { 
   SetIndexBuffer     (0, Line_High_Up,      INDICATOR_DATA); 
   PlotIndexSetInteger(0, PLOT_DRAW_TYPE,    DRAW_LINE);      
   SetIndexBuffer     (1, Line_High_Dn,      INDICATOR_DATA); 
   PlotIndexSetInteger(1, PLOT_DRAW_TYPE,    DRAW_LINE);      

   SetIndexBuffer     (2, Line_Low_Up,       INDICATOR_DATA);
   PlotIndexSetInteger(2, PLOT_DRAW_TYPE,    DRAW_LINE);     
   SetIndexBuffer     (3, Line_Low_Dn,       INDICATOR_DATA);
   PlotIndexSetInteger(3, PLOT_DRAW_TYPE,    DRAW_LINE);     

   SetIndexBuffer     (4, Hist_High_Up,      INDICATOR_DATA); 
   SetIndexBuffer     (5, Hist_High_Dn,      INDICATOR_DATA);

   SetIndexBuffer     (6, Hist_Low_Up,       INDICATOR_DATA);
   SetIndexBuffer     (7, Hist_Low_Dn,       INDICATOR_DATA);

   //SetIndexBuffer     (8, Line_Red,          INDICATOR_DATA);
   //PlotIndexSetInteger(8, PLOT_DRAW_TYPE,    DRAW_LINE);     
   }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 i;
   for(i=prev_calculated; i<=rates_total-1; i++)      
      {
      Line_High_Up[i] = high[i] + 50*_Point;
      Line_High_Dn[i] = high[i] + 30*_Point;
      Line_Low_Up[i]  = low[i]  - 30*_Point;
      Line_Low_Dn[i]  = low[i]  - 50*_Point;

      Hist_High_Up[i] = Line_High_Up[i];
      Hist_High_Dn[i] = Line_High_Dn[i];
      Hist_Low_Up[i]  = Line_Low_Up[i];
      Hist_Low_Dn[i]  = Line_Low_Dn[i];
      
      //Line_Red[i]     = low[i]  - 70*_Point;
      }
   return(i-1);
   }           
//+------------------------------------------------------------------+

No indicador apresentado foi possível construir ambos os histogramas. Uma peculiaridade inesperada foi a seguinte:

Para as linhas normais nas entradas #indicador de propriedade_colorn, # indicador de propriedade_typen etc. o valor de n é 1 a mais do que o índice tampão.
Além disso, este requisito mantém-se mesmo que os índices tampão não sejam especificados em fila, e que haja espaço livre entre os adjacentes.
Por exemplo, se forem utilizados os índices 0, 1, 2, 3, 8, todas as cinco linhas serão exibidas.

Um requisito diferente é para construções do tipo DRAW_HISTOGRAM2, nomeadamente
Se os histogramas forem especificados numa linha, as entradas #indicador de propriedade_colorn, #indicador de propriedade_typen etc.
n valor é calculado a partir de uma contagem e não a partir de um índice tampão. No exemplo, são especificados os índices 5 e 6, embora logicamente 5 e 7 sejam esperados.

Todo este disparate torna impossível compreender qual deve ser o valor de n para a linha regular (vermelha) seguindo os dois histogramas de todo.
Neste exemplo o valor de n=9 é especificado, mas não funciona, por isso todas as linhas relacionadas com o buffer 8 são comentadas. Também não funcionou para outros valores de n.

Conclusão: todos os histogramas devem ser especificados numa fila no final da lista de tampão. Além disso, os seus valores devem ser calculados apenas numa fila por contagem quantitativa (apesar dos seus índices tampão).
É impossível compreender isto, mas é possível viver com isto.

A propósito: nenhum efeito da ordem de INDICATOR_CALCULATIONS e INDICATOR_DATA buffers foi detectado.

Obrigado a Vladimir Karputov e Artem Trishkin pela sua participação na resolução da questão.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

Uma continuação da questão das construções DRAW_HISTOGRAM2.

Exemplo:

No indicador apresentado foi possível construir ambos os histogramas. Uma peculiaridade inesperada foi a seguinte:

Para as linhas normais nas entradas #indicador de propriedade_colorn, # indicador de propriedade_typen etc. o valor de n é 1 a mais do que o índice tampão.
Além disso, este requisito mantém-se mesmo que os índices tampão não sejam especificados em fila, e que haja espaço livre entre os adjacentes.
Por exemplo, se forem utilizados os índices 0, 1, 2, 3, 8, todas as cinco linhas serão exibidas.

Um requisito diferente é para construções do tipo DRAW_HISTOGRAM2, nomeadamente:
Se os histogramas forem especificados numa linha, as entradas #indicador de propriedade_colorn, #indicador de propriedade_typen etc.
n valor é calculado a partir de uma contagem e não a partir de um índice tampão. No exemplo, são especificados os índices 5 e 6, embora logicamente 5 e 7 sejam esperados.

Todo este disparate torna impossível compreender qual deve ser o índice para a linha regular (vermelha) seguindo os dois histogramas.
Neste exemplo o valor n=9 é especificado, mas não funciona, pelo que todas as linhas relacionadas com o buffer 8 são comentadas. Também não funcionou para outros valores de n.

Conclusão: todos os histogramas devem ser especificados numa fila no final da lista de tampão. Além disso, os seus valores devem ser calculados apenas numa fila por contagem quantitativa (apesar dos seus índices tampão).
É impossível compreender isto, mas é possível viver com isto.

A propósito: nenhum efeito da ordem de INDICATOR_CALCULATIONS e INDICATOR_DATA buffers foi detectado.

Obrigado a Vladimir Karputov e Artem Trishkin pela sua participação na solução do problema.

Seja bem-vindo. Mas o problema não foi resolvido.

Não há dependência da ordem dos diferentes tipos de tampão nos indicadores. Apenas os calculados devem ser posteriores aos que estão a ser desenhados.

 
Artyom Trishkin:

De nada. Mas ainda não resolveu o problema.

Os indicadores não dependem da ordem dos diferentes tipos de tampão. Apenas os calculados têm de ser depois dos que estão a ser desenhados.

Sem muita certeza, mas continuo a acreditar que ambas estas afirmações estão erradas.

Quanto a "nenhuma dependência". No último exemplo, não consegui mapear o 8º tampão. Qual deve ser a ordem... Talvez o consiga fazer?

Sobre "calculado ... após sorteio". O meu indicador utiliza mais de 200 amortecedores, os primeiros 100 dos quais são amortecedores calculados.
No meu caso, são todas linhas simples, portanto n para #propriedade é calculado a partir do valor do índice tampão: n=b+1. E linhas simples são afixadas. A confusão começa com o aparecimento dos histogramas.

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
При создании пользовательского индикатора можно указать один из 18 типов графического построения (способа отображения на главном окне графика или в подокне графика), значения которых указаны в перечислении ENUM_DRAW_TYPE. В зависимости от стиля рисования, может потребоваться от одного до четырех буферов значений (отмеченных как INDICATOR_DATA...
 
User_mt5:

Sem muita certeza, mas continuo a acreditar que ambas estas afirmações estão erradas.

Quanto a "nenhuma dependência". No último exemplo, não consegui mapear o 8º tampão. Qual deve ser a ordem... Talvez o consiga fazer?

Sobre "calculado ... após sorteio". O meu indicador utiliza mais de 200 amortecedores, os primeiros 100 dos quais são amortecedores calculados.
No meu caso, são todas linhas simples, portanto n para #propriedade é calculado a partir do valor do índice tampão: n=b+1. E linhas simples são afixadas. Os mal-entendidos começam com o aparecimento dos histogramas.

Não vou discutir. Eu crio os amortecedores a serem desenhados em absolutamente qualquer sequência. Mas assim que eu adicionar um buffer de cálculo entre eles, a representação gráfica dos indicadores a serem desenhados não será mostrada no gráfico. Os seus valores permanecem na janela de dados. Realizei muitos testes para descrever a criação de indicadores e os seus amortecedores nos artigos. Cheguei à conclusão que apenas os amortecedores calculados (a sua localização na ordem de declarar os amortecedores indicadores) afectam de alguma forma a exibição/não exibição dos amortecedores desenhados.

 
Artyom Trishkin:

Não vou discutir. Eu crio buffers de desenho em absolutamente qualquer sequência. Mas assim que eu adicionar um buffer de cálculo entre eles, as construções gráficas dos indicadores a serem desenhados não serão exibidas no gráfico. Os seus valores permanecem na janela de dados. Realizei muitos testes para descrever a criação de indicadores e os seus amortecedores nos artigos. Cheguei à conclusão de que apenas os amortecedores calculados (a sua localização na ordem de declaração dos amortecedores indicadores) afectam de alguma forma a exibição/não exibição dos amortecedores desenhados.

Também não tenho a certeza.

Há já algum tempo (últimos 3-4 meses) que se verificam alguns fenómenos incompreensíveis e alarmantes na janela do símbolo em geral.

Antes de mais, reparei que o desenho do indicador pode simplesmente deslocar-se para qualquer direcção, por exemplo para baixo ou para a direita, sem razão aparente. Apenas com um novo tique, todo o indicador desliza subitamente para baixo. O mesmo acontece por vezes quando o PC é ligado pela primeira vez.

Em segundo lugar, se alguns amortecedores forem eliminados e depois compilados, os "vestígios" destas construções eliminadas permanecem até alguns eventos inexplicáveis (TF para trás e para a frente, nova recompilação, actualização de definições, etc.). ) Provavelmente, existem "vestígios" na janela de dados, que são memórias de dias há muito desaparecidos (tecnicamente as matrizes são limpas apenas à força, e no MT 5, se não for necessária uma matriz, esta é simplesmente "não registada", mas os dados permanecem; claro, tudo isto são falhas no MT5)
--

Há uma piada: a história da nossa pátria não é previsível. O mesmo se pode dizer sobre MT5: demasiado misterioso:)
--

A propósito, fiz algumas alterações no meu indicador real, de acordo com a minha última afirmação. Não está a funcionar. Adicionei DRAW_HISTOGRAM2 e INDICATOR_CALCULATIONS para arrays de reflexão - funciona.

Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
User_mt5:


Não é necessário ser amador - criar o Expert Advisor em branco usando o MQL5 Wizard - desta forma cometerá o menor número de erros possível ao declarar construções gráficas e matrizes de indicadores.

 
User_mt5:

Também não tenho a certeza.

Há já algum tempo (nos últimos 3-4 meses) que há alguns fenómenos incompreensíveis e alarmantes a acontecer na janela do símbolo em geral.

Primeiro, reparei que a construção do indicador pode simplesmente deslocar-se em qualquer direcção, por exemplo para baixo ou para a direita, sem razão aparente. Apenas com um novo tique todo o indicador desliza subitamente para baixo. O mesmo acontece por vezes quando o PC é ligado pela primeira vez.

Em segundo lugar, se alguns amortecedores forem eliminados e depois compilados, os "vestígios" destas construções eliminadas permanecem até alguns eventos inexplicáveis (TF para trás e para a frente, nova recompilação, actualização de definições, etc.). ) Provavelmente, existem "vestígios" na janela de dados, que são memórias de dias há muito desaparecidos (tecnicamente as matrizes são limpas apenas à força, e no MT 5, se não for necessária uma matriz, esta é simplesmente "não registada", mas os dados permanecem; claro, tudo isto são falhas no MT5)
--

Há uma piada: a história da nossa pátria não é previsível. O mesmo se pode dizer sobre MT5: demasiado misterioso:)
--

A propósito, fiz algumas alterações no meu indicador real, de acordo com a minha última afirmação. Não está a funcionar. Adicionei DRAW_HISTOGRAM2 e INDICATOR_CALCULATIONS para arrays de reflexão - funciona.

Não sobre mim.

O resto - os vossos bugs e desatenção (excepto para a mudança de linha indicadora, mas penso que foi corrigido, se a memória me serve correctamente).

Que construção tem?

 
Vladimir Karputov:

Não é necessário ser amador - criar um Expert Advisor em branco usando o MQL5 Wizard - dessa forma, cometerá o menor número possível de erros ao declarar construções gráficas e matrizes de indicadores.

Pode dizer-me como reflectir correctamente o 8º tampão no meu último exemplo? Sem qualquer amadorismo?
Pode dizer-me as regras?

Artyom Trishkin:

Não sobre mim.

O resto são os seus erros e desatenção (excepto mudança de linha indicadora, mas penso que foi corrigido, se a memória me serve correctamente).

Qual é a sua construção?

Pode dizer-me como reflectir correctamente o 8º tampão no meu último exemplo? Com todos os cuidados devidos?
E dar razões?
Construir 2530.

--
Ainda estou apenas a aprender, por isso ficaria extremamente grato se os senhores pudessem indicar onde ler sobre tudo isto na documentação.