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

 
mila.com:

Ich kann ihn mit meinem Zyklop nicht erkennen und seinen Indikator nicht richtig eingeben.

Ihr Skript gibt bei allen Einstellungen Null zurück. Es soll eine Drei zurückgeben, weil die Differenz zwischen dem ersten und dem dritten Balken nun 0,005 beträgt.

Vielleicht habe ich mich nicht klar ausgedrückt, aber ich möchte das in die Runde werfen.


double ma_etalon=iMA(NULL,0,...,i+1);

double ma_curr;

int shift;

for(shift=2;shift<5;shift++) {

    ma_curr=iMA(NULL,0,...,i+shift);

    if (ma_etalon-ma_curr<0.005) break; // ах ты чёрт, значение близко

}

if (shift==5) {

   // цикл досчитал до конца, то есть все значение довольно далеко
   // ... развернись плечо ...

}

 
mila.com:

Danke, aber irgendetwas stimmt hier nicht.


0,005 wird in was gemessen? (muss mit _Point multipliziert werden)
 

Vielen Dank für Ihre Hilfe, es hat funktioniert!)

 
mila.com:

Vielen Dank für Ihre Hilfe, es hat funktioniert!)

Ich frage mich nur, ob Sie so etwas brauchen?

 double prevMA=0,currMA=0;
 for(int i=1;i<=5;i++) {
  if(i==1) currMA=iMA(Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE,i);
  prevMA=iMA(Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE,i);
  if(MathAbs(prevMA-currMA)>0.0005) {
   // сюда пишем в буфер
   break;
  }
 }
 
Vitaly Muzichenko:

Ich frage mich nur, ob es dafür einen Bedarf gibt?

Ja, und wie fügen Sie dieses Design in die Hauptschleife des Indikators ein?

 
Vladimir Pastushak:

Ich habe Ihnen deutlich gesagt, dass Sie im Trailing 0 anstelle von take einsetzen.

Aktivieren Sie diese Option.


Es funktioniert!!! :)))).... Vielen Dank, dass Sie sich mit uns Verlierern abgeben)))))) Vielen Dank!)

 

Guten Tag.

Können Sie bitte beraten, wie iCustom verwendet werden kann, um einen Indikatorwert auf einem anderen Zeitrahmen mit einer Verschiebung zu erhalten?

D.h. ich arbeite auf M5, ich möchte den Indikatorwert von M15 und von der vorherigen Kerze auf M15 erhalten.

int start() 
{ 
  HistBar = History;
  int i,counted_bars = IndicatorCounted();
  if (counted_bars < 0) return (-1);
  if (counted_bars > 0) counted_bars--;
  int limit = MathMin(Bars-counted_bars,HistBar+100);

  for(i=limit; i>=0; i--)
   {  
   int HT1,HT2; 
        if (_Period == PERIOD_M1)  
            {HT1 = PERIOD_M5;
            HT2 = PERIOD_M15;}
        else
           {
           if (_Period == PERIOD_M5)  
            {HT1 = PERIOD_M15;
            HT2 = PERIOD_M30;}
           else
              {
              if (_Period == PERIOD_M15)  
               {HT1 = PERIOD_M30;
               HT2 = PERIOD_H1;}
               }
            }
   //MFI
   long Volume_0_0 = iVolume(NULL,0,i);
   long Volume_0_1 = iVolume(NULL,0,i+1);
   double BWMFI_0_0 = iBWMFI(NULL,0,i);
   double BWMFI_0_1 = iBWMFI(NULL,0,i+1);

   ///////// вопрос как тут указать правильно
   long Volume_1_0 = iVolume(NULL,HT1,i);
   long Volume_1_1 = iVolume(NULL,HT1,i+1);
   double BWMFI_1_0 = iBWMFI(NULL,HT1,i);
   double BWMFI_1_1 = iBWMFI(NULL,HT1,i+1);
   ....
}
 
LSM:

Guten Tag.

Können Sie mitteilen, wie iCustom verwendet werden kann, um einen Indikatorwert in einem anderen Zeitrahmen mit einer Verschiebung zu erhalten?

Ich arbeite auf M5, ich möchte den Indikatorwert von M15 erhalten, und ich möchte den Wert der vorherigen Kerze auf M15 erhalten.

Es genügt, die Dokumentation sorgfältig zu lesen

double  iCustom(
   string       symbol,           // имя символа
   int          timeframe,        // таймфрейм
   string       name,             // папка/имя_пользовательского индикатора
   ...                            // список входных параметров индикатора
   int          mode,             // источник данных
   int          shift             // сдвиг
   );
 
Alexey Viktorov:

Lesen Sie einfach die Dokumentation sorgfältig durch

Ich habe meine Frage geändert und den Code hinzugefügt. Es ist eine Schleife im Gange. Es ist nicht klar, was ich bekomme, wenn es in einer Schleife passiert.
 
LSM:
Ich habe meine Frage bearbeitet und Code hinzugefügt. Es ist eine Schleife im Gange. Es ist nicht klar, was ich bekomme, wenn es in einer Schleife passiert.

Ich beantworte meine eigene Frage, falls jemand sie braucht.)

   
   !!!!
   int y = iBarShift(NULL,HT1,Time[i]);
   
   long Volume_1_0 = iVolume(NULL,HT1,y);
   long Volume_1_1 = iVolume(NULL,HT1,y+1);
   double BWMFI_1_0 = iBWMFI(NULL,HT1,y);
   double BWMFI_1_1 = iBWMFI(NULL,HT1,y+1);