Полезные функции от KimIV - страница 105

 
zennon:
Фунция MovingInWL() тупо перебирает все открытые позиции невзирая на входные фильтры sy,op,mn. Это касается и прикрепленного для примера советника (страница 55).
она перебирает для чего ?! чтоб переставить стоплосс и отправляет все в функции Модифиордер
 

Помогите неразумному.

Тоже "Очень полезные функции от KimIV", хотя и не из этой ветки - чтение INI файлов.

Фрагмент (достаточный для компиляции, но не весь - для читабельности) кимовского инклудника

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

Скрипт, который вызывает функцию чтенмя 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);
  }

Собственно INI-файл

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

То, что не нравится - фрагмент лога

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

Вопрос - почему? Функции, вроде бы описаны корректно. Когда читаю (после всех вызовов), а потом печатаю double (Volume), все переменные становятся равнми -0.06.

Билд 225.

 
KimIV:

Функция ArrayAvg().

Эта функция возвращает среднее аримфетическое элементов массива.

    for (i=0; i<k; i++) s+=x[i];
    if (k>0) s/=k;
    • x - Массив элементов типа double.
    почему бы не юзать iMA?
     
    KimIV:

    Функция CorrectTF().

    Выполняет подгонку входного параметра под ближайший подходящий правильный таймфрейм и возвращает его значение.
      if (TimeFrame>=PERIOD_M5  && TimeFrame<PERIOD_M15) return(PERIOD_M5);
      if (TimeFrame>=PERIOD_M15 && TimeFrame<PERIOD_M30) return(PERIOD_M15);

    разве 14 не ближе к 15и, чем к 5и?

    KimIV: Например, я ввёл 50 для часовок вместо 60. Ну... типа промахнулся.

    и функция вернёт 30. круто:)

     
    eddy:

    разве 14 не ближе к 15и, чем к 5и? и функция вернёт 30. круто:)

    Это работа по четкому правилу: все, что лежит между ТФ, заменяется значением меньшего ТФ.
    Если не нравится, выложите свое правило и свой код.
     
    я понимаю правило действующее в коде, но в описании кода другое правило
     
    KimIV:

    Функция GetExtremumZZPrice().

    Эта функция выполняет поиск экстремума стандартного пользовательского индикатора ZigZag и возвращает его ценовой уровень. Функция принимает следующие необязательные параметры:

    • sy - Наименование инструмента. "" или NULL - текущий символ. Значение по умолчанию NULL.
    • tf - Таймфрейм. Значение по умолчанию 0 - текущий символ.
    • ne - Номер экстремума. 0 - последний, 1 - предыдущий, 2 - предпредыдущий и т.д.
    • dp, dv, bs - Параметры ZigZaga: ExtDepth, ExtDeviation, ExtBackstep.


    Хотел использовать эту фунцию, но столкнулся с такой ситуацией: при появлении нового экстремума ценовой уровень меняется не сразу, а остаётся старым некоторое время. Мешает при тестировании. Как исправить?

     
    подскажите пожалуйста, где перечень всех функций, вроде есть функция подсчета подряд убыточно-закрытых позиций - нужна для мартингейла.
     
    eddy:
    я понимаю правило действующее в коде, но в описании кода другое правило
    Благодарю! Я поправил описание... у себя... Кому это важно, тоже поправьте)))
    Причина обращения: