Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1613

 

Aleksei Stepanenko dankt Ihnen.


Valeriy Yastremskiy Vielleicht liegt es daran, dass der Code unvollständig ist, da ich alle unnötigen Funktionen entfernt habe.


//+----------------------------------------------------------------------------+
//|                                                          AverageRange.mq4  |
//|                                                    Ким Игорь В. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//|  14.09.2005  Скрипт для расчёта:                                           |
//|              средней волатильности инструмента High-Low                    |
//|              среднего размера тела свечи       ABS(Open-Close)             |
//|              среднего размера тени свечи                                   |
//|                                                                            |
//|  17.11.2007  Возможность использования заданного количества баров          |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
#property  show_inputs

extern datetime BeginDateCalc = D'2013.01.01';
extern datetime EndDateCalc   = D'2013.12.31';
extern int      NumberOfBars  = 100;         


//+----------------------------------------------------------------------------+
//|  script program start function                                             |
//+----------------------------------------------------------------------------+
void start() {
   int    i;           
   int    b  = 0;     
   int    bb = 0;      
   int    h  = 0;      
   int    l  = 0;     
   int    s  = 0;      
   int    t  = 0;      
   string st = "";        

  for (i = Bars; i > 0; i--) {
    
    if ((Time [i] >= BeginDateCalc && Time [i] <= EndDateCalc && NumberOfBars <= 0)
    || (NumberOfBars > 0 && NumberOfBars >= i)) {
      
      if (bb == 0) bb = i;
      s += (High [i] - Low [i]) / Point;
      t += MathAbs (Open [i] - Close [i]) / Point;
      
      if (Open [i] > Close [i]) {
        h += (High [i] - Open [i]) / Point;
        l += (Close [i] - Low [i]) / Point;
      } else {
        h += (High [i] - Close [i]) / Point;
        l += (Open [i] - Low [i]) / Point;
      }
      
      b++;
    }
  }

  st =      "Начало: " + TimeToStr (Time [bb], TIME_DATE | TIME_MINUTES) + "\n";
  st = st + "Конец: " + TimeToStr (Time [bb - b + 1], TIME_DATE | TIME_MINUTES) + "\n";
  st = st + "Использовано баров: " + b + "\n";
  st = st + "Средняя волатильность: " + s / b + " п.\n";
  st = st + "Средний размер тела: " + t / b + " п.\n";
  st = st + "Средний размер верхней тени: " + h / b + " п.\n";
  st = st + "Средний размер нижней тени: " + l / b + " п.";

  Comment (st);
}
//+----------------------------------------------------------------------------+
Aleksei Stepanenko
Aleksei Stepanenko
  • www.mql5.com
Профиль трейдера
 
Valeriy Yastremskiy #:

Um ehrlich zu sein, verstehe ich Kims Logik nicht, warum die Bedingungen, dass die Balkenzeit den eingestellten Wert überschreitet und die Anzahl der berechneten Balken negativ ist mit ODER die Anzahl der berechneten Balken größer ist als die Anzahl der Balken Barz)))) Und gleichzeitig korrigiert es die benutzerdefinierten Parameter)

Und es wird nicht einmal eine Warnung angezeigt, dass der Benutzer etwas falsch gemacht hat)

Wenn NumberOfBars angegeben ist (größer als 0), wird die Zeit logischerweise ignoriert und nur die letzten Balken werden berücksichtigt.

Aber ein Benutzer kann einen Fehler bei den Daten machen, oder wenn es ein Loch im Zitat gibt, dann wird nichts gedruckt, es gibt nur DivideByZero zurück :-)

 
Hallo

kann jemand wissen, wie man Kurse von mt5 zu mt4 konvertieren? oder irgendwelche Möglichkeiten, um die Vorteile der besseren Geschichte von mt5 zu mt4 zu nehmen... außer TDS2😊
 
Pavel Malyshko #:
Hallo

kann jemand wissen, wie man Kurse von mt5 zu mt4 konvertieren? oder irgendwelche Möglichkeiten, um die Vorteile der besseren Geschichte von mt5 zu mt4 zu nehmen... außer TDS2😊
Export/Import
 
MakarFX #:
Export/Import

mt5 hat also ein anderes Format für Anführungszeichen. mt4 kann sie nicht lesen. Das ist das Problem...😎

 
Pavel Malyshko #:

mt5 hat also ein anderes Format für Anführungszeichen. mt4 kann sie nicht lesen. Das ist das Problem...😎

MT5 exportiert nach csv und mt4 liest alles

 
Oksana_Timakova Punkt;

Warum brauche ich die Division durch Punkt?

...

Ich kann es nur empfehlen:

s+=MathRound((High [i] - Low [i]) / Point);

Andernfalls erhalten Sie ein "oops")))

void OnStart(){
   double first=0.00001;
   double point=0.00001;
   for(uint i=0;i<10;++i){
      double value=NormalizeDouble(first+i*point,5);
      int res=(int)((value-first)/point);
      if (res!=i)
         PrintFormat("Alert: (%.5 f-%.5 f)/%.5 f!=%u, but ==%i",value,first,point,i,res);
   }
}
2021.09.12 11:06:26.041 Script test EURGBP,H1: removed
2021.09.12 11:06:26.038 test EURGBP,H1: uninit reason 0
2021.09.12 11:06:26.038 test EURGBP,H1: Alert: (0.00007-0.00001)/0.00001!=6, but ==5
2021.09.12 11:06:26.038 test EURGBP,H1: Alert: (0.00003-0.00001)/0.00001!=2, but ==1
2021.09.12 11:06:26.038 test EURGBP,H1: initialized
2021.09.12 11:06:25.998 Script test EURGBP,H1: loaded successfully
 

Wie kann das Indikatorfenster das Preisdiagramm vollständig ausblenden?

Ich kann es nicht über ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,0,0) machen, sondern muss zuerst die Größe des Indikators einstellen und dann die Höhe des Preisfensters dazu addieren:

int chart_height=(int)ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,0);
IndicatorSetInteger(INDICATOR_HEIGHT,200+chart_height);


Wenn Sie jedoch das untere Auftragsfenster öffnen, wird die Größe des Indikatorfensters größer als die Bildschirmgröße, und das Terem zeigt wieder den Preis an.

Ich weiß nicht, wie man das Auftragsfenster messen kann, außerdem ändert es sich ständig.

Was ist zu tun?

 

Bitte um Hilfe!

Hilfe bei der Übersetzung dieses Codes in mql5...

Ich möchte verstehen, wie man mit Griffen arbeitet.

//+------------------------------------------------------------------+
//|                                                Stochastic.v1.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers  2
#property indicator_plots    2
#property indicator_minimum -51
#property indicator_maximum  51
#property indicator_level1   0
#property indicator_levelstyle 0
#property indicator_levelcolor clrDimGray
//--- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDimGray
#property indicator_style1  STYLE_SOLID
#property indicator_width1  0
//--- plot Label2
#property indicator_label2  "Label2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  0
//--- input parameters
input int             WeekCount   = 1;     // Ограничение истории в неделях(0-вся история)
input int             StochPeriod = 14;
input ENUM_TIMEFRAMES TimeFrame   = PERIOD_CURRENT;
//--- indicator buffers
double   Label1Buffer[];
double   Label2Buffer[];
int      index=-1;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorDigits(2);
//--- indicator buffers mapping
   SetIndexBuffer(0,Label1Buffer);
   SetIndexBuffer(1,Label2Buffer);
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   ArrayInitialize(Label1Buffer,0);
   ArrayInitialize(Label2Buffer,0);
   int limit,i;
   int barPlus=iBarShift(_Symbol,_Period,iTime(_Symbol,PERIOD_W1,WeekCount));
   limit=rates_total-prev_calculated-1;
   if(WeekCount!=0)limit=barPlus-2;
   if(limit<1) return(0);
   for(i=limit;i>=0;i--)
     {
      index=iBarShift(_Symbol,TimeFrame,time[i],false);
      Label1Buffer[i]=iStochastic(_Symbol,TimeFrame,StochPeriod,3,3,MODE_SMA,1,MODE_MAIN,index)-50; 
     }
   for(i=limit;i>=0;i--)
     {
      Label2Buffer[i]=iMAOnArray(Label1Buffer,0,StochPeriod*3,0,MODE_SMA,i);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Ich würde Ihre Hilfe sehr schätzen.

 
MakarFX #:

Bitte um Hilfe!

Hilfe bei der Übersetzung dieses Codes in mql5...

Ich möchte verstehen, wie man mit Griffen arbeitet.

Ich würde Ihre Hilfe sehr schätzen.

Die einzige Frage bezieht sich auf diese Zeile

  Label1Buffer[i]=iStochastic(_Symbol,TimeFrame,StochPeriod,3,3,MODE_SMA,1,MODE_MAIN,index)-50; 
-50 redundant und Array