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

 
Alexey Viktorov:

Non sarebbe meglio leggere più attentamente la documentazione?

PORTA IL GRAFICO IN ALTO

Visualizza il grafico in cima a tutti gli altri grafici

bool w/o


Ciò significa che questa proprietà è in sola scrittura. E tu stai cercando di leggerlo.........

Inoltre non stai dando una risposta completa alla domanda

È uno script o un indicatore.
È un indicatore. E stampa il risultato immediatamente quando la finestra cambia, cioè può leggere.
 
Valeriy Yastremskiy:

E non capisco il senso del lamento. La condizione è sempre vera.

La condizione è sempre vera, ma il numero di grafici non è noto

 
Valeriy Yastremskiy:

Se non capisco cosa sta succedendo, stampo tutto quello che ho, a volte aiuta. E non capisco il senso del velo. La condizione è sempre vera.

Semmai, deve essere fatto staticamente, altrimenti si resetta

string symbol, printsimbol="";
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
 
MakarFX:
È un indicatore. E stampa immediatamente il risultato quando la finestra cambia, cioè può leggere.

Non pensi che si legga come un'idiozia? Anche se immutabile, è comunque una cosa senza senso.

Prova a stamparlo quando il programma cambia. Allora è importante sapere come cambia il grafico attivo. Se l'indicatore si trova sul grafico all'estrema sinistra, si passa a quello successivo a destra, poi a quello all'estrema destra e così caoticamente? O basta tracciare l'uscita dal grafico dove si trova l'indicatore e ritornarci?

 
Alexey Viktorov:

Non pensi che si legga come un'idiozia? Anche se immutabile, è comunque una cosa senza senso.

Prova a stamparlo quando il programma cambia. Allora è importante sapere come cambia il grafico attivo. Se l'indicatore si trova sul grafico all'estrema sinistra, si passa a quello successivo a destra, poi a quello all'estrema destra e così caoticamente? O basta rintracciare lasciando il grafico dove si trova l'indicatore e ritornandovi?

Non so cosa legge, ma stampa quello che ti serve

2021.03.16 09:33:25.650 Label USDCHF,M15: EURGBP
2021.03.16 09:33:25.148 Label USDCHF,M15: EURGBP
2021.03.16 09:33:24.647 Label USDCHF,M15: EURGBP
2021.03.16 09:33:24.145 Label USDCHF,M15: GBPCHF
2021.03.16 09:33:23.644 Label USDCHF,M15: GBPCHF
2021.03.16 09:33:23.142 Label USDCHF,M15: GBPCHF
2021.03.16 09:33:22.641 Label USDCHF,M15: USDCHF
2021.03.16 09:33:22.155 Label USDCHF,M15: USDCHF
2021.03.16 09:33:21.654 Label USDCHF,M15: USDCHF
2021.03.16 09:33:21.152 Label USDCHF,M15: EURGBP
2021.03.16 09:33:20.651 Label USDCHF,M15: EURGBP
2021.03.16 09:33:20.149 Label USDCHF,M15: EURGBP

Funziona su qualsiasi grafico (più a sinistra, più a destra, centrale) e su qualsiasi ordine di commutazione dei grafici

Prova

//+------------------------------------------------------------------+
//|                                                        Label.mq4 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetMillisecondTimer(500);
//--- indicator buffers mapping
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
      string symbol01;
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
         if(ChartGetInteger(currChart,CHART_BRING_TO_TOP,0)==true) 
           { 
            symbol01=ChartSymbol(currChart);      Print(symbol01);
           } 
         currChart=ChartNext(currChart);  i++;
        }
//--- 
  }
//+----------------------------------------------------------------------------+
 

Fatto in questo modo

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
         if(ChartGetInteger(currChart,CHART_BRING_TO_TOP,0)==true) 
           { 
            symbol01=ChartSymbol(currChart);
           } 
         currChart=ChartNext(currChart);  i++;
        }
   PrintLabel();
//--- 
  }
//+----------------------------------------------------------------------------+
void PrintLabel()
  {
   if(symbol02!=symbol01){symbol02=symbol01; Print(symbol02);}
   return;
  }

Risultato

2021.03.16 10:00:05.075 Custom indicator Label USDCHF,M15: removed
2021.03.16 10:00:05.060 Label USDCHF,M15: uninit reason 1
2021.03.16 10:00:00.046 Label USDCHF,M15: USDCHF
2021.03.16 09:59:55.486 Label USDCHF,M15: EURCAD
2021.03.16 09:59:54.498 Label USDCHF,M15: CADCHF
2021.03.16 09:59:53.511 Label USDCHF,M15: EURGBP
2021.03.16 09:59:52.994 Label USDCHF,M15: GBPCHF
2021.03.16 09:59:51.991 Label USDCHF,M15: EURUSD
2021.03.16 09:59:48.945 Label USDCHF,M15: USDCHF
2021.03.16 09:59:48.428 Label USDCHF,M15: initialized
2021.03.16 09:59:47.046 Custom indicator Label USDCHF,M15: loaded successfully

Grazie a tutti per il vostro aiuto!!!

 
MakarFX:

Non so cosa legge, ma stampa ciò che deve

Funziona su qualsiasi grafico (più a sinistra, più a destra, centrale) e su qualsiasi ordine di cambiamento del grafico

Prova

Legge 1 o 0. Non so quanto sia preciso, ma funziona sorprendentemente...

Allora ecco una soluzione pronta

/***************************Timer function***************************/
void OnTimer()
 {
  static long chart_ID = 0;
  string symbol01;
  long currChart = ChartFirst();
  while(currChart >= 0)
   {
    if(chart_ID != ChartGetInteger(currChart, CHART_WINDOW_HANDLE) && ChartGetInteger(currChart,CHART_BRING_TO_TOP,0) == 1)
     {
      chart_ID = ChartGetInteger(currChart, CHART_WINDOW_HANDLE);
      symbol01 = ChartSymbol(currChart);
      Print(symbol01, " ", EnumToString(ChartPeriod(currChart)), " ", chart_ID);
     }
    currChart = ChartNext(currChart);
   }
 }/*******************************************************************/
 
MakarFX:

Fatto in questo modo

Risultato

Grazie a tutti per il vostro aiuto!!!

Se ci sono due grafici dello stesso carattere o più,


non funzionerà.

 
MakarFX:

Non so cosa legge, ma stampa ciò che deve

Funziona su qualsiasi grafico (più a sinistra, più a destra, centrale) e su qualsiasi ordine di cambiamento del grafico

Prova

void OnTimer()
{
   long currChart=0,prevChart=ChartFirst();
   int i=0,limit=100;
   static long CurrID;
   while(i<limit) { // у нас наверняка не больше 100 открытых графиков
      currChart=ChartNext(prevChart); // на основании предыдущего получим новый график
      if(ChartGetInteger(currChart,CHART_BRING_TO_TOP))
         break;
      if(currChart<0) break;          // достигли конца списка графиков
      prevChart=currChart;// запомним идентификатор текущего графика для ChartNext()
      i++;// не забудем увеличить счетчик
   }
   if(CurrID!=currChart) {
      Print(ChartSymbol(currChart));
      CurrID=currChart;
   }
}


P.S. Mentre scrivo, i codici sono già abbozzati :)

 
Alexey Viktorov:

Legge 1 o 0. Non so quanto sia affidabile, ma funziona sorprendentemente...

Allora ecco la soluzione.

Funziona, grazie.

Vitaly Muzichenko:


P.S. Mentre scrivo questo, il codice è già stato scritto :)

Salta la prima finestra del grafico.

Alexey Viktorov:

Se ci saranno due carte dello stesso carattere o più,

non funziona

Funziona semplicemente come dovrebbe. Il punto è stampare se un carattere cambia!