Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 159

 
hoz:

C'è una funzione. Ecco i suoi inizi:

Ecco il succo del discorso. Il secondo parametro formale della funzione ha un valore predefinito di 0. Quindi, secondo la documentazione, posso chiamare questa funzione senza il secondo parametro, perché sarà predefinito a 0.

Lo chiamo così:

Il compilatore si acciglia:

Perché?

Spostatelo dalla libreria al codice di cosa-fare. Se l'errore sparisce, significa che c'è un problema con la corretta connessione della libreria nel codice wha-tam-do. Prima di tutto.

Se non va via - guarda quali parametri sono passati alla funzione. Nell'idea, ci dovrebbe essere un parametro di tipo stringa con il nome della coppia di valute. Basta passare Symbol()

 
artmedia70:

Spostatelo dalla biblioteca al codice wha-tam-do. Se l'errore scompare, significa che c'è un problema con la corretta connessione della libreria nel codice what-me-do-code. Prima di tutto.

Se non va via - guarda quali parametri sono passati alla funzione. Nell'idea, ci dovrebbe essere un parametro di tipo stringa con il nome della coppia di valute. Basta passare Symbol().



Aiuta molto. Ci penserò.

Questo è così strano. Perché dovrei cercare nella libreria se il passaggio dei parametri è corretto? L'errore è scritto chiaramente. O non c'è niente di specifico? Vorrei solo sapere cosa è necessario.

Questa funzione è presa in prestito, quindi la pubblico con i contatti dell'autore:

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем торговую информацию по символу                                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0)
{
//----
         if (fs_Symbol != bs_Symbol || fi_Ticket < 0)
         {
                  if (fi_Ticket > 0)
                  {
                     bs_Symbol = OrderSymbol();
                  }
                  else
                  {
                     bs_Symbol = fs_Symbol;
                  }
                  if (bs_Symbol == Symbol())
                  {
                      bi_SymDigits = Digits;
                      bd_SymPoint = Point;
                  }
                  else
                  {
                      bi_SymDigits = MarketInfo (fs_Symbol, MODE_DIGITS);
                      bd_SymPoint = MarketInfo (fs_Symbol, MODE_POINT);
                  }
        if (bd_SymPoint == 0.0)
        {
           bd_SymPoint = fGet_Point (fs_Symbol);
        }
                  bd_ProfitMIN = NDP (ProfitMIN_Pips);
         }
         if (fi_Ticket > 0)
         {
            fGet_OrderDetails (fi_Ticket);
         }
    //---- Получаем текущие цены по инструменту
    RefreshRates();
    bda_Price[0] = NDD (fGet_TradePrice (0, bb_RealTrade, bs_Symbol));
    bda_Price[1] = NDD (fGet_TradePrice (1, bb_RealTrade, bs_Symbol));
    bd_Spread = NDD (bda_Price[1] - bda_Price[0]);
//----
}

Ecco come l'ho importato:

#import "hoz_Base@Library.ex4"
    double ND (double v);
    string DToS (double v);
    string DToSByLots (double v);
    void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0);
#import

La chiamata ora è così:

fGet_MarketInfo (fs_Symbol);

Come si risolvono questi problemi?

 
hoz: Come si risolvono questi problemi?

Studiate la documentazione. Le librerie compilate non passano parametri per default - dovete passare TUTTI i parametri quando chiamate una funzione. Leggete attentamente. Estratto:

Poiché le funzioni importate sono esterne al modulo in fase di compilazione, il compilatore non può verificare che i parametri passati siano corretti. Pertanto, la composizione e l'ordine dei parametri passati alle funzioni importate devono essere accuratamente descritti per evitare errori di esecuzione. I parametri passati alle funzioni importate (sia da EX4 che dai moduli DLL) non possono avere valori predefiniti.
 
TarasBY:

Nessun parametro predefinito viene passato alle librerie compilate - è necessario passare TUTTI i parametri quando si chiama una funzione. Leggete attentamente. Estratto:

Poiché le funzioni importate sono esterne al modulo in fase di compilazione, il compilatore non può verificare che i parametri passati siano corretti. Pertanto, la composizione e l'ordine dei parametri passati alle funzioni importate devono essere accuratamente descritti per evitare errori di esecuzione. I parametri passati alle funzioni importate (sia da EX4 che dai moduli DLL) non possono avere valori predefiniti.

Ah, ecco. Vivi e impara! Grazie, lo terrò presente.
 

Quando si esegue l'ottimizzazione in MT4, abbiamo bisogno di ricevere informazioni su un passaggio nella scheda "Risultati dell'ottimizzazione" simili a quelle generate da un singolo passaggio nella scheda "Report".

Come può essere implementato?

 

Ho deciso di fare conoscenza con la biblioteca. Ho preso una parte di codice dal mio indicatore e l'ho messa nella funzione, e ho moltiplicato questa funzione e l'ho incollata in due file di libreria.

Ho chiamato il primo "indi.mqh" e il secondo semplicemente "djo.mq4".

int countbars(int& hist, int obrax, bool tikk)
{ 
 int z=0;
 static int PreBars=0; 
 static datetime BarTime=0;
 if (Bars == PreBars && tikk==false)return(-1);
 if (Bars < hist+obrax)  
 {
  if (Bars-obrax<=1) {Alert (" Недостатьньо історії");return(-1);}
  hist=Bars-obrax;
 }
 
 if (Bars-PreBars == 0 && BarTime==Time[0] && tikk==true) return(0);
 else  
 {
  if (Bars-PreBars == 1 && BarTime==Time[1]) z=1;
  else  z=hist;
 }
 PreBars = Bars;  
 BarTime=Time[0];
 return (z);
}

Per il punto: quando ci si riferisce al primo, tutto funziona come previsto;

 include <indi.mqh>

quando si sostituisce il primo con il secondo e si accede al secondo con un metodo:

#import "djo.ex4"  int countbars(int& hist, int obrax, bool tikk);  #import

Ma niente funziona affatto, nemmeno gli avvisi - da nessuna parte dopo l'avvio. E proprio ora e il terminale si è chiuso da solo ))

Come immagino che tutte le costanti siano reinizializzate ogni volta che accedo alla funzione importata?

Dove posso leggere dell'importazione di mql4 in dettaglio, quali bug sono stati risolti o meno e così via?

Grazie, vado a dormire............

 
ALXIMIKS:

Ho deciso di fare conoscenza con la biblioteca. Ho preso una parte di codice dal mio indicatore e l'ho messa nella funzione, e ho moltiplicato questa funzione e l'ho incollata in due file di libreria.

Ho chiamato il primo "indi.mqh" e il secondo semplicemente "djo.mq4".

Per il punto: quando ci si riferisce al primo, tutto funziona come previsto;

quando si sostituisce il primo con il secondo e si accede al secondo con un metodo:

Ma niente funziona affatto, nemmeno gli avvisi - da nessuna parte dopo l'avvio. E proprio ora e il terminale si è chiuso da solo ))

Come immagino che tutte le costanti siano reinizializzate ogni volta che accedo alla funzione importata?

Dove posso leggere dell'importazione di mql4 in dettaglio, quali bug sono stati risolti o meno e così via?

Grazie, vado a dormire............

È possibile passare parametri per riferimento. In questo caso, la modifica di tali parametri influenzerà le variabili corrispondenti nella funzione chiamata passata per riferimento. Non si possono passare elementi di array per riferimento. I parametri possono essere passati per riferimento solo entro i limiti di un singolo modulo, tale opportunità non è prevista per le funzioni di libreria. Per specificare che il parametro è passato per riferimento, il modificatore & deve essere posto dopo il tipo di dati. Ed ecco altri esperimenti.
 
Dimmi, ricevo un messaggio sonoro quando supero due medie scorrevoli. Quando viene aperto, questo messaggio sonoro viene ripetuto tante volte quanti sono stati gli incroci nella storia. Domanda. Come posso fare in modo che produca un messaggio solo per i segnali che sono stati generati nel tempo presente. Cioè, solo al momento e il segnale che è stato ricevuto letteralmente al momento...
 
Zolotai:
Dimmi, ricevo un messaggio sonoro quando supero due medie scorrevoli. Quando viene aperto, questo messaggio sonoro viene ripetuto tante volte quanti sono stati gli incroci nella storia. Domanda. Come posso fare in modo che produca un messaggio solo per i segnali che sono stati generati nel tempo presente. Cioè, solo al momento e il segnale che è stato ricevuto letteralmente al momento...
All'apertura di cosa? Sembra un indicatore. Ci sono molte soluzioni. Tutto dipende dal codice.
 
artmedia70:
Quando si apre cosa? Sembra un indicatore. Ci sono molte soluzioni. Tutto dipende dal codice.


Non ha niente a che fare con il codice. Ho solo bisogno della condizione giusta. La questione è se possiamo conoscere il tempo della barra attuale. Come faccio a sapere l'ora del bar?