Características úteis da KimIV - página 105

 
zennon:
A função MovingInWL() apenas passa por todas as posições abertas independentemente dos filtros de entrada sy,op,mn. Isto também é verdade para o exemplo anexo EA (página 55).
Ele passa por quê?! para reinicializar o stoploss e envia tudo para a função Modiforder
 

Ajuda para os ininteligentes.

Também "Funções muito úteis do KimIV", embora não a partir deste tópico - lendo arquivos INI.

Fragmento (suficiente para compilar, mas não todo - para legibilidade) do 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);
  }

O script que chama a função para ler um arquivo 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);
  }

O próprio arquivo INI

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

O que nós não gostamos é de um fragmento do tronco

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

A questão é por quê? As funções parecem ser descritas corretamente. Quando leio (depois de todas as chamadas) e depois imprimo o dobro (Volume), todas as variáveis se tornam iguais a-0,06.

Bild 225.

 
KimIV:

A função ArrayAvg().

Esta função retorna a aritmética média dos elementos da matriz.

    for (i=0; i<k; i++) s+=x[i];
    if (k>0) s/=k;
    • x - Um conjunto de elementos do tipo duplo.
    por que não usar o iMA?
     
    KimIV:

    Função CorrectTF().

    Encaixa o parâmetro de entrada no intervalo de tempo válido mais próximo e retorna seu valor.
      if (TimeFrame>=PERIOD_M5  && TimeFrame<PERIOD_M15) return(PERIOD_M5);
      if (TimeFrame>=PERIOD_M15 && TimeFrame<PERIOD_M30) return(PERIOD_M15);

    14 não está mais perto de 15 do que 5?

    Por exemplo, eu inscrevi 50 para relógio em vez de 60. Bem... Eu meio que errei.

    e a função retornará 30. cool:)

     
    eddy:

    não é 14 mais próximo de 15 do que 5? e a função retornará 30. frio:)

    Funciona por uma regra clara: qualquer coisa entre os TFs é substituída pelo valor do TF menor.
    Se você não gostar, afixe sua regra e seu código.
     
    Entendo a regra no código, mas a descrição do código tem uma regra diferente
     
    KimIV:

    Função GetExtremumZZZPrice().

    Esta função procura um extremo do indicador ZigZag padrão personalizado e retorna seu nível de preço. A função aceita os seguintes parâmetros opcionais:

    • sy - Nome do instrumento. "" ou NULL - símbolo atual. O valor padrão é NULL.
    • tf - Cronograma. Valor padrão 0 - símbolo atual.
    • ne - Número extremo. 0 - último, 1 - anterior, 2 - anterior, etc.
    • dp, dv, bs - Parâmetros ZigZaga: ExtDepth, ExtDeviation, ExtBackstep.


    Eu queria usar esta função mas me deparei com a seguinte situação: quando aparece um novo extremo, o nível de preços não muda imediatamente, mas permanece o mesmo por algum tempo. Isso me perturba durante os testes. Como consertá-lo?

     
    Por favor, me diga onde está a lista de todas as funções, acho que existe uma função para calcularposições consecutivas de perda-fechadas - você precisa dela para o martingale.
     
    eddy:
    Entendo a regra no código, mas a descrição do código tem uma regra diferente
    Obrigado! Eu corrigi a descrição... (em meu lugar...) Quem se importa, corrija também))))
    Razão: