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

 
CIAO GENTE! Aiuto prego avere un informatore, ha bisogno di essere rimosso ... Posso fare in modo di contare il profitto netto, senza swap, commissioni? Molto obbligato in anticipo
File:
 
ANDREY:

Buongiorno a tutti!
Domanda sull'istruzione for() in mql4. L'intestazione di questo operatore esegue la diminuzione e l'aumento sequenziale del valore di qualche variabile

for(int A=14; A>=0;A--) o for(int A=0; A<14;A++) o for(int A=0; A<14;A=+2) Si suppone che le dimensioni della variabile A aumentino o diminuiscano sempre nello stesso modo negli esempi dati 1 o 2.

DOMANDA: Se una variabile è un valore di timeframe (1 (minuto),5,15,30,60,240,1440), è ovvio che le dimensioni di aumento o diminuzione di questa variabile non possono essere uguali. In questo caso, come formattare l'intestazione for in modo che la variabile A inizi con 1 e poi sia incrementata ad ogni iterazione del numero di minuti richiesto, in modo non uniforme.

L'esempio con la variabile A è un caso speciale. In generale, come faccio a formattare un ciclo se il cambiamento della variabile nell'intestazione del ciclo deve essere fatto in modo non uniforme agli intervalli desiderati.
O c'è qualche altro operatore da usare per questi casi? Ma siccome mi sembra che gli altri operatori siano molto ingombranti in confronto a for. Per favore aiutatemi a risolvere il mio problema esattamente con l'aiuto dell'istruzione for, ed esattamente con la sua intestazione. Perché per risolvere il mio problema all'interno del corpo della dichiarazione for, naturalmente, è possibile utilizzare le dichiarazioni if, ma sarà molto ingombrante e la dichiarazionefor dovrà fare 1440 iterazioni per il bene di filtrare 7 valori corretti.
Grazie.

C'è un errore qui. Dovrebbe essere for(int A=0; A<14;A+=2)

La cosa più semplice che mi viene in mente è mettere i periodi nell'array

ENUM_TIMEFRAMES per[] = {PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1};
/********************Script program start function*******************/
void OnStart()
 {
  for(int i = 0; i < ArraySize(per); i++)
   {
    Print(EnumToString(per[i]));
   }
 }/******************************************************************/

/*****************************End program****************************/


 
Alexey Viktorov:

La cosa più semplice che mi viene in mente è segnare i periodi in un array

Grazie, potrebbe servire anche a me)

 
Alexey Viktorov:

C'è un errore qui. Dovrebbe essere for(int A=0; A<14;A+=2)

La cosa più semplice che mi viene in mente è memorizzare i periodi in un array


Grazie mille per il suggerimento. Si è rivelato molto più semplice di quanto pensassi.
Non capisco solo una cosa. Il nome dell'array è per. E ENUM_TIMEFRAMES è un identificatore di un tipo di variabile? Non ho trovato un tale identificatore in mql4 Reference. Ci sono solo

Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
  • docs.mql4.com
Перечисления - Целые типы - Типы данных - Основы языка - Справочник MQL4
 
ANDREY:

Grazie mille per il suggerimento. Si è rivelato molto più facile di quanto pensassi.
Solo una cosa non ho capito. Il nome dell'array per. E ENUM_TIMEFRAMES è un identificatore del tipo di variabile? Non ho trovato un tale identificatore in mql4 Reference. Ci sono solo

qui

Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Периоды графиков - Константы графиков - Константы, перечисления и структуры - Справочник MQL4
 
MakarFX:

qui

Ho capito bene che mi hai mandato informazioni su mql 5? O queste informazioni valgono anche per mql 4?

 
ANDREY:

Ho capito bene che mi hai mandato informazioni su mql 5? O queste informazioni valgono anche per mql 4?

L'ho corretto.
 
MakarFX:
L'ho corretto.

Grazie.

 
ANDREY:

Grazie.

Una piccola raccomandazione: abituatevi subito a ENUM_TIMEFRAMES e dimenticate la rappresentazione numerica come numero di minuti.

In primo luogo PERIOD_W1 è più informativo di 10080, è più chiaro che è una settimana.

In secondo luogo, in mql5 il periodo non corrisponde al numero di minuti e non sarà un problema inutile durante la migrazione a mql5, ed è inevitabile.

Bene, se avete davvero bisogno del numero di minuti in un periodo, allora potete

int  PeriodSeconds( 
   ENUM_TIMEFRAMES  period=PERIOD_CURRENT      // период графика 
   );
Print(PeriodSeconds(PERIOD_W1)/60); // = 10080
 
Ragazzi, aiutatemi a collegare un allarme all'indicatore.
#property copyright "Subu"
#property link      "http://www.google.com"
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#property indicator_chart_window

double UpArrow[];
double DownArrow[];
extern int ShiftArrow = -2;
extern bool FilterBullBearCandle = false;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(0, 233);
   SetIndexBuffer(0, UpArrow);
   SetIndexEmptyValue(0,0.0);
   SetIndexShift(0,ShiftArrow);
   SetIndexStyle(1, DRAW_ARROW, EMPTY,2);
   SetIndexArrow(1, 234);
   SetIndexBuffer(1, DownArrow);
   SetIndexEmptyValue(1,0.0);
   SetIndexShift(1,ShiftArrow);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit, i, counter;
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
//----
    for(i = 0; i <= limit; i++) {
      DownArrow[i] = 0;
      UpArrow[i] = 0;
   if(High[i+2]>High[i+1] && Low[i+2]>Low[i+1] && High[i+2]>High[i+3] && Low[i+2]>Low[i+3])
      if( Open[i+1]>Close[i+1] && Close[i+2] > Close[i+1])
         if(FilterBullBearCandle)
            {
               if( Open[i+2]>Close[i+2])
                  DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
             }
         else
             DownArrow[i] = High[i+2] +0.0003;//Low[i+2] + (High[i+2]-Low[i+2]);
   if(High[i+2]<High[i+1] && Low[i+2]<Low[i+1] && High[i+2]<High[i+3] && Low[i+2]<Low[i+3])
      if( Open[i+1]<Close[i+1] && Close[i+2] < Close[i+1])
          if(FilterBullBearCandle)
            {
               if( Open[i+2]<Close[i+2] ) 
                  UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
                  
            }
         else
            UpArrow[i] = Low[i+2] - 0.0003;//High[i+2] - (High[i+2]-Low[i+2]);
            
      }
//----
   return(0);
  }