Erros, bugs, perguntas - página 2930

 

Tradução de um indicador de mt4 para mt5

O problema está no tamanhoDRAW_HISTOGRAM

Quando eu defino "1" ou "2" o tamanho muda, mas "3" ou "4" = o tamanho ainda é "2".


Porque é que tudo funciona no MT4, mas há um problema tão grande com o MT5?

#property indicator_separate_window
#property indicator_plots   4
#property indicator_buffers 4
#property indicator_color1 clrDodgerBlue
#property indicator_color2 clrDodgerBlue
#property indicator_color3 clrLimeGreen
#property indicator_color4 clrFireBrick
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3

Resultado em mt4


Resultado em mt5, mostra apenas "2" de espessura, embora eu tenha "3" em definições



Além disso, a colocação do imóvel no OnInit() não ajuda

PlotIndexSetInteger(0,PLOT_LINE_WIDTH, 3);

 

Erro crítico durante a depuração:

struct sA
  {
   int               i;
   string            s;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cA
  {
public:
   sA                my_array[];
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   cA *ca;
   ca=new cA();
   ArrayResize(ca.my_array,1);
   ZeroMemory(ca.my_array);
   ArrayPrint(ca.my_array);
  }

Resultado:

2020.12.27 17:04:26.966 1 (EURUSD,M1)   Access violation at 0x000001FE5AF10199 read to 0xFFFFFFFFFFFFFFFF in 'D:\Alpari MT5\MQL5\Scripts\Test\1.ex5'
2020.12.27 17:04:26.967 1 (EURUSD,M1)      crash -->  000001FE5AF10199 8B4318            mov        eax, [rbx+0x18]
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF1019C 4089442420        mov        [rsp+0x20], eax
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101A1 41B910000000      mov        r9d, 0x10
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101A7 49B8B807F15AFE01  mov        r8, 0x1fe5af107b8
2020.12.27 17:04:26.967 1 (EURUSD,M1)                                  0000
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101B1 488D17            lea        rdx, [rdi]
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101B4 48B998D45F5FFE01  mov        rcx, 0x1fe5f5fd498
2020.12.27 17:04:26.967 1 (EURUSD,M1)                                  0000
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101BE 49FF96A8120000    call       qword near [r14+0x12a8]  ; #11378 (terminal64.exe)
2020.12.27 17:04:26.967 1 (EURUSD,M1)   
2020.12.27 17:04:26.967 1 (EURUSD,M1)   00: 0x000001FE5AF10199
2020.12.27 17:04:26.967 1 (EURUSD,M1)   01: 0x000001FE633F0010
2020.12.27 17:04:26.967 1 (EURUSD,M1)   
Última versão beta no momento
Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Ошибки выполнения - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alguém descobriu uma forma de obter um manípulo indicador para exibir um imóvel na janela principal ou na subjanela? Estou a falar de indicadores arbitrários de terceiros que são criados usando o IndicatorCreate e depois podem ser adicionados ao gráfico usando oChartIndicatorAdd a pedido do utilizador.
 
Stanislav Korotky:
Alguém descobriu uma maneira de obter o manípulo indicador para exibir a propriedade na janela principal ou na subjanela? Estou a falar de indicadores personalizados que são criados usando o IndicatorCreate e depois podem ser adicionados ao gráfico usando o ChartIndicatorAdd.

Provavelmente poderia enfiar o indicador no OBJ_CHART e ver onde se encontra.

 
Stanislav Korotky:
Alguém descobriu uma forma de obter uma propriedade exposta a partir de um manípulo indicador na janela principal ou subjanela? Estou a falar de indicadores personalizados que são criados usando o IndicatorCreate e depois podem ser adicionados ao gráfico por ChartIndicatorAdd a pedido do utilizador.

fez algo semelhante.
Aqui está um que encontrei. Não consigo lembrar se funciona ou não. Por favor, verifique.

bool FindIndicatorByHandle(long handle, string &symbol, ENUM_TIMEFRAMES &timeframe, long &ChartId, int &sub_win, string &Name) {
   long chart_id =ChartFirst();
   while (chart_id!=-1) {
      int total_sub = (int)ChartGetInteger(chart_id,CHART_WINDOWS_TOTAL);
      int total_ind; 
      for(int i=0; i<total_sub; i++) {
         total_ind = ChartIndicatorsTotal(chart_id,i);
         for (int j=0; j<total_ind; j++) {
            string name = ChartIndicatorName(chart_id,i,j);
            if (ChartIndicatorGet(chart_id,i,name)== handle) {
               ChartId=chart_id;
               symbol= ChartSymbol(chart_id);
               timeframe=ChartPeriod(chart_id);
               sub_win=i;
               Name=name;
               return true;
            }
         }
      }
      chart_id=ChartNext(chart_id);
   }
   return false;
}
O código procura em todos os gráficos abertos por um indicador pelo seu cabo. Símbolo de retorno, período de tempo, id do gráfico, subjanela e nome do indicador.
 
fxsaber:

Acho que se poderia colocar o indicador em OBJ_CHART e ver onde se encontra.

Vou tentar, por agora tive de fazer a opção de o especificar pelo utilizador.

 
Nikolai Semko:

fez algo semelhante.
Aqui está um que encontrei. Não consigo lembrar se funciona ou não. Por favor, verifique.

A julgar pelo código, procura em todos os gráficos abertos um indicador pelo seu cabo. Símbolo de retorno, período de tempo, id do gráfico, subjanela e nome do indicador.

Não se encaixa na sua pergunta: os indicadores criados por IndicatorCreate não são colocados em nenhuma janela - eles "sentam-se" dentro dela, e a tarefa é colocar tal indicador pela sua pega na janela. Agora, MQL5 permite-lhe adicionar um manípulo arbitrário à janela principal ou sub janela usando a função ChartIndicatorAdd, independentemente das "propriedades" do indicador (sem erros!), e o resultado parece muito estranho quando a adição não é executada como pretendido.

 

Há um problema maior com os indicadores.

Alguns deles implementam o manipulador OnCalculate de acordo com a versão simplificada com uma matriz de entradas, e é possível seleccionar o tipo de preço para o seu cálculo. Como é que sabe pelo programa MQL5 de terceiros que o indicador espera este tipo de preço, que deve ser passado depois de todos os parâmetros durante a criação do indicador? Parece que não há maneira de o fazer. E se não o fizer, o indicador é desenhado por # indicador de propriedade_aplicado_preço que não pode ser acedido a partir do exterior. Aqui está um simples Expert Advisor que adiciona o indicador/AMA ao gráfico de forma programática:

int OnInit()
{
  const int h = iCustom(NULL, 0, "Examples/AMA");
  if(h == INVALID_HANDLE)
  {
    Print("iCustom failed: ", _LastError);
    return INIT_FAILED;
  }

  if(!ChartIndicatorAdd(0, 0, h))
  {
    Print("ChartIndicatorAdd failed: ", _LastError);
    return INIT_FAILED;
  }
  ChartRedraw();
  
  return INIT_SUCCEEDED;
}

Se depois disso mudarmos o prazo do gráfico, teremos 2 indicadores AMA: um a preço fechado (criado programmaticamente) e um a preço aberto (gerado devido à mudança de prazo e # indicador de propriedade_aplicado_preço PREÇO_OPEN; não é claro porque é que esta propriedade não é apanhada pelo iCustom também).

 

Para continuar o tema dos indicadores, estou a anexar o Expert Advisor que costumava descobrir e evitar o problema com os parâmetros MqlParam.

A tarefa do Consultor Especialista é adicionar o indicador "Exemplos/Canal_Preço" ao gráfico, se este ainda não estiver lá, com os mesmos parâmetros.

Para tal, criamos uma instância usando iCustom/IndicatorCreate, obtemos uma matriz dos seus parâmetros através de IndicatorParameters, e depois chamamos no loop IndicatorParameters para os indicadores que já existem no gráfico: se não houver correspondência dos parâmetros da matriz, o indicador é adicionado ao gráfico, se houver uma correspondência, a nova pega é simplesmente destruída.

O problema é que a igualdade dos parâmetros nem sempre funciona como esperado. Em particular, existe um caso de teste à prova de falhas. Colocamos o Expert Advisor em qualquer gráfico vazio e clicamos - ele cria a primeira instância do indicador. Depois mudamos para qualquer outro quadro temporal (o antigo indicador permanece) e clicamos novamente. Estranhamente, a segunda instância do indicador é criada.

A partir da análise da execução e do registo é claro que isto se deve à equalização errada das cordas do nome do indicador nos parâmetros. As cordas têm 260 caracteres de comprimento, mas o terminal 0 está localizado muito antes. Depois disso, há alguma informação de serviço ou lixo. Assim, a comparação de cordas "==" ou StringCompare leva este "lixo" em conta e obtemos desigualdade de cordas.

Se convertermos as cordas numa matriz de caracteres, as matrizes recebem uma correspondência completa. Se se converter a um curto conjunto, recebe lixo. Em suma, alguns comportamentos não consistentes não descritos na documentação.

Window N: 1
   0, Price Channel(22), 12
    [type] [integer_value] [double_value]                                                                                                                                                                                                                                                         [string_value]
[0]     14               0          0.000 "Indicators\Examples/Price_Channel"                                                                                                                                                                                                                                   
[1]      7              22          0.000 null                                                                                                                                                                                                                                                                  
ind1: 'Indicators\Examples/Price_Channel
ind2: 'Indicators\Examples/Price_Channel
260 0 / 260 0
Char arrays 34 34
 73 110 100 105  99  97 116 111 114 115  92  69 120  97 109 112 108 101 115  47  80 114 105  99 101  95  67 104  97 110 110 101 108   0
 73 110 100 105  99  97 116 111 114 115  92  69 120  97 109 112 108 101 115  47  80 114 105  99 101  95  67 104  97 110 110 101 108   0
Short arrays 260 260
[  0]    73   110   100   105    99    97   116   111   114   115    92    69   120    97   109   112   108   101   115    47    80   114   105    99
[ 24]   101    95    67   104    97   110   110   101   108     0   103   110    97   108     0     0     0     0     0     0     0     0     0     0
[ 48]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[ 72]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[ 96]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[120]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[144]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[168]     0     0     0     0     0     0     0     0     0     0     0     0    13  3328 58074    86 13696    54     0     0 35120  3210     0     0
[192]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[216]     0     0     0     0 61841 38184 17648 16370     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[240]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[  0]    73   110   100   105    99    97   116   111   114   115    92    69   120    97   109   112   108   101   115    47    80   114   105    99
[ 24]   101    95    67   104    97   110   110   101   108     0   103   110    97   108     0    32    32    77    32    65    32    82    32    75
[ 48]    32    83     0    32    99   111   109   109    97    32   115   101   112    97   114    97   116   101   100    32   108   105   115   116
[ 72]    41     0    32   112   114   111   116   111   116   121   112   101   115    41     0     0   115     0     0     0     0     0     0     0
[ 96]   528     0     0     0     0    45     0     0     3     0     0     0   512     0     0     0  1160    45     0     0  7256 30655     0     0
[120]     0     0     0     0   512     0     0     0     0 65535  2272     0 29648    45     0     0     0     0     0     0     0     0     0     0
[144]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[168]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[192]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[216]     3     0     0     0 26341 16284     1     0  1308    16     0     0 49814 30635     0     0     0     0     0     0 32016    37     0     0
[240]     2     0     0     0 50336 16481     1     0     2     0     0     0     3     0     0     0 45520    37     0     0
1 0

Não tenho a certeza do que é exactamente o insecto, se está no princípio do processamento de cordas em MQL ou outra coisa qualquer.

Se alguém souber as nuances, por favor dêem-me uma pista.

Arquivos anexados:
 
Stanislav Korotky:

Se alguém estiver ciente das nuances, por favor, dêem-me uma dica.

Este é o tipo de característica que, mesmo que o soubesse, teria de trazer de novo à tona toda a camada da sua cabeça.

Aqui fez-se a definição de auto-disponibilidade. Parecia funcionar quando se mudava de TF.

Init_Sync
Init_Sync
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов