Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 827

 

Olá.

Digamos que eu tenho 2 indicadores, o primeiro tem 4 amortecedores, o segundo tem 2. Coloquei-os em um gráfico e abri a janela de dados (CTRL+D). A lista contém 6 buffers de 0 a 5. Como posso ler o valor do buffer 5, digamos, a partir desta lista em MQL? Não é conveniente usar o iCustom pelo indicador requerido. É mais conveniente utilizar esta lista. Eu sei que eles fazem isso, mas como?

 

Ao estudar os exemplos na ajuda, a criação de objetos é sempre feita com um cheque:

//--- сбросим значение ошибки 
   ResetLastError(); 
//--- создадим кнопку 
   if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0)) 
     { 
      Print(__FUNCTION__, 
            ": не удалось создать кнопку! Код ошибки = ",GetLastError()); 
      return(false); 
     } 


Por que isso é feito para objetos? Qual é a probabilidade de um objeto não ser criado?


Em geral, estou interessado em saber onde posso ler sobre regras de boas maneiras na programação mql, para saber em quais arbustos se encontra o ancinho, aconselhar.

 
psyman:

Ao estudar os exemplos na ajuda, a criação de objetos é sempre feita com um cheque:


Por que isso é feito para objetos? Qual é a probabilidade de um objeto não ser criado?


Em geral, estou interessado em saber onde posso ler sobre boas maneiras na programação mql, para saber onde se encontram as armadilhas, me aconselhar.

Por exemplo, um objeto com este nome já existe.
As regras da boa forma - elas são as mesmas para qualquer idioma. Receba dados - verifique o que você tem, crie um objeto, verifique o que você criou, e se você o criou... E assim por diante.
 
Como preencher um array 4-dimensional com valores do formato int Mas[1][2][2][2], como atribuir um valor a cada célula do array, temos em mente tal notação, por exemplo, um array 2-dimensional int Arr[1][2]={3,4};, como preencher um array 4-dimensional?
 
Artyom Trishkin:
Por exemplo, um objeto com este nome já existe.
E as regras de etiqueta - elas são as mesmas para qualquer idioma. Você recebe dados - verifique o que você recebeu, cria um objeto, verifica o que você criou e se você o criou... E assim por diante.


Quando eu crio um botão dentro de uma função, eu fico jurando

 return(false);


função 'return' - 'void' retorna um valor 112 16


O que devo fazer neste caso?

 
Seric29:
Como preencher a matriz 4-dimensional com valores do formato em Mas[1][2][2][2], como atribuir um valor a cada célula da matriz, neste caso, existe uma matriz 2-dimensional em Arr[1][2]={3,4}; como preencher a matriz 4-dimensional?

As matrizes multidimensionais são normalmente preenchidas em loops com os valores certos - o que torna mais difícil cometer um erro, para uma matriz tetradimensional deveria ser algo assim, mas eu poderia estar errado:

int A[2,2,4,3] = {
                     {/*----------- 3-e измерение = 4 ---------------------------*/ 
/*2-e измерение=2 */ {  {0,1,2/*4-e измерение = 3 */}, {0,1,2}, {0,1,2}, {0,1,2} },
                        { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }   
               
                     },
 // 1-е измерение = 2           
                     {  { {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} },
                     {   {0,1,2}, {0,1,2}, {0,1,2}, {0,1,2} }}
                  }; 

psyman:

Quando eu crio um botão dentro de uma função, eu fico jurando

A função 'retorno' - 'vazio' retorna um valor 112 16

O que devo fazer neste caso?

comece a ler a ajudaem https://www.mql5.com/ru/docs/basis/function

Se precisar de mais ajuda, você deve ler qualquer livro em C++. O primeiro capítulo deve explicar as funções

 
psyman:


Quando eu crio um botão dentro de uma função, recebo um juramento de


função 'return' - 'void' retorna um valor breakeven_fish.mq5 112 16


O que fazer neste caso?

Se você devolver um valor de bool de uma função, você não precisa tornar o tipo de função nulo, mas adivinhe o que é.
 

Camaradas - olhem o indicador para a exatidão. Há uma fórmula Valor = (Aberto[0]-SMA(P,n))/SMA(P,n))*100%.

Coloquei-o na tabela - ele calcula e traça tudo. Começo a verificar alguma barra na calculadora - seu valor não coincide com o sorteado...

Eis um exemplo - calculo 1.0178 para Open e 1.0182 para MA(13) usando a fórmula ((1.0178-1.0182)/1.0182) * 100% - o resultado na calculadora é -0,0393. E o gráfico MT4 mostra -0,0929. É um erro no código ou a calculadora não calcula corretamente alguns valores lá? Por favor, ajude. Estou anexando o indicador.

#property indicator_separate_window 
#property indicator_buffers 1       // Количество буферов
#property indicator_color1  Blue    // Цвет линии 0 буфера

#property  indicator_level1  1
#property  indicator_level2  -1
//--------------------------------------------------------------- 2 --
//---- indicator parameters 

extern int History    =5000;      // Колич.баров в расчётной истории
extern int Period_SMA =13; 
 

double
   Line_0[];                        // Инд. массив  ravi 
    
//--------------------------------------------------------------- 4 --

int init()                          // Специальная функция init()
  {
   SetIndexBuffer(0,Line_0);        // Назначение массива буферу
   SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);// Стиль линии
   
   IndicatorShortName("KRI");
//--------------------------------------------------------------- 5 --
   
   return(0);                          // Выход из спец. функции init()
  }

//--------------------------------------------------------------- 8 --
int start()                         // Специальная функция start()
  {
//--------------------------------------------------------------- 9 --
  
   double
   SMA;                   //  МА для расчета значений индикатора 
                                 // формyла (PRICE-SMA/SMA)*100); 
                             
   int
   i,                            // Индекс бара
   n,                            // Формальн. параметр(индекс бара)
   Counted_bars;                 // Количество просчитанных баров 

//-------------------------------------------------------------- 10 --
   Counted_bars=IndicatorCounted(); // Количество просчитанных баров 
   i=Bars-Counted_bars-1;           // Индекс первого непосчитанного
   if (i>History-1)                 // Если много баров то ..
      i=History-1;                  // ..рассчитывать заданное колич.
//-------------------------------------------------------------- 11 --
   while(i>=0)                      // Цикл по непосчитанным барам
     {
      //-------------------------------------------------------- 12 --
        
      SMA=iMA(NULL,0,Period_SMA,0,MODE_SMA,PRICE_CLOSE,i); // Значение  SМА
     
      
      Line_0[i] =0; 
      if (SMA>0) Line_0[i] = ((Open[0]-SMA)/SMA)*100;    //  Индик. массив линии KPI
     
      //-------------------------------------------------------- 13 --
      i--;                          // Расчёт индекса следующего бара
      //-------------------------------------------------------- 14 --
     }
   return(0);                          // Выход из спец. ф-ии start()
  }
//-------------------------------------------------------------- 15 --
Arquivos anexados:
KRI.mq4  7 kb
 
Artyom Trishkin:
Se você estiver fazendo o retorno de valor tipo bool da função, então o tipo de função não deve ser nulo, mas adivinhe qual delas é.

E se você quiser retornar dados de uma função?


É possível percorrer as posições apenas para um determinado símbolo sem usar PositionsTotal todas as vezes?


Até agora, a única coisa que me ocorreu foi escrever as passagens em uma matriz e trabalhar com elas separadamente, mas talvez haja uma opção mais simples?

 
psyman:

E se você quiser retornar dados de uma função?


É possível percorrer as posições apenas para um determinado símbolo sem usar PositionsTotal todas as vezes?


Até agora, a única coisa que me ocorreu foi escrever as passagens para uma matriz e trabalhar com elas separadamente, mas talvez haja uma opção mais simples?

Não está claro o que é necessário no final - alguns pensamentos desarticulados.

Razão: