[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 309

 
Zhunko, vielen Dank, alles kommt mit einem Bumerang zurück, auch das Gute.
 
artmedia70:
Ganz genau. Die globale Variable Reason erhält einen Wert, aber nicht in deinit(), sondern in init(), so dass Sie beim Ausführen von init() den Grund für die letzte Deinitialisierung sehen und auf der Grundlage des Wertes eine bestimmte Aktion durchführen können. Aber es funktioniert nicht so, wie es sollte.

Man hat Ihnen gesagt, wie Sie es machen sollen. In deinit() wird der Grund für die letzte Deinitialisierung ermittelt und über eine global deklarierte Variable weitergegeben. In init() wird der Wert der Variable überprüft und der Grund für die letzte Deinitialisierung ermittelt. Es funktioniert!!!

PS Offenbar ist nicht jedem klar, dass init()/deinit() die Werte von global deklarierten Variablen nicht ändern, es sei denn, dies wird in Anweisungen innerhalb von Funktionen ausdrücklich angegeben.

Eigentlich ist es besser, die Aufträge nicht in init() zu schließen. Dort funktioniert MarketInfo() oft nicht wie erwartet.

int    DeinitReason = 0; // определяем переменную на глобальном уровне
...
int init ()
{
...
      if ( DeinitReason == 3) // если смена таймфрейма
...
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason( );
   Print("DeinitReason ",DeinitReason);
//----
   return(0);
  }
 
Mislaid:
Man hat Ihnen gesagt, wie Sie es machen sollen. In deinit() wird der Grund für die letzte Deinitialisierung ermittelt und über eine global deklarierte Variable weitergegeben. In init() wird der Wert der Variable überprüft und der Grund für die letzte Deinitialisierung ermittelt. Es funktioniert!!!
Realisiert, dass Artyom ein Problem speziell mit dem Wechsel von TF M5 hat. Hier liegt ein Fehler vor. Wir sollten prüfen, ob dies der Fall ist. Vielleicht ist es ein Fehler in MT4.
 
Zhunko:
Hier wird vorgeschlagen, was Sie mit dieser Funktion machen würden. Ein Merkmal wie dieses wird in der Regel durch die Geschichte geführt.

Ich kann mir nicht einmal vorstellen, die Funktion in einer Schleife laufen zu lassen...
 
hoz:

Ich kann mir nicht vorstellen, dass die Funktion in einer Schleife laufen würde...

Bitte sehr:
for(i=OrdersTotal()-1;i>=0;i--){
    Print(GetOrderInfo(i,OrderMagic,.....));// вызов пользовательской функции 
}

for(i=0;i<OrdersTotal();i++){/// вызов функции "ордерс тотал" на каждой итерации

}
 
Zhunko:
Ich habe festgestellt, dass Artem ein Problem mit dem Wechsel von M5 TF hat. Hier liegt ein Fehler vor. Ich möchte überprüfen, ob dies der Fall ist. Vielleicht ist es ein Fehler von MT4.

Nein, das ist kein Fehler. Hier ist der EA. Änderung des Zeitrahmens von M1 auf H1

//+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

int    DeinitReason = 0; // определяем переменную на глобальном уровне
int init ()
{
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason( );
   Print("DeinitReason ",DeinitReason);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+ 
19:20:02 111 CADJPY,M15: initialisiert
19:20:09 111 CADJPY,M15: DeinitReason 3
19:20:09 111 CADJPY,M15: deinitialisiert
19:20:09 111 CADJPY,M15: uninit Grund 3
19:20:09 Supertrend[1] CADJPY,M15: deinitialisiert
19:20:09 Supertrend[1] CADJPY,M15: uninit Grund 3
19:20:09 HLC CADJPY,M15: deinitialisiert
19:20:09 HLC CADJPY,M15: uninit Grund 3
19:20:09 AMA optimiert1 CADJPY,M15: deinitialisiert
19:20:09 AMA optimiert1 CADJPY,M15: uninit Grund 3
19:20:09 AMA optimiert1 CADJPY,M15: deinitialisiert
19:20:09 AMA optimiert1 CADJPY,M15: uninit Grund 3
19:20:09 Supertrend[1] CADJPY,H1: initialisiert
19:20:09 HLC CADJPY,H1: initialisiert
19:20:09 AMA optimiert1 CADJPY,H1: initialisiert
19:20:09 AMA optimiert1 CADJPY,H1: initialisiert
19:20:09 111 CADJPY,H1: initialisiert
 
Mislaid:

Nein, das ist kein Fehler. Hier ist der EA. Änderung des Zeitrahmens von M1 auf H1

Das ist gut! Ich habe auch eine Menge Gründe für die Deinitialisierung.

Verlegt:

Eigentlich ist es besser, die Aufträge nicht in init() zu schließen. Dort funktioniert MarketInfo() oft nicht wie erwartet.

Ja. Das können Sie nicht. Das steht in der Hilfe.

hoz:

Ich kann mir nicht einmal vorstellen, dass die Funktion in einer Schleife laufen würde...
Das ist Routine.
 
Zhunko:

Das ist gut! Denn auch ich habe viel mit den Gründen für die Deinitialisierung zu tun.

Ja, das können Sie nicht. Dies ist in der Hilfe beschrieben. Das ist etwas ganz Alltägliches.

Hier ist die letzte Variante zu prüfen. Die vorherige Version war nicht sehr erfolgreich, da init()/deinit() sich manchmal nicht mit print() anfreunden können

//+------------------------------------------------------------------+
//|                                                          111.mq4 |
//|                      Copyright © 2006, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

int    DeinitReason = 0; // определяем переменную на глобальном уровне
bool firststart = true;
int init ()
{
}

int deinit()
  {
//----
   DeinitReason = UninitializeReason( );
   firststart = true;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
  if ( firststart )
  {
      Print( "DeinitReason ", DeinitReason, " ", Period( ) );
      firststart = false;
  }
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Ich habe mich gefragt, wie man eine Funktion schreibt. Die Idee ist, dass, wenn N Kerzen in eine bestimmte Richtung zurücklaufen, die Anzahl der Kerzen berechnet werden soll. ABER. Hierfür gibt es mehrere Bedingungen, oder genauer gesagt, es wird im Laufe der Zeit eine Liste von ihnen geben.

Nehmen wir zum Beispiel an, der Trend ist abwärts gerichtet,... ...geht ein Pullback nach oben. Ich möchte, wenn 5 Candlesticks nach oben ging, und jede Kerze war bullish, und, zum Beispiel, die Größe der einzelnen Candlestick war größer alsi_sizeOfCurrBar, und einige andere Bedingungen, dann Ausgabe der Anzahl der kontinuierlich bullish Bars, und geben Sie einige Ergebnis von der Funktion.

Wie schreibt man ihn am besten? Im Moment habe ich angefangen zu schreiben, und ich verstehe, dass ich es durch eine Schleife von Bars laufen sollte, und irgendwie sollte ich die Ansicht in der Tiefe der Geschichte nicht durch eine feste Anzahl von Bars, sondern von Bars, mit den Parametern, die wir in durch Bedingungen interessiert sind zu begrenzen.

Hier ist, was ich habe, bekommen:

int LastCandlesType()
{
   bool up,    // Свеча направлена вверх
        dn;    // Свеча направлена вниз
   int cnt;    // Счётчик идущих друг за другом бычьих свечей
   
   for (int i=Bars-1; i>=Bars-6; i--)
   {
      if ((Close[i] - Open[i]) <= i_sizeOfCurrBar * Point)    // Пропускаем все бары, размера меньше заданного внешним параметром.
          continue;
      
      if (Close[i] > Open[i])                               // 
          up = true;

      cnt++;
   }
   if (cnt == 5)
       return (BULL_CANDLES);
}

Im Moment gehen wir nur vom vorletzten Takt bis zum Takt mit Index 6, also 5 Takte hintereinander. Aber ich möchte, dass mein Expert Advisor nur nach den Bars sucht, die bullish sind, und nicht nach allen Bars in einer Reihe. Wie kann sie angemessen umgesetzt werden?

Ich habe gewissermaßen korrekt nach Größe gefiltert.

Und wenn alles schon geschrieben ist, berechnet der Zähler die Anzahl der fortlaufenden Balken mit den Parametern nht,etvsvb und wenn es genug solcher Balken gibt, wird ein Wert der Funktion zurückgegeben.

 
Mislaid:

Man hat Ihnen gesagt, wie Sie es machen sollen. In deinit() wird der Grund für die letzte Deinitialisierung ermittelt und über eine global deklarierte Variable weitergegeben. In init() wird der Wert der Variable überprüft und der Grund für die letzte Deinitialisierung ermittelt. Es funktioniert!!!

PS Offenbar ist nicht jedem klar, dass init()/deinit() die Werte von global deklarierten Variablen nicht ändern, es sei denn, dies wird in Anweisungen innerhalb von Funktionen ausdrücklich angegeben.

Eigentlich ist es besser, die Aufträge nicht in init() zu schließen. Dort funktioniert MarketInfo() oft nicht wie erwartet.

Und wo sehen Sie mich in init() Positionen schließen? Ich habe eine Frage zum Löschantrag gestellt, aber wo ich sie lösche - das habe ich nicht gesagt, geschweige denn gefragt. Warum glauben Sie das?
Grund der Beschwerde: