Funciones útiles de KimIV - página 105

 
zennon:
La función MovingInWL() simplemente recorre todas las posiciones abiertas independientemente de los filtros de entrada sy,op,mn. Lo mismo ocurre con el ejemplo de EA adjunto (página 55).
Pasa por qué?! para restablecer el stoploss y envía todo a la función Modiforder
 

Ayuda para los no inteligentes.

También "Funciones muy útiles de KimIV", aunque no de este hilo - lectura de archivos INI.

Fragmento (suficiente para compilar, pero no todo - para la legibilidad) 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);
  }

El script que llama a la función para leer un archivo 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);
  }

El propio archivo INI

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

Lo que no nos gusta es un fragmento del registro

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

La pregunta es ¿por qué? Las funciones parecen estar descritas correctamente. Cuando leo (después de todas las llamadas) y luego imprimo el doble (Volumen), todas las variables se vuelven iguales a-0,06.

Bild 225.

 
KimIV:

La función ArrayAvg().

Esta función devuelve la media aritmética de los elementos del array.

    for (i=0; i<k; i++) s+=x[i];
    if (k>0) s/=k;
    • x - Una matriz de elementos de tipo double.
    ¿por qué no usar iMA?
     
    KimIV:

    Función CorrectTF().

    Ajusta el parámetro de entrada al marco temporal válido más cercano y devuelve su valor.
      if (TimeFrame>=PERIOD_M5  && TimeFrame<PERIOD_M15) return(PERIOD_M5);
      if (TimeFrame>=PERIOD_M15 && TimeFrame<PERIOD_M30) return(PERIOD_M15);

    ¿No está 14 más cerca de 15 que de 5?

    Por ejemplo, he introducido 50 para el reloj en lugar de 60. Bueno... Como que me perdí.

    y la función devolverá 30. Genial:)

     
    eddy:

    ¿14 no está más cerca de 15 que de 5? y la función devolverá 30. Genial:)

    Funciona con una regla clara: todo lo que esté entre TFs se sustituye por el valor del TF más pequeño.
    Si no te gusta, publica tu regla y tu código.
     
    Entiendo la regla en el código, pero la descripción del código tiene una regla diferente
     
    KimIV:

    Función GetExtremumZZZPrice().

    Esta función busca un extremo del indicador estándar ZigZag personalizado y devuelve su nivel de precio. La función acepta los siguientes parámetros opcionales:

    • sy - Nombre del instrumento. "" o NULL - símbolo actual. El valor por defecto es NULL.
    • tf - Marco temporal. Valor por defecto 0 - símbolo actual.
    • ne - Número extremo. 0 - último, 1 - anterior, 2 - anterior, etc.
    • dp, dv, bs - Parámetros ZigZaga: ExtDepth, ExtDeviation, ExtBackstep.


    Quería utilizar esta función, pero me encontré con la siguiente situación: cuando aparece un nuevo extremo, el nivel de precios no cambia inmediatamente, sino que permanece igual durante algún tiempo. Me molesta durante las pruebas. ¿Cómo solucionarlo?

     
    Por favor, dígame dónde está la lista de todas las funciones, creo que hay una función para calcular lasposiciones perdedoras consecutivas cerradas - lo necesita para la martingala.
     
    eddy:
    Entiendo la regla en el código, pero la descripción del código tiene una regla diferente
    Gracias. He corregido la descripción... (en mi propio código... A quién le importa, corregirlo también)))