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

 
Алексей Барбашин:

void OnTick() { int period = 15; int timeis = returntick(period, 1).curtime; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)); Qui è dove cerco di distruggere il puntatore }


Non è del tutto chiaro cosa esattamente possa essere distrutto qui. Non c'è da stupirsi che la memoria si disperda. Cos'è un puntatore? Un puntatore è un riferimento all'indirizzo di memoria dove è memorizzata la variabile dinamica creata. Essenzialmente, si chiama la procedura di ottenere un puntatore alla variabile di classe, in questa procedura l'oggetto di classe viene creato, messo in memoria, poi il puntatore viene restituito alla funzione di ottenere i tick e .... viene distrutto quando si esce dalla funzione. Notate che il puntatore viene distrutto, ma la memoria non viene cancellata! E ad ogni nuovo tick si consuma sempre più memoria! Per evitare questo punto nel vostro codice, dovreste prima di tutto rimuovere l'abbreviazione e mettere il puntatore in un'altra variabile:TickReturn* temptick =returntick(period, 1);// ottenere il puntatore e metterlo in una variabile int timeis = temptick.curtime; // Ottieni il valore richiesto dall'oggetto tramite il puntatore ...... delete temptick; // Distruggi il puntatore e libera la memoria

E prima di distruggere il puntatore, è meglio controllare se è corretto per evitare l'errore di cancellazione.

Nel complesso, non mi preoccuperei dei puntatori e della classe in particolare, poiché il compito è molto più facile in realtà e non c'è bisogno di usare la classe. Create una struttura con i campi necessari, dichiarate una variabile globale con il tipo di questa struttura, fate una funzione per aggiornare le informazioni in questa struttura ad ogni tick e usatela per raccogliere ciò che vi serve, perché la variabile sarà globale, non avrete bisogno di usarla nelle funzioni e non avrete bisogno di puntatori.


Grazie, mi sono ricordato perché sono passato alla stenografia, la variabile non viene aggiornata nei loop (beh, ovviamente la funzione non viene chiamata) e devo crearne una nuova per ogni starnuto, e poi ucciderla. In ogni caso, è più facile passare da returntick a switch.

 
Vitaly Muzichenko:

Invia una richiesta di posta al server con il numero di conto

Sul server, controlla il numero in entrata contro tutte le linee del file CSV, e se c'è una corrispondenza, allora da questa linea nel file invia una risposta al terminale. Tutto ciò che rimane è leggere la risposta dal server nel terminale e visualizzarla sul grafico.

In generale, è più facile implementare queste cose su MySQL che su file.


Grazie per la risposta, Vitaly!

Sto cercando di capirlo da tre giorni, ma non è così lontano (sono un principiante - all'inizio della mia carriera)...

Può descriverlo più dettagliatamente? Con qualsiasi esempio...

Scusate la mia mancanza di comprensione...

 

E un'altra domanda...

Volevo che il Beam disegnasse una linea dal prezzo corrente - alla fine del giorno alla fine del livello (23:59) (white2), ma disegna alla fine del giorno (come richiesto), ma non al livello (white2), e va in profondità fino al grafico di confine.

E io gli do uno qualsiasi dei livelli (rosso1, rosso2, ecc.), ma continua a raggirare su o giù all'infinito. Ho scritto correttamente che inizia sempre Beam daHigh[0], cioè con una nuova candela si sposta su una nuova candela (cioè segue il prezzo) o disegna Beam solo una volta? I livelli si ottengono da CSV. Per favore, aiutatemi...

if(уровни==Daily)
        {
         double red1 = d_input[0];
         double red2 = d_input[1];
         double blue1 = d_input[2];
         double blue2 = d_input[3];
         double white = d_input[4];
         double signal= d_input[5];
         double z_1 = d_input[6];
         double z_2 = d_input[7];
         double white2 = d_input[8];
                 
         t0 = дата_уровней + 1*PeriodSeconds(PERIOD_M1);
         t1 = дата_уровней + 24*PeriodSeconds(PERIOD_H1);

         Draw_Level("red1", red1, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("red2", red2, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("blue1", blue1, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("blue2", blue2, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("white", white,c_day_3, STYLE_SOLID,2);
         Draw_Level("white2", white2,c_day_3, STYLE_DOT,0);
        
         Draw_Level("green1",z_1, c_day_4, STYLE_SOLID,2);
         Draw_Level("green2",z_2,c_day_3, STYLE_DOT,2);
               
        string name = "Ray";
         int window = 0, time1 = (int)Time[0], time2 = (int)StrToTime(txt_data+" 23:59");
          double price1 = High[0], price2= white2;
         
          ObjectCreate(name, OBJ_TREND, window, time1, price1, time2, price2);
          ObjectSet(name, OBJPROP_COLOR, clrAqua);
          ObjectSet(name, OBJPROP_RAY_RIGHT, false);
          ObjectSet(name,OBJPROP_WIDTH,1);
          ObjectSet(name,OBJPROP_STYLE,2);
              
        
        if(показ_не отработанных)
            if(!check_white_level(дата_уровней,white))
               draw_line(t0,white,c_day_3);
                 else(Draw_Level("white", white,c_day_3, STYLE_SOLID,1));// меняет толщину белой при достижении ценой
                
        }
 
MosheDayan:

E un'altra domanda...

Volevo che il Beam disegnasse una linea dal prezzo corrente - alla fine del giorno alla fine del livello (23:59) (white2), ma disegna alla fine del giorno (come richiesto), ma non al livello (white2), e va in profondità fino al grafico di confine.

E l'ho infilato in uno qualsiasi dei livelli (rosso1, rosso2, ecc.), ma continua a piovere su o giù all'infinito. I livelli si ottengono da CSV. Aiuto plz...

Scoprire (controllare) il valore di white2 con Alert o Print.
 
STARIJ:
Controllate il valore di white2 usando Alert o Print.
L'allarme scrive immediatamente "EURUSD ErrorFileOpen() for write" e tutti i livelli del giorno corrente spariscono... I livelli di ieri e tutti quelli precedenti sono ancora lì... Quindi... Il fascio di luce sullo spot inizia dove dovrebbe e va al livello del bianco2 di ieri, ma non alla fine della giornata, e oggi verticalmente verso il basso posso vedere visivamente che si ferma al livello del bianco2 di ieri.
 
MosheDayan:
Ho provato a controllare usando Alert e immediatamente scrive "EURUSD Error FileOpen() for writing" e tutti i livelli del giorno corrente spariscono... I livelli di ieri e tutti quelli precedenti sono ancora lì... Quindi... Il raggio sul punto inizia dove dovrebbe e va al livello del bianco2 di ieri, ma non alla fine della giornata, e oggi verticalmente verso il basso si può vedere visivamente che si ferma al livello del bianco2 di ieri.

Perché avete bisogno di accedere al file? Avete il valore white2 e lo emettete con Alert("white2 = ", white2) prima di usarlo;

 
STARIJ:

Perché avete bisogno di fare riferimento al file? Avete il valore di white2 e lo emettete con Alert("white2 = ", white2) prima di usarlo;

Grazie per il chiarimento.... Ecco cosa dice: white2 = 0,0

p.s. Sono io quello stupido... White2 = 0.0 è per altre coppie di valute che non hanno livelli in CSV. Ma ci sono livelli per EURUSD in CSV e Alert li mostra ieri (white2 1,1720) e oggi (white2 1,1810).

Il raggio inizia dove dovrebbe, ma va al livello del white2 di ieri a 1.1720, invece del white2 di oggi a 1.1810 e non va alla fine del giorno 23:59, ma oggi si ferma al white2 di ieri, cioè 1.1720.

 

qualcosa di incomprensibile

ha descritto una funzione

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow");

Alert("NextTick=",NextTick);

//---------------------------


//---------------------------

Alert("NextTick=",NextTick);

Alert("end IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

ha ottenuto un messaggio prima del corpo con il punto e virgola {

Domanda: quale punto e virgola è previsto?

Si prega di spiegare ...

 
buyanov:

qualcosa di incomprensibile

ha descritto una funzione

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow");

Alert("NextTick=",NextTick);

//---------------------------


//---------------------------

Alert("NextTick=",NextTick);

Alert("end IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

ha ottenuto un messaggio prima del corpo con il punto e virgola {

Domanda: quale punto e virgola è previsto?

Per favore, spiega...


void IsBelow()

 
buyanov:

qualcosa di incomprensibile

ha descritto una funzione

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow");

Alert("NextTick=",NextTick);

//---------------------------


//---------------------------

Alert("NextTick=",NextTick);

Alert("end IsBelow");

}

//>>>>>>>>>>>>>>>>>>>>>>>

ha ottenuto un messaggio prima del corpo con il punto e virgola {

Domanda: quale punto e virgola è previsto?

Si prega di spiegare ...

La risposta è qui
Функции - Основы языка - Справочник MQL4
Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Функции - Основы языка - Справочник MQL4