Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 94

 
Vikon:
Ecco come chiamare una funzione all'interno di una classe: come privato: pubblico:, come passare dati alla classe e come ottenere un risultato dalla classe. Finora questo è tutto!

All'interno della classe, il risultato deve essere calcolato in qualche modo. E come farà la classe senza il vostro coinvolgimento a capire che ha bisogno di restituire il risultato ora, ma non in un altro momento?

Quindi, avete bisogno di un metodo all'interno della classe che possa essere chiamato dall'esterno. Quindi deve essere pubblico.

Anche se naturalmente si può fare un metodo privato che leggerà tutti i dati all'interno della classe e li scriverà nella variabile di classe, e il metodo pubblico chiamerà il metodo privato. Ma qualche metodo deve essere chiamato comunque. E cosa sarà contato lì nel metodo privato, quanto saranno complessi i calcoli, e quali variabili saranno coinvolte nei calcoli - tutto dipende da voi, e sotto la vostra responsabilità.

 
Vikon:
Questo è il punto, come chiamare una funzione all'interno di una classe, cioè come privato: pubblico:, come passare dati a una classe e come ottenere il risultato dalla classe. Finora, eccolo qui!
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      inputA=1;
input int      inputB=3;

class ASD
  {
private:
   // Здесь располагаются переменные и функции, доступные только внутри класса
public:
   int Add(int a,int b)
     {
      Print(__FUNCTION__,": Результат сложения: a",a," + b",b," = ",a+b);
      return(a+b);
     }
  } ar;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ar.Add( inputA, inputB );
  }
//+------------------------------------------------------------------+
Sembra che dovrebbe funzionare, non ho controllato se è corretto)
 
Alexey Kozitsyn:
Penso che dovrebbe funzionare, non l'ho controllato per vedere se è corretto)

Ecco a voi, grazie, sto già iniziando a muovermi -.

la sceneggiatura:

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   ar.sf ();
  }

classe:

class ASD
  {
private:
  int d;
  int g (int a_s,int a_d){d=a_s+a_d;return (d=a_s+a_d); }
public:
void fg (int a_s,int a_d)  { g (a_s,a_d); }
void sf ()                 {Alert (d);}
  };

Alert dà un risultato di 8, ma è un alert dalla classe, e ora ho bisogno di un alert dallo script

 
Vikon:

Ecco a voi, grazie, sto già iniziando a muovermi -.

la sceneggiatura:

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   ar.sf ();
  }

classe:

class ASD
  {
private:
  int d;
  int g (int a_s,int a_d){d=a_s+a_d;return (d=a_s+a_d); }
public:
void fg (int a_s,int a_d)  { g (a_s,a_d); }
void sf ()                 {Alert (d);}
  };

Alert dà un risultato di 8, ma è un avviso dalla classe, e ora ho bisogno di un avviso dallo script

Ok, dichiarate un metodo Alert() nella classe e chiamatelo ar.Alert(), anche se ora il metodo sf() fa lo stesso. Non ho capito bene cosa volete vedere dopo aver scritto un valore nel campo d?
 
Alexey Kozitsyn:
Ok, dichiarate il metodo Alert() nella classe e chiamatelo ar.Alert(), anche se ora il metodo sf() fa lo stesso. Non ho capito bene cosa volete vedere dopo aver scritto un valore nel campo d?
Se volete ottenere il valore di d senza chiamare il metodo sf(), allora dovete aggiungere un metodo pubblico int GetD() const { return( d ); }. E nello script scrivere Alert( ar.GetD() );
 
Alexey Kozitsyn:
Sembra che dovrebbe funzionare, non l'ho ancora controllato)

Tutti! Grazie mille! Capito -

sceneggiatura:

#include <ASD.mqh>
ASD ar;
void OnStart()
  {
   ar.fg (3,5);
   Alert ( ar.sf ());
  }

classe:

class ASD
  {
private:
  int d;
  int g   (int a_s,int a_d)  {return (d=a_s+a_d); }
public:
  void fg (int a_s,int a_d)  { g (a_s,a_d); }
  int sf  ()                 {return (d);}    
  
  };


Lo masticherò!

 

Non ricordo chi mi ha scritto in questo thread che il tester è rotto, ma posso rispondere che potrebbe anche essere rotto. O ingoia diversi pezzi di tempo o inizia a contare da un segmento arbitrario (anche se tutte le citazioni sono lì).

Penso che chi ha bisogno di vedere capirà.

 
Buon pomeriggio, potreste dirmi se la funzione MRoubd può essere importata da MSDN
?
(restituisce un numero arrotondato a un multiplo di un dato valore)

o come arrotondare, per esempio, 2285.13 per essere un multiplo di (0.25) 2285.00 __ 2285.25 ___ 2285.50 ___ 2285.75
 
Come faccio a sapere il leverage di una coppia e non di un conto?
 
SAMER:
come posso conoscere il leverage di una coppia piuttosto che di un conto?

La quantità di leva fornita:

long liverage=AccountInfoInteger(ACCOUNT_LEVERAGE);