Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 188

 
Vikon:

Ciao!

Non riesco a capire quale intervallo per visualizzare un oggetto grafico

su tutti i tempi.

Grazie.

OBJ_ALL_PERIODS=2097151

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Видимость объектов - Документация по MQL5
 
C-4:
Qualcuno sa se il compilatore ha una chiave per ottenere messaggi su funzioni e variabili inutilizzate, come si fa in MQL4?

Come si fa in mql4?

Interrogato sul fatto di non mostrare avvisi sulle funzioni inutilizzate, Renat ha detto che non lo farà. In relazione all'uso di librerie collegabili. Era nella vecchia costruzione. Ora non lo è più. È molto scomodo cercare quelle funzioni nel corpo dell'EA che non sono utilizzate. Parla solo di variabili inutilizzate se le trova nel corpo di una funzione, non in start() o OnTick()

 
artmedia70:

Come si fa in mql4?

Interrogato sul fatto di non mostrare avvertimenti sulle funzioni inutilizzate, Renat ha detto che non lo farà. A causa dell'uso di librerie di plugin. Era nella vecchia costruzione. Ora non lo fa più. È molto scomodo cercare quelle funzioni nel corpo dell'EA che non sono utilizzate. Parla solo di variabili inutilizzate se le trova nel corpo di una funzione, non in start() o OnTick()

Perché in OOP non sono funzioni, ma metodi. Ogni libreria può avere un mucchio di classi con molti metodi, alcuni dei quali non vengono utilizzati. Inoltre, le classi fanno riferimento anche ad altre librerie, alcuni dei cui metodi non vengono utilizzati. Questo può risultare in un enorme casino di metodi inutilizzati.

A giudicare dalla quantità di codice compilato, il compilatore elimina automaticamente i metodi inutilizzati. Cioè, non ha senso cercarli da soli, perché questo lavoro è fatto dal compilatore.

 
Reshetov:

Perché in OOP, non funzioni, ma metodi. Ogni libreria può avere un mucchio di classi con molti metodi, alcuni dei quali non vengono utilizzati. Inoltre, le classi fanno riferimento anche ad altre librerie, alcuni dei cui metodi sono anche inutilizzati. Questo può risultare in un'enorme pila di metodi inutilizzati.

A giudicare dalla dimensione del codice compilato, il compilatore elimina automaticamente i metodi inutilizzati. Cioè, non ha senso cercarli da soli, perché il compilatore fa questo lavoro.

Non è questo il problema. Il problema è esattamente trovare metodi inutilizzati nelle vostre classi. Io ho più di cinquecento metodi propri. Le interrelazioni sono molto complesse. Il codice di runtime è inevitabile. Potrebbe essere molto utile dare un'occhiata veloce a ciò che non viene più utilizzato.
 
Reshetov:

Perché in OOP, non funzioni, ma metodi. Ogni libreria può avere un mucchio di classi con molti metodi, alcuni dei quali non vengono utilizzati. Inoltre, le classi fanno riferimento anche ad altre librerie, alcuni dei cui metodi sono anche inutilizzati. Questo può risultare in un'enorme pila di metodi inutilizzati.

A giudicare dalla dimensione del codice compilato, il compilatore elimina automaticamente i metodi inutilizzati. Cioè, non ha senso cercarli da soli perché il compilatore fa questo lavoro.

Yuri, questo è naturale. Ma quando dai il codice sorgente a un cliente, vuoi ripulirlo. E così inizia il processo tortuoso. Non ci sono molti modelli - diversi per certe classi di TC. Devo pulire le funzioni che non sono coinvolte in questo caso. Mi piacerebbe avere un "pulsante magico" che punti a funzioni e variabili inutilizzate solo nel corpo dell'EA.
 

Spero che la discussione sulla domanda precedente sia finita. È difficile sapere quando l'argomento è chiuso ed è opportuno fare la tua domanda. Puoi darmi un suggerimento? Non riesco a capire come riempire un array 2D con i risultati dei calcoliSt_handle eMA_handle, posso solo passarli ad un array unidimensionale.

/+------------------------------------------------------------------+
//|                                                           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:
Non è questo il problema. Il problema è esattamente trovare metodi inutilizzati nelle vostre classi.

Cosa intendi con: metodi inutilizzati nelle tue classi? Questa non è la pratica in OOP. Un normale programmatore OOP, in contrasto con la programmazione algoritmica, crea classi con tutti i campi e i metodi necessari, come si dice, per tutte le occasioni, perché la stessa classe può essere utilizzata in seguito in altre applicazioni o diventare parte della libreria di classi. Per non parlare del fatto che anche all'interno di un progetto è meglio creare classi complete, non spogliate, in modo da non dover cercare nel codice sorgente e aggiungere successivamente i campi e i metodi necessari.

In OOP qualsiasi economia, a cui molte persone si abituano nella programmazione algoritmica, può rivelarsi dannosa in seguito. Tutto ciò che non viene utilizzato deve essere escluso dal codice dal compilatore e non dal programmatore.

Naturalmente, OOP si traduce in un codice sorgente più grande rispetto alla programmazione algoritmica. Ma questo non è uno svantaggio, ma un vantaggio, perché molto del codice "extra" di questo progetto può essere riutilizzato in altri progetti.

C-4:


Io ho più di cinquecento metodi propri. Le interrelazioni sono molto complesse. Il codice rudimentale è inevitabile. È molto utile per vedere rapidamente ciò che non è più utilizzato.

Non si dovrebbe cercare di fare un enigma, cioè tutto in una classe. È necessario creare librerie di classi, cioè suddividere la funzionalità in classi separate e non dimenticare di includere commenti su questa roba e poi tutto si risolverà da solo. Inizialmente, quando ho iniziato a imparare Java dopo Pascal, anch'io ho cercato di fare tutto in un unico pezzo, cioè invece di usare OOP, ho creato una classe con tutto ciò di cui avevo bisogno per un certo compito, proprio come nella programmazione algoritmica. Il risultato era un pasticcio non universale che era impossibile da applicare ovunque in seguito, senza contare che era difficile capire tale codice.
 
Andrei-1:

Puoi darmi un suggerimento? Non riesco a capire come riempire un array 2D con i risultati dei calcoliSt_handle eMA_handle, posso solo passarli ad un array unidimensionale.

Qual è il punto? Cioè, perché fare una gobba invece di usare il rasoio di Occam? Cioè, qual è il vantaggio di un array bidimensionale rispetto a due array unidimensionali? Dopo tutto, bisogna prima spingere qualcosa da due monodimensionali create da indicatori di default in una bidimensionale, e poi prendere qualcosa da lì. Stai facendo un lavoro inutile e stai cercando di trascinare gli altri in questo.

Se ci fosse un problema con gli array monodimensionali, allora ne varrebbe la pena.

 
Dopo aver curiosato nel forum mi sono imbattuto in quanta memoria ci vorrà, molta! Ho deciso di riempire un array unidimensionale, cercare un segnale in esso, sovrascrivere e cercare di nuovo un segnale. voglio ancora 10K cicli. Come questo. Una o due ricerche all'ora sono sufficienti per me.
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]); // начинается поиск сигнала
    
   }
 

Scusate se questo è fuori tema ...

aiutare chi può ...

in delphi 7 procedura dll...

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

fine;

in mt4 :

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

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

dati[5]= 3;

test1(dati);

e appare un errore... 2014.02.06 17:39:04.241 stack danneggiato, controllare la chiamata di funzione DLL in 'SOG_2014.mq4' (80,7)

Chi sa come farlo bene...