Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 757

 
User_mt5:


In generale, esiste un concetto chiamato "gradiente". È un indicatore che descrive la "ripidità" (di un grafico). Nel contesto di questo settore questo indicatore può essere espresso in termini di punto/tempo. È essenzialmente un tasso. Questo indicatore non dipende dalla scala, poiché non è attaccato al grafico. Usate un gradiente e non usate un angolo.


Come si calcola questo gradiente?

C'è un modo per approfondire la tua idea? Si prega di notare in quale thread del forum ho scritto la mia domanda.

 
igorbel:

Come si calcola questo gradiente?

C'è un modo per approfondire la tua idea? Si prega di notare in quale thread del forum ho scritto la mia domanda.

Non ne ho idea.

Sto parlando di semplice matematica. Il gradiente è la velocità. La velocità stessa è quando il tempo è al denominatore. Nell'uso familiare è la velocità di un'automobile, espressa in km/h. Ma la velocità in generale può essere diversa. Per esempio, la velocità di scrivere codice software si misura in numero di linee al giorno. Nel caso di un grafico dei prezzi, la velocità si misura in numero di punti al minuto. Convenzionalmente, possiamo assumere che se il gradiente (pendenza, tasso di salita) in qualche parte del grafico è superiore, per esempio, a 100 punti/minuto, allora questa parte può essere considerata una tendenza, e se è inferiore, allora una piatta.

 

Ciao 2017.07.07_15:55 GMT+3. Non capisco. Sembra che ci dovrebbe essere un segnale, ma nel tester di strategia non c'è. In che modo allora il vostro lodato tester MT5 è diverso dal tester MT4? L'ho scritto quasi come nella media mobile standard.mq5 . Ma sono riuscito a testare l'Expert Advisor sul mio conto demo. Ha aperto un trade, ma ho dovuto chiuderlo io stesso. Ho sistemato la chiusura. Ma ho scritto qualcos'altro e l'EA ha smesso di aprire i trade di nuovo. Zero errori e zero avvertimenti non sono un indicatore della buona condizione dell'Expert Advisor. Sono rimasto bloccato qui. Come faccio a sapere che c'è scritto che l'Expert Advisor non funziona? Devo disturbare di nuovo Karputov. Se avessi ricevuto l'intera lista di divieti, l'avrei fatto io stesso. Sto pubblicando i file, anche se non tutti. 16:06 GMT+3.

 

Per favore, aiutatemi!

Per ottenere il valore dell'indicatore in MQL4 è sufficiente la seguente funzione

double CMAf(int index)
  {
   return NormalizeDouble(iMA(Symbol(),0,period_CMA,0,0,0,index),Digits);
  }
Come ottenere un analogo per MQL5?
 
-Aleks-:

Per favore, aiutatemi!

Per ottenere il nome di un indicatore in MQL4, è sufficiente una semplice funzione

Come ottenere un analogo per MQL5?

Hai dato un'occhiata alla guidaiMA?

Primo passo: nella "testata", dichiarate una variabile per memorizzare il manico dell'indicatore iMA:

Secondo passo: creare l'handle dell'indicatore in OnInit().

//+------------------------------------------------------------------+
//|                                                       iMAGet.mq5 |
//|                              Copyright © 2017, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2017, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input int                  ma_period=10;                 // period of ma 
input int                  ma_shift=0;                   // shift 
input ENUM_MA_METHOD       ma_method=MODE_SMA;           // type of smoothing 
input ENUM_APPLIED_PRICE   applied_price=PRICE_CLOSE;    // type of price 
input ENUM_TIMEFRAMES      period=PERIOD_CURRENT;        // timeframe 
//---
int                        handle_iMA;                   // variable for storing the handle of the iMA indicator 
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create handle of the indicator iMA
   handle_iMA=iMA(Symbol(),period,ma_period,ma_shift,ma_method,applied_price);
//--- if the handle is not created 
   if(handle_iMA==INVALID_HANDLE)
     {
      //--- tell about the failure and output the error code 
      PrintFormat("Failed to create handle of the iMA indicator for the symbol %s/%s, error code %d",
                  Symbol(),
                  EnumToString(Period()),
                  GetLastError());
      //--- the indicator is stopped early 
      return(INIT_FAILED);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double ma_0=iMAGet(0);
   double ma_1=iMAGet(1);

   Comment("MA #0: ",DoubleToString(ma_0,Digits()+1),"\n",
           "MA #1: ",DoubleToString(ma_1,Digits()+1));
  }
//+------------------------------------------------------------------+
//| Get value of buffers for the iMA                                 |
//+------------------------------------------------------------------+
double iMAGet(const int index)
  {
   double MA[1];
//--- reset error code 
   ResetLastError();
//--- fill a part of the iMABuffer array with values from the indicator buffer that has 0 index 
   if(CopyBuffer(handle_iMA,0,index,1,MA)<0)
     {
      //--- if the copying fails, tell the error code 
      PrintFormat("Failed to copy data from the iMA indicator, error code %d",GetLastError());
      //--- quit with zero result - it means that the indicator is considered as not calculated 
      return(0.0);
     }
   return(MA[0]);
  }
//+------------------------------------------------------------------+


E il risultato (il mirino nello screenshot è impostato sulla barra #1):

iMAGet

File:
iMAGet.mq5  7 kb
 
Vladimir Karputov:

Avete visto la guidaiMA?

Primo passo: dichiarare una variabile nella "testata" per memorizzare il manico dell'indicatore iMA:

Secondo passo: creare l'handle dell'indicatore in OnInit().

E il risultato (il mirino nello screenshot è impostato sulla barra #1):

Grazie per la risposta.

In MQL4 tutto è dichiarato in una funzione - quindi c'è un insieme di funzioni che vengono attivate a seconda delle impostazioni EA. Se non mi sbaglio, nel tuo caso la memoria sarà allocata per decine di indicatori diversi che il TS permette di utilizzare, il che non è razionale, o la memoria non sarà allocata?

 

È possibile chiamare una funzione di classe senza avere un oggetto specifico di quella classe? Quindi sarebbe qualcosa del genere:

class test
  {
public:
                     test(void);
                    ~test(void);
  public: void PrintInfo (){Print ("Class test");}
  };
//---
void OnStart()
  {
      test.PrintInfo() ;
  }

O è necessario creare un oggetto? Anche se questa funzione si riferisce alla definizione della classe stessa, piuttosto che a un'istanza di essa.

 

Se la funzione non ha bisogno di accedere alle variabili di classe, rendetela statica.

class test
{
public:
   test();
   ~test();

   static void PrintInfo()
   {
      Print( "Class test" );
   }
};

void OnStart()
{
   test::PrintInfo();
}
 
Koldun Zloy:

Se la funzione non ha bisogno di accedere alle variabili di classe, rendetela statica.

Grazie, è proprio quello che ci vuole.
 

Ottenere errori - cosa c'è di sbagliato? In MQL4 funziona...


   double arrFibo[17]=
     {
      0,
      0.236,
      0.382,
      0.5,
      0.618,
      0.764,
      1,
      1.236,
      1.382,
      1.5,
      1.618,
      2.0,
      2.236,
      2.382,
      2.5,
      2.618,
      2.764,
      3        //Всего уровней 17 + 0
     };
'{' - troppi inizializzatori TZ_Sky_and_Ground_V_04.mq5 2484 6