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

 
Vikon:

Olá!

Não consigo descobrir qual o intervalo para mostrar um objecto gráfico

em todos os períodos de tempo.

Obrigado.

OBJ_ALL_PERIODS=2097151

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов - Документация по MQL5
 
C-4:
Alguém sabe se o compilador tem uma chave para obter mensagens sobre funções e variáveis não utilizadas, como é feito na MQL4 ?

Como se faz isto em mql4 ?

Questionado sobre não exibir avisos sobre funções não utilizadas, Renat disse que não o faria. Em ligação com a utilização de bibliotecas plugáveis. Costumava estar na velha construção. Agora não é. É muito inconveniente procurar as funções no corpo da EA que não são utilizadas. Só fala de variáveis não utilizadas se as encontrar no corpo de uma função, e não no início() ou OnTick()

 
artmedia70:

Como é feito em mql4 ?

Questionado sobre não exibir avisos sobre funções não utilizadas, Renat disse que não o faria. Devido à utilização de bibliotecas de plugins. Costumava estar na velha construção. Agora não. É muito inconveniente procurar as funções no corpo da EA que não são utilizadas. Só fala de variáveis não utilizadas se as encontrar no corpo de uma função, e não no início() ou OnTick()

Porque no OOP não são funções, mas sim métodos. Cada biblioteca pode ter um monte de aulas com muitos métodos, alguns dos quais não são utilizados. Além disso, as aulas também se referem a outras bibliotecas, algumas das quais também não são utilizadas. Isto pode resultar numa enorme confusão de métodos não utilizados.

A julgar pela quantidade de código compilado, o compilador elimina automaticamente os métodos não utilizados. Isto é, não vale a pena procurá-los por si mesmo, porque este trabalho é feito pelo compilador.

 
Reshetov:

Porque no OOP, não funciona, mas sim métodos. Cada biblioteca pode ter um monte de aulas com muitos métodos, alguns dos quais não são utilizados. Além disso, as aulas também se referem a outras bibliotecas, alguns dos quais também não são utilizados métodos. Isto pode resultar numa enorme pilha de métodos não utilizados.

A julgar pelo tamanho do código compilado, o compilador elimina automaticamente os métodos não utilizados. Ou seja, não vale a pena procurá-los por si mesmo, porque o compilador faz este trabalho.

Este não é o problema. O problema é exactamente encontrar métodos não utilizados nas suas aulas. Tenho mais de quinhentos métodos próprios. As inter-relações são muito complexas. O código de tempo de execução é inevitável. Pode ser muito útil dar uma vista de olhos rápida ao que já não é utilizado.
 
Reshetov:

Porque no OOP, não são as funções, mas os métodos. Cada biblioteca pode ter um monte de aulas com muitos métodos, alguns dos quais não são utilizados. Além disso, as aulas também se referem a outras bibliotecas, alguns dos quais também não são utilizados métodos. Isto pode resultar numa enorme pilha de métodos não utilizados.

A julgar pelo tamanho do código compilado, o compilador elimina automaticamente os métodos não utilizados. Ou seja, não vale a pena procurá-los por si mesmo, porque o compilador faz este trabalho.

Yuri, isto é natural. Mas quando se dá o código fonte a um cliente, quer-se limpá-lo. E assim começa o tortuoso processo. Não há muitos modelos - vários para certas classes de TC. Tenho de limpar as funções que não estão envolvidas neste caso. Gostaria de ter um "botão mágico" que apontasse para funções e variáveis não utilizadas apenas no corpo da EA.
 

Espero que a discussão da pergunta anterior tenha terminado. É difícil saber quando o tópico está encerrado e é apropriado fazer a sua pergunta. Pode dar-me uma dica? Não consigo descobrir como preencher uma matriz 2D com resultados de cálculos deSt_handle eMA_handle, só os posso passar para uma matriz unidimensional.

/+------------------------------------------------------------------+
//|                                                           11.mq5 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 100
#property indicator_buffers 1
#property indicator_plots   1
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input int      Input1=0;
input int      Input2=0;

//--- indicator buffers
double         Label1Buffer[];
double      MA[10000][400];  
int         St_handle; 
int         MA_handle; 
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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 Kp     =51; // с Kp начанается К% на Kp_end заканчивается
   int Kp_end =400;// с Kp начанается К% на Kp_end заканчивается
   int MAp    =2;  // с MAp начанается D% на MAp_end заканчивается
   int MAp_end=31// с MAp начанается D% на MA_end заканчивается
   ENUM_STO_PRICE price_field=1; // цена расчета стохастика 0 Low/High    1 Close/Close


   St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field);  
  
   for(MAp=2;MAp<MAp_end;MAp++)
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle);
   }
    
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
C-4:
Este não é o problema. O problema é exactamente encontrar métodos não utilizados nas suas aulas.

O que quer dizer: métodos não utilizados nas suas aulas? Esta não é a prática no OOP. Um programador OOP normal, ao contrário da programação algorítmica, cria classes com todos os campos e métodos necessários, como se costuma dizer, para todas as ocasiões, porque a mesma classe pode ser mais tarde utilizada noutras aplicações ou tornar-se parte da biblioteca de classes. Para não mencionar o facto de que mesmo dentro de um projecto é melhor criar classes completas, não despojadas, para que não tenha de pesquisar através do código fonte e adicionar mais tarde os campos e métodos necessários.

No OOP qualquer economia, a que muitas pessoas se habituam na programação algorítmica, pode acabar por ser prejudicial mais tarde. Tudo o que não é utilizado deve ser excluído do código pelo compilador e não pelo programador.

Naturalmente, o OOP resulta num código fonte maior em comparação com a programação algorítmica. Mas isto não é uma desvantagem, mas sim uma vantagem, porque muito do código "extra" deste projecto pode ser reutilizado noutros projectos.

C-4:


Tenho mais de quinhentos métodos próprios. As inter-relações são muito complexas. O código rudimentar é inevitável. É muito útil para ver rapidamente o que já não é utilizado.

Não se deve tentar fazer um enigma, ou seja, enfiar tudo numa só classe. É necessário criar bibliotecas de classes, ou seja, dividir a funcionalidade em classes separadas e não se esqueça de incluir comentários sobre este material e depois tudo se resolverá por si só. Inicialmente, quando comecei a aprender Java depois de Pascal, também eu tentei fazer tudo numa só peça, ou seja, em vez de usar OOP, criei uma classe com tudo o que precisava para uma determinada tarefa, tal como na programação algorítmica. O resultado foi uma confusão não universal impossível de aplicar mais tarde em qualquer lugar, para não mencionar que era difícil de compreender tal código.
 
Andrei-1:

Pode dar-me uma dica? Não consigo descobrir como preencher uma matriz bidimensional com resultados de cálculoSt_handle eMA_handle, só os posso passar para uma matriz unidimensional.

Qual é o objectivo? Isto é, porquê fazer uma corcunda em vez de usar a lâmina de barbear de Occam? Isto é, qual é a vantagem de uma matriz bidimensional sobre duas matrizes unidimensionais? Afinal, primeiro é preciso enfiar algo de dois indicadores unidimensionais criados por defeito para um bidimensional, e depois tirar algo de lá. Está a fazer trabalho desnecessário e a tentar arrastar outros para dentro dele.

Se houvesse um problema com arrays unidimensionais, então valeria a pena o problema.

 
Depois de percorrer o fórum, deparei-me com quanta memória isto vai levar, muita! Decidiu preencher uma matriz unidimensional, procurar um sinal na mesma, escrever por cima e procurar novamente um sinal. ainda quer 10K ciclos. Assim. Uma ou duas buscas por hora é suficiente para mim.
St_handle=iStochastic(NULL,0,Kp,1,1,MODE_EMA,price_field); // создание хэндла стохастика 
  
   for(MAp=1;MAp<MAp_end;MAp++) //перебор сглаживаний 
   {
    MA_handle=iMA(NULL,0,MAp,0,MODE_EMA,St_handle); // создание хэндла сглаженного стохастика
    CopyBuffer(MA_handle,0,0,400,MA); // заполнение одномерного массива значениями стохастика
    if(MA[1]>6) Alert(MA[1]); // начинается поиск сигнала
    
   }
 

Desculpe se isto está fora do tópico ...

ajudar quem pode ...

em delphi 7 dll procedure...

procedure test1(var data: array of Double); stdcall;
begin
ShowMessage('Entered ');

fim;

em mt4 :

#importar "gayss.dll"
void test1( double &data[] );
#importar

ArrayResize(data, 6);
data[0]= 2;
data[1]= 4;
data[2]= 8;
data[3]= 16;
data[4]= 21;

data[5]= 3;

test1(dados);

e surge um erro... 2014.02.06 17:39:04.241 pilha danificada, verificar chamada de função DLL em 'SOG_2014.mq4' (80,7)

Quem sabe como fazê-lo bem...
Razão: