Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 465

 
kashi_ann:

Was mache ich falsch?

Verfügt dieser Indikator über keine Eingabeparameter? (Ich meine die Funktion iCustom(...))

(Ich hoffe, es fehlt hier nur eine schließende Klammer)

Und da Sie nur 2 Elemente kopieren, kopieren Sie sie in einen statisch zugewiesenen Puffer?

 
Lieber,

Ich habe den Code des Indikators für NT7 geöffnet
es enthält if ( v>=a && v<b)
Ich muss eine weitere Bedingung hinzufügen: nicht gleich 25

ist das richtig?
if ( v>=a && v<b && v<25 && v>25)
 

Artyom Trishkin
:

1. Kann iMaOnArray()
2. Vielleicht haben Sie sich das falsche Momentum angesehen? Indikatoren --> Oszillatoren --> Momentum
3. Ihre MAs im Unterfenster sind seltsam. Woher haben Sie das alles? Indikatoren --> Trending --> Gleitender Durchschnitt

Artyom, danke für die Antwort, es stellt sich heraus, dass es im Menü ist... Ich habe die falschen Indikatoren :) Ich habe im "Navigator"-Fenster auf Indikatoren\Momentum geklickt, aber es wird jedes Mal ein neues Unterfenster hinzugefügt und es sieht durcheinander aus.
Können Sie bitte vorschlagen, was den Prozessor weniger belasten würde, wenn der Vorgang häufig wiederholt wird?
1) Platzieren Sie meinen (komplexen) Indikator in einem Unterfenster und übernehmen Sie Werte von hier
oder
2) Lesen Sie den Indikatorwert durch OnTime(), mit (MQL4)iCustom.
Wenn ich es richtig verstehe, wird im Fall 2) der Indikator nicht im Fenster gezeichnet, sondern auf Anfrage berechnet. Ich verstehe jedoch nicht, ob der ausführbare Code des Indikators einmal oder jedes Mal geladen wird, wenn er aufgerufen wird ...
P.S. Der zweite Indikator wird noch über das Menü zum neuen Unterfenster hinzugefügt ... Wie kann man ihn zu einem bereits vorhandenen Indikator in einem Unterfenster hinzufügen?

 

Александр:
Уважаемые,

открыл код индикатора к NT7
вижу в нём if ( v>=a && v<b)
а мне надо добавить ещё условие: неравно числу 25

правильно ли будет следующее?
if ( v>=a && v<b && v<25 && v>25)

Das funktioniert nie, denn:"v<25 && v>25" ist immer falsch.

Sie sollte in etwa so aussehen:

v!=25

 
Yury Kirillov:

Das funktioniert nie, denn:"v<25 && v>25" ist immer falsch.

Sie sollte in etwa so aussehen:

v!=25

Danke! Ja:

wenn ( v>=a && v<b && (v<25|| v>25)) oderwenn ( v>=a && v<b && v!=25)

 
Александр:
Danke! Ein anderes Forum schlug vor: if ( ( v>=a && v<b && (v<25|| v>25))

In meinem Fall würde ich es so schreiben:

{if((v>=a)&&(v<b)&&(v!=25)) 
{
        //разные действия 
}}//if((v>=a)&&(v<b)&&(v!=25)) 

 
 
Oksana Berenko:

Verfügt dieser Indikator über keine Eingabeparameter? (Ich meine die Funktion iCustom(...))

(Ich hoffe, Sie haben nur die schließende Klammer übersehen)

Und da Sie nur 2 Elemente kopieren, kopieren Sie sie in einen statisch zugewiesenen Puffer?

Der Indikator hat eine Vielzahl von Eingabeparametern.

Ich verstehe nicht, wo der Klammerzusatz fehlt.

Ich fürchte, ich verstehe nicht, was ein statischer Puffer bedeutet. Wenn Sie mir das bitte erklären könnten.

 
Mike:

Artem, danke für die Antwort, es stellt sich heraus, dass es im Menü ist... Ich habe die Indikatoren an der falschen Stelle platziert :) Ich habe im Navigator-Fenster auf Indikatoren\Momentum geklickt, aber es wird jedes Mal einem neuen Unterfenster hinzugefügt, und es sieht durcheinander aus.
Können Sie bitte vorschlagen, was den Prozessor weniger belasten würde, wenn der Vorgang häufig wiederholt wird?
1) Platzieren Sie meinen (komplexen) Indikator in einem Unterfenster und übernehmen Sie Werte von hier
oder
2) Lesen Sie den Indikatorwert durch OnTime(), mit (MQL4)iCustom.
Wenn ich es richtig verstehe, wird im Fall 2) der Indikator nicht im Fenster gezeichnet, sondern auf Anforderung berechnet. Ich verstehe jedoch nicht, ob der ausführbare Code des Indikators einmal oder jedes Mal geladen wird, wenn er aufgerufen wird ...
P.S. Der zweite Indikator wird noch über das Menü zum neuen Unterfenster hinzugefügt ... Wie kann man ihn zu einem bereits vorhandenen Indikator in einem Unterfenster hinzufügen?

Wenn Sie einen Indikator über iCustom() aufrufen, werden seine Puffer nicht im Fenster angezeigt, aber soweit ich weiß (in alten Versionen von MT war es definitiv so), werden alle grafischen Objekte, die vom Indikator angezeigt werden, im Chartfenster angezeigt.

Um einen Indikator in einem Fenster eines anderen Indikators zu platzieren, ziehen Sie ihn mit der Maus aus dem Navigator-Fenster in das Fenster des gewünschten Indikators.

Ob der Prozessor weniger Zeit verbraucht, habe ich nicht überprüft, ich weiß es nicht.

 

Helfen Sie mir, die Bedingungen zu erstellen und die Idee zu Ende zu bringen. Wie einfach ist es, eine Markierung auf dem Diagramm entsprechend der Bedingung zu setzen?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
     
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
  //+------------------------------------------------------------------+
void OnTick()
{
        // скорость тиков
        int nTicksSpeed = TicksSpeed();
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int TicksSpeed()
{
        MqlTick oTicks[5];
        ZeroMemory(oTicks);
        
        int nTicksCopied = CopyTicks(_Symbol, oTicks, COPY_TICKS_TRADE, 0, 5);
        
        int nSpeed = 0;

        if(nTicksCopied > 0)
        {
                // скорость роста
                if(oTicks[0].bid > oTicks[1].bid)
                {
                        if(oTicks[4].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid && oTicks[2].bid > oTicks[3].bid && oTicks[3].bid > oTicks[4].bid)
                                nSpeed = 4;
                        else if(oTicks[3].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid && oTicks[2].bid > oTicks[3].bid)
                                nSpeed = 3;
                        else if(oTicks[2].bid > 0 && oTicks[0].bid > oTicks[1].bid && oTicks[1].bid > oTicks[2].bid)
                                nSpeed = 2;
                                
                        else if(oTicks[1].bid > 0 && oTicks[0].bid > oTicks[1].bid)
                                nSpeed = 1 ;
                        
                }
        
                // скорость снижения
                if(oTicks[0].bid < oTicks[1].bid)
                {
                        if(oTicks[4].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid && oTicks[2].bid < oTicks[3].bid && oTicks[3].bid < oTicks[4].bid)
                                nSpeed = -4;
                        else if(oTicks[3].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid && oTicks[2].bid < oTicks[3].bid)
                                nSpeed = -3;
                        else if(oTicks[2].bid > 0 && oTicks[0].bid < oTicks[1].bid && oTicks[1].bid < oTicks[2].bid)
                                nSpeed = -2; 
                        else if(oTicks[1].bid > 0 && oTicks[0].bid < oTicks[1].bid)
                                nSpeed = -1 ; 
                }
        }
        
        return(nSpeed);
}

//+------------------------------------------------------------------+

if( nTickSpeed==-1)  отмечаем это место на графике g_Label.Text("-1 ")

if( nTickSpeed==-2)  отмечаем это место на графике g_Label.Text("-2 ")

if (nTickSpeed==-3)  отмечаем это место на графике g_Label.Text("-3 ")

if( nTickSpeed==-4)  отмечаем это место на графике g_Label.Text("-4 ")




if( nTickSpeed==1)  отмечаем это место на графике g_Label.Text("1 ")

if( nTickSpeed==2)  отмечаем это место на графике g_Label.Text("2 ")

if( nTickSpeed==3)  отмечаем это место на графике g_Label.Text("3 ")

if( nTickSpeed==4)  отмечаем это место на графике g_Label.Text("4 ")
 

Sie könnten die "wenn" am Ende durch "wenn" ersetzen:

   switch(nTickSpeed)
     {
      case -4:
         g_Label.Text("-4");
         break;
      case -3:
         g_Label.Text("-3");
         break;
      case -2:
         g_Label.Text("-2");
         break;
      case -1:
         g_Label.Text("-1");
         break;
      case 1:
         g_Label.Text("1");
         break;
      case 2:
         g_Label.Text("2");
         break;
      case 3:
         g_Label.Text("3");
         break;
      case 4:
         g_Label.Text("4");
         break;
     }
Grund der Beschwerde: