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

 

Ragazzi, per favore aiutatemi nel codice per cambiare il TF d1/settimana in qualsiasi altro.

So come cambiarlo in H1 o in minuti.

Ti interessa sapere come passare a m30, m15, m5?

//|                                               For__red_r2005.mq4 |
//|                                       Copyright © 2010, PapaYozh |
//|                                                                * |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2010, PapaYozh"
#property link      "*"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Coral
#property indicator_color2 CornflowerBlue
#property indicator_width1 2
#property indicator_width2 2

// ---- buffers ----
double BuffD[];
double BuffM[];
//+------------------------------------------------------------------+
int init()
{
   SetIndexBuffer(0,BuffD);
   SetIndexEmptyValue(0,EMPTY_VALUE);
   SetIndexStyle(0,DRAW_SECTION,EMPTY,EMPTY);

   SetIndexBuffer(1,BuffM);
   SetIndexEmptyValue(1,EMPTY_VALUE);
   SetIndexStyle(1,DRAW_SECTION,EMPTY,EMPTY);
   
   return(0);
} // init()
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
} // deinit()
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
int start()
{
   int    shift;

   shift = Bars - 1 - IndicatorCounted();
   for ( ; shift>0 ; shift-- )
   {
      if ( TimeDayOfYear(Time[shift]) != TimeDayOfYear(Time[shift-1]) )
      {
         BuffD[shift]   = Close[shift];
         if ( TimeDayOfWeek(Time[shift-1]) == 1 )
            BuffM[shift]   = Close[shift];
         else
            BuffM[shift]   = EMPTY_VALUE;
      }
      else
      {
         BuffD[shift]   = EMPTY_VALUE;
         BuffM[shift]   = EMPTY_VALUE;
      }
   }
   return(0);
} // start()
//+------------------------------------------------------------------+
 
Ho bisogno di mettere in pausa l'indicatore per un po', ma la funzione Sleep(), come indicato nella guida, non può essere chiamata dall'indicatore personalizzato... C'è un altro modo?
 
Yevhenii Levchenko:
Ho bisogno di mettere in pausa l'indicatore per qualche tempo, ma la funzione Sleep(), come menzionato nell'aiuto, non può essere chiamata dall'indicatore personalizzato... Ci sono altri modi?

output per condizione in OnCalculate() senza calcolare i valori dell'indicatore - il più semplice è il contatore di tick, un po' più complicato è usare un timer, funziona negli indicatori

 
Igor Makanu:

output per condizione in OnCalculate() senza calcolare i valori dell'indicatore - il più semplice è il contatore di tick, un po' più complicato è usare un timer, funziona negli indicatori

Grazie!

L'ho fatto con il timer. Questa opzione mi sembrava più facile...

 
Yevhenii Levchenko:

Grazie!

L'ha fatto con il timer. Questa opzione mi sembrava più facile...

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 int TickCount = 0;
   TickCount--;
   if(TickCount>0) return(rates_total);
   TickCount=10;
 
Igor Makanu:

Avevo completamente dimenticato le variabili statiche... Grazie :)

E se dichiarate una variabile ordinaria come una variabile globale, sarà di fatto la stessa di una variabile statica in un certo senso? Nel senso, sarà disponibile per cambiare da tutti i punti del programma?

 

Salve.

Potete dirmi se è possibile passare un array dinamico di tipo struttura per riferimento a una funzione?

Per esempio, per passare l'array struct_name_array[] a Func() per processarlo e riempirlo lì:

struct StructName {int x;
                   int y;} struct_name_array[];

void Func (int &x[],
           int &y[])
        {
        }

Come viene gestito esattamente il trasferimento, se possibile? Come sono formattati i parametri della funzione? Non riesco a usare le guide C++.

Grazie.

 
Mikhail Sobolev:

Per esempio, passate un array struct_name_array[] a Func() per essere processato e riempito lì:

//+------------------------------------------------------------------+
struct StructName
  {
   int               x;
   int               y;
  }
struct_name_array[];
//+------------------------------------------------------------------+
void OnStart()
  {
   ArrayResize(struct_name_array,5);
   for(int i=0;i<5;i++)
     {
      struct_name_array[i].x = i;
      struct_name_array[i].y = i*100;
     }
   Func(struct_name_array);
   for(int i=0;i<5;i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,struct_name_array[i].x,i,struct_name_array[i].y);
     }
  }
//+------------------------------------------------------------------+
void Func(StructName &s[])
  {
   for(int i=0;i<ArraySize(s);i++)
     {
      printf("%s : s[%d].x = %d , s[%d].y = %d",__FUNCTION__,i,s[i].x,i,s[i].y);
      s[i].x*=33;
      s[i].y*=12;
     }
  }
//+------------------------------------------------------------------+
 

Ciao!

Mi rendo conto che ho già infastidito molte persone qui con le mie stupide domande, quindi per favore siate indulgenti con quanto segue e spiegate ancora cosa c'è di sbagliato qui:

        if((op1-lo1)>50 && (cl1-lo1)<10)
        {  Alert("VertLine");
        string obj_name="VertLine";
        datetime time=Time[0];
        color col = clrGreen; 
        ObjectCreate(0,obj_name,OBJ_VLINE,0,time,0,0,0);
        ObjectSetInteger(0,obj_name,OBJPROP_COLOR,col);
        }

L'allarme viene emesso, ma non c'è una linea verticale. Qual è la ragione?

 
novichok2018:

Ciao!

Mi rendo conto che ho già infastidito molte persone qui con le mie stupide domande, quindi per favore siate indulgenti con quanto segue e spiegate ancora cosa c'è di sbagliato qui:

L'allarme viene emesso, ma non c'è una linea verticale. Qual è la ragione?

Ho già capito il motivo, anche il riferimento stesso al forum. Credo di aver capito che avevo già tracciato una linea. Per disegnare altre linee, devo cancellare questa.

Motivazione: