Fonctions utiles de KimIV - page 105

 
zennon:
La fonction MovingInWL() passe simplement en revue toutes les positions ouvertes sans tenir compte des filtres d'entrée sy, op, mn. Ceci est également vrai pour l'exemple d'EA ci-joint (page 55).
Il passe par quoi ? ! pour réinitialiser le stoploss et envoie le tout à la fonction Modiforder
 

Aide pour les inintelligents.

Également "Fonctions très utiles de KimIV", bien que ne provenant pas de ce fil de discussion - lecture des fichiers INI.

Fragment (suffisant pour compiler mais pas tout pour la lisibilité) de KimIV inluder

//+------------------------------------------------------------------+
//|                                                     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);
  }

Le script qui appelle la fonction de lecture d'un fichier INI

#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);
  }

Le fichier INI lui-même

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

Ce que nous n'aimons pas est un fragment du journal

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

La question est de savoir pourquoi. Les fonctions semblent être décrites correctement. Lorsque je lis (après tous les appels) et que j'imprime ensuite le double (Volume), toutes les variables deviennent égales à-0.06.

Bild 225.

 
KimIV:

La fonction ArrayAvg().

Cette fonction renvoie la moyenne arithmétique des éléments du tableau.

    for (i=0; i<k; i++) s+=x[i];
    if (k>0) s/=k;
    • x - Un tableau d'éléments de type double.
    pourquoi ne pas utiliser iMA ?
     
    KimIV:

    Fonction CorrectTF().

    Adapte le paramètre d'entrée à l'horizon temporel valide le plus proche et renvoie sa valeur.
      if (TimeFrame>=PERIOD_M5  && TimeFrame<PERIOD_M15) return(PERIOD_M5);
      if (TimeFrame>=PERIOD_M15 && TimeFrame<PERIOD_M30) return(PERIOD_M15);

    14 n'est-il pas plus proche de 15 que de 5 ?

    Par exemple, j'ai entré 50 pour l'horloge au lieu de 60. Eh bien... J'ai un peu manqué.

    et la fonction retournera 30. cool :)

     
    eddy:

    14 n'est-il pas plus proche de 15 que de 5 ? et la fonction renverra 30. cool :)

    Il fonctionne selon une règle claire : tout ce qui se trouve entre deux TF est remplacé par la valeur du TF le plus petit.
    Si vous ne l'aimez pas, postez votre règle et votre code.
     
    Je comprends la règle dans le code, mais la description du code a une règle différente
     
    KimIV:

    Fonction GetExtremumZZZPrice().

    Cette fonction recherche un extremum de l'indicateur ZigZag standard personnalisé et renvoie son niveau de prix. La fonction accepte les paramètres facultatifs suivants :

    • sy - Nom de l'instrument. "" ou NULL - symbole actuel. La valeur par défaut est NULL.
    • tf - Période de temps. Valeur par défaut 0 - symbole actuel.
    • ne - Nombre extrême. 0 - dernier, 1 - précédent, 2 - précédent, etc.
    • dp, dv, bs - paramètres de ZigZaga : ExtDepth, ExtDeviation, ExtBackstep.


    Je voulais utiliser cette fonction mais j'ai rencontré la situation suivante : lorsqu'un nouvel extremum apparaît, le niveau de prix ne change pas immédiatement mais reste le même pendant un certain temps. Cela me perturbe pendant les tests. Comment le réparer ?

     
    S'il vous plaît dites-moi où est la liste de toutes les fonctions, je pense qu'il y a une fonction pour calculer lespositions consécutives perdantes-fermées - vous en avez besoin pour la martingale.
     
    eddy:
    Je comprends la règle dans le code, mais la description du code a une règle différente
    Merci ! J'ai corrigé la description... (dans mon propre code... Peu importe, corrigez-le aussi))))
    Raison: