Nützliche Funktionen von KimIV - Seite 105

 
zennon:
Die Funktion MovingInWL() geht einfach durch alle offenen Positionen, unabhängig von den Eingabefiltern sy,op,mn. Dies gilt auch für das beigefügte Beispiel EA (Seite 55).
Es geht durch, wozu?! um den Stoploss zurückzusetzen und sendet alles an die Modiforder-Funktion
 

Hilfe für die Unintelligenten.

Auch "Sehr nützliche Funktionen von KimIV", wenn auch nicht aus diesem Thread - Lesen von INI-Dateien.

Fragment (genug zum Kompilieren, aber nicht alles für die Lesbarkeit) von KimIV includer

//+------------------------------------------------------------------+
//|                                                     IniFiles.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|   25.04.2006  Библиотека функций для работы с INI-файлами.       |
//+------------------------------------------------------------------+
#property library
#import "kernel32.dll"
  int GetPrivateProfileStringA
      ( string SectionName,    // Наименование секции
        string KeyName,        // Наименование параметра
        string Default,        // Значение по умолчанию
        string ReturnedString, // Возвращаемое значение параметра
        int    nSize,          // Размер буфера под значение параметра
        string FileName);      // Полное имя файла
  int WritePrivateProfileStringA
      ( string SectionName,    // Наименование секции
        string KeyName,        // Наименование параметра
        string sString,        // Записываемое значение параметра
        string FileName);      // Полное имя файла
#import
//+------------------------------------------------------------------+
//| Параметры:                                                       |
//|   FileName    - полное имя файла                                 |
//|   SectionName - наименование секции                              |
//|   KeyName     - наименование параметра                           |
//|   Default     - значение параметра по умолчанию                  |
//+------------------------------------------------------------------+
string ReadIniString(string FileName, string SectionName, string KeyName, 
                     string Default = "")
  {
   string ReturnedString = "";
   int nValue = GetPrivateProfileStringA(SectionName, KeyName, Default, 
                                          ReturnedString, 255, FileName);
   if(nValue > 0)
       return(ReturnedString);
   else 
       return(Default);
  }

Das Skript, das die Funktion zum Lesen einer INI-Datei aufruft

#include <IniFiles.mqh>
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
  string strPair = "";
  string strTradeType = "";
  string Path = "C:\\TestIni";
  string Section = "TestSection";
  string strAction = ReadIniString(Path, Section, "Action");
  if(strAction == "Open")
  {
   strPair = ReadIniString(Path, Section, "Pair", "");
   Print(
         "Пара =   ", strPair
         );
   strTradeType = ReadIniString(Path, Section, "TradeType", "");
   Print("Акция ",
         "Пара =   ", strPair,
         "Тип =    ", strTradeType
         );
  }
  else
   Print("Действо не найдено");
   
//----
   return(0);
  }

INI-Datei selbst

[TestSection]
Action=Open
Pair=EURUSD
TradeType=Buy
Volume=-0.06

Was uns nicht gefällt, ist ein Fragment des Protokolls

12:49:14 Test IniFiles AUDUSD,H1: Пара =   EURUSD
12:49:14 Test IniFiles AUDUSD,H1: Акция Пара =   BuyТип =    Buy

Die Frage ist, warum? Die Funktionen scheinen korrekt beschrieben zu sein. Wenn ich lese (nach allen Aufrufen) und dann doppelt drucke (Volumen), werden alle Variablen gleich-0,06.

Bild 225.

 
KimIV:

Die Funktion ArrayAvg().

Diese Funktion gibt den arithmetischen Durchschnitt der Arrayelemente zurück.

    for (i=0; i<k; i++) s+=x[i];
    if (k>0) s/=k;
    • x - Ein Array von Elementen des Typs double.
    warum nicht die iMA?
     
    KimIV:

    Funktion CorrectTF().

    Passt den Eingabeparameter an den nächstgelegenen gültigen Zeitrahmen an und gibt seinen Wert zurück.
      if (TimeFrame>=PERIOD_M5  && TimeFrame<PERIOD_M15) return(PERIOD_M5);
      if (TimeFrame>=PERIOD_M15 && TimeFrame<PERIOD_M30) return(PERIOD_M15);

    Ist 14 nicht näher an 15 als an 5?

    Ich habe zum Beispiel für die Uhr 50 statt 60 eingegeben. Na ja... Ich habe es irgendwie vermisst.

    und die Funktion wird 30 zurückgeben. cool:)

     
    eddy:

    Ist 14 nicht näher an 15 als an 5? und die Funktion gibt 30 zurück. cool:)

    Es funktioniert nach einer klaren Regel: Alles, was zwischen den TFs liegt, wird durch den Wert der kleineren TF ersetzt.
    Wenn es Ihnen nicht gefällt, veröffentlichen Sie Ihre Regel und Ihren Code.
     
    Ich verstehe die Regel im Code, aber die Codebeschreibung enthält eine andere Regel
     
    KimIV:

    GetExtremumZZZPrice() Funktion.

    Diese Funktion sucht nach einem Extremum des standardmäßigen benutzerdefinierten ZigZag-Indikators und gibt dessen Kursniveau zurück. Die Funktion akzeptiert die folgenden optionalen Parameter:

    • sy - Name des Instruments. "" oder NULL - aktuelles Symbol. Der Standardwert ist NULL.
    • tf - Zeitrahmen. Standardwert 0 - aktuelles Symbol.
    • ne - Extreme Zahl. 0 - letzte, 1 - vorherige, 2 - vorherige, usw.
    • dp, dv, bs - ZigZaga-Parameter: ExtDepth, ExtDeviation, ExtBackstep.


    Ich wollte diese Funktion verwenden, bin aber auf folgende Situation gestoßen: Wenn ein neues Extremum auftaucht, ändert sich das Preisniveau nicht sofort, sondern bleibt eine Zeit lang gleich. Das stört mich beim Testen. Wie kann man das beheben?

     
    Bitte sagen Sie mir, wo die Liste aller Funktionen zu finden ist. Ich glaube, es gibt eine Funktion für die Berechnung von aufeinanderfolgendenPositionen mit Verlusten und Schließungen - man braucht sie für Martingale.
     
    eddy:
    Ich verstehe die Regel im Code, aber die Codebeschreibung enthält eine andere Regel
    Ich danke Ihnen! Ich habe die Beschreibung korrigiert... (an meiner Stelle...) Wen kümmert's, korrigieren Sie es auch)))