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

 
Valeriy Yastremskiy #:
Con l'aiuto di Windows. Anche l'impostazione della grafica con caratteri grandi e piccoli dovrebbe essere regolata.

E se ci sono due monitor? Diversi...

 
Artyom Trishkin #:

E se ci sono due monitor? Diverso...

Poi bisogna capire la risoluzione dello schermo dove viene visualizzata l'immagine. L'oggetto può anche arrivare a 2 monitor) ma è un compito più complicato.
Sì, legarsi ai font standard del sistema tramite valori negativi diTextSetFont() è una buona soluzione.
 

Aiuta a ottimizzare l'indicatore. L'indicatore funziona ma lentamente, ci vuole molto tempo per ottimizzare l'EA con esso. Si prega di consigliare cosa è stato fatto di sbagliato? Come accelerare il suo lavoro?

//+------------------------------------------------------------------+
//|                                                     Momentum.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2022, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red

#property indicator_maximum 1
#property indicator_minimum 0

#property indicator_width1 2

//---- input parameters
extern int  MomPeriod    = 10;
extern int  WindowOfNorm = 45; // ширина окна нормирования в барах
extern int  MA_Length    = 10; // Average Period
extern int  MA_Mode      =  0; // Mode of Moving Average

//---- buffers
double NormBuffer[],MomBuffer[],AvgVolumes[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   SetIndexStyle(2,DRAW_NONE);
   SetIndexBuffer(2,NormBuffer);

   SetIndexStyle(1,DRAW_NONE);
   SetIndexBuffer(1,MomBuffer);
   
    SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,AvgVolumes);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Momentum                                                         |
//+------------------------------------------------------------------+
int start()
  {
   for(int i = 1;i <= 130; i++)
     {
      MomBuffer[i]=iMA(NULL,0,MomPeriod,0,0,0,i)*100/iMA(NULL,0,MomPeriod,0,0,0,i+MomPeriod);

      // нормирование
      NormBuffer[i]=Norm(WindowOfNorm,i);
      //-----
      AvgVolumes[i] = iMAOnArray(NormBuffer,0,MA_Length,0,MA_Mode,i);
     }
   return(0);
  }
//+------------------------------------------------------------------+

// нормирование
double Norm(int norm, int i) {
   // экстремумы
   double max=MomBuffer[ArrayMaximum(MomBuffer,norm,i)];
   double min=MomBuffer[ArrayMinimum(MomBuffer,norm,i)];
   // вычисление осциллятора
   double delta=max-min; // размах
   if(delta==0) return(1);
   else return((MomBuffer[i]-min)/delta);
  }

 
IrishDance #:

Aiuta a ottimizzare l'indicatore. L'indicatore funziona ma lentamente, ci vuole molto tempo per ottimizzare l'EA con esso. Si prega di consigliare cosa è stato fatto di sbagliato? Come farlo funzionare più velocemente?

Non è così che si fa. Basta prestare attenzione a questa linea

//|                      Copyright © 2004, MetaQuotes Software Corp. |

Il linguaggio di programmazione è cambiato così tanto in 18 anni che non dovrebbe funzionare affatto. Non capisco perché MQ non abbia ancora disabilitato del tutto int init() e int start()

 

Cosa c'è di sbagliato, con 2 parametri VLine nel tester dà errore 2022.03.24 18:24:27.615 TestGenerator: unmatched data error (volume limit 263 at 2022.03.18 14:30 exceeded)

Se il primo parametro time1 viene rimosso, tutto va bene.

bool FlagOpOr=false;
bool FlagClOr=false;
bool Work=true;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {

//---
     static bool FlagNDay=true, FlagVLRed=false,FlagVLBlue=false;
  static datetime Data = 0, NData=0;
  Data = Day();
 if(NData!=Data){FlagVLRed=true; FlagVLBlue=true;NData=Data;} 
if(FlagVLRed==true && Hour()==0){ VLine(1,clrRed); FlagVLRed=false;}
if(FlagVLBlue==true &&  Hour()==1){ VLine(1,clrBlue); FlagVLBlue=false;  }
      
    
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)//int deinit(void)void
  {
   int i;
   int obj_total=ObjectsTotal();
   for(i=obj_total-1;i>=0;i--)
     {
 string     sn=ObjectName(i);
      string Head=StringSubstr(sn,0,4);// Извлекаем первые 4 сим
      if(Head == "VLin")
        {
          ObjectDelete(sn);       

       }
     }
   
    Comment("");
   return;
  }
 
  //+------------------------------------------------------------------+
  bool VLine( int time1=0, color clr = clrRed ){
  string  var1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
     string NameLine="VLine_" +  "_"+var1;
            bool   created=ObjectCreate(0,NameLine,OBJ_VLINE,0,TimeCurrent(),0);
            if(created)// если создался - сделаем ему тюнинг
              {              
               //--- точка привязки сверху, чтобы не наезжать на бар
               ObjectSetInteger(0,NameLine,OBJPROP_STYLE,STYLE_SOLID);
               //--- последний штрих - покрасим
               ObjectSetInteger(0,NameLine,OBJPROP_COLOR,clr);
               //--- установим толщину линии 
               ObjectSetInteger(0,NameLine,OBJPROP_WIDTH,2); 
                
              }
              else return(false );time1=0;
              return(true);
              }
 

Buon pomeriggio a tutti. Ho 20-40 grafici aperti durante il trading. Devo spendere un sacco di tempo per trovare quello giusto in fondo a tutti gli strumenti o nella voce di menu in alto "finestra". Se potessi usare uno script per accelerarlo, metto uno script nei parametri di input, digito il simbolo necessario e si aprirà come se fosse stato trovato con gli occhi e cliccato. Come implementare una cosa del genere?

 
DanilaMactep #:

Buon pomeriggio a tutti. Ho 20-40 grafici aperti durante il trading. Devo spendere un sacco di tempo per trovare quello giusto in fondo a tutti gli strumenti o nella voce di menu in alto "finestra". Se potessi usare uno script per accelerarlo, metto uno script nei parametri di input, digito il simbolo necessario e si aprirà come se fosse stato trovato con gli occhi e cliccato. Come si può fare?

Come logica, lo script dovrebbe scoprire quanti grafici/finestre sono aperti e per quali strumenti, ricordarli (simboli e chart_idies) e poi, a seconda del numero di strumenti, disegnare un pannello con pulsanti con il nome dello strumento scritto sopra. Premendo il pulsante, il grafico con lo strumento desiderato cambia la sua proprietà in espanso (può essere collassato) e su tutto, e lo script si chiude.

 
Valeriy Yastremskiy #:

Logicamente, lo script dovrebbe scoprire quanti grafici/finestre sono aperti e per quali strumenti, ricordarli (simboli e chart_idies), poi, a seconda del numero di strumenti, disegnare un pannello con pulsanti con il nome dello strumento scritto sopra. Premendo il pulsante, il grafico con lo strumento desiderato cambia la sua proprietà in espanso (può essere collassato) e su tutto, e lo script si chiude.

Cattiva logica - che differenza fa - in quali pulsanti guardare - in basso, nella finestra del menu o nei pulsanti disegnati dallo script? Deve in qualche modo essere fatto in modo che si inserisca il simbolo desiderato nei parametri di input, e lo script ha aperto questa finestra per voi - così sarebbe più facile e veloce. Qualcuno ha un tale miracolo, per favore, lo condivida?
 

Ciao!

Sto cercando un EA, un operatore di rete.

Apre gli ordini di mercato in una griglia.

Chiude gli ordini quando la griglia raggiunge un certo profitto (%).

Ho visto un tale Expert Advisor e ora non riesco a trovarlo.

Ho visto un tale Expert Advisor e ora non riesco a trovarlo.

 
DanilaMactep #:
Cattiva logica - che differenza fa in quali pulsanti guardare - in basso, nella finestra del menu o nei pulsanti disegnati dallo script? Deve in qualche modo essere fatto così, che ha inserito il simbolo desiderato nei parametri di input, e lo script ha aperto questa finestra per voi - così più facile e veloce sarebbe. Qualcuno ha un tale miracolo, per favore, lo condivida?
Aprire una nuova finestra (si apre senza EA e con il modello predefinito) o alzare o espandere una finestra già aperta.
Guardate il codice allegato, c'è un'enumerazione del grafico e il disegno sul grafico per condizione. Forse vi aiuterà.
Motivazione: