Caratteristiche utili da KimIV - pagina 105

 
zennon:
La funzione MovingInWL() passa semplicemente attraverso tutte le posizioni aperte indipendentemente dai filtri di input sy,op,mn. Questo è anche vero per l'esempio allegato EA (pagina 55).
Passa per cosa?! per resettare lo stoploss e manda tutto alla funzione Modiforder
 

Aiuto per i non intelligenti.

Anche "Funzioni molto utili da KimIV", anche se non da questo thread - lettura di file INI.

Frammento (abbastanza per compilare ma non tutto per leggibilità) di 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);
  }

Lo script che chiama la funzione per leggere un file 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);
  }

Il file INI stesso

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

Quello che non ci piace è un frammento del registro

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

La domanda è: perché? Le funzioni sembrano essere descritte correttamente. Quando leggo (dopo tutte le chiamate) e poi stampo il doppio (Volume), tutte le variabili diventano uguali a-0,06.

Bild 225.

 
KimIV:

La funzione ArrayAvg().

Questa funzione restituisce la media aritmetica degli elementi della matrice.

    for (i=0; i<k; i++) s+=x[i];
    if (k>0) s/=k;
    • x - Una matrice di elementi di tipo doppio.
    perché non usare iMA?
     
    KimIV:

    Funzione CorrectTF().

    Adatta il parametro di input all'intervallo di tempo valido più vicino e restituisce il suo valore.
      if (TimeFrame>=PERIOD_M5  && TimeFrame<PERIOD_M15) return(PERIOD_M5);
      if (TimeFrame>=PERIOD_M15 && TimeFrame<PERIOD_M30) return(PERIOD_M15);

    Il 14 non è più vicino al 15 che al 5?

    Per esempio, ho inserito 50 per l'orologio invece di 60. Bene... Mi mancava un po'.

    e la funzione restituirà 30. cool:)

     
    eddy:

    14 non è più vicino a 15 che a 5? e la funzione restituirà 30. cool:)

    Funziona con una regola chiara: qualsiasi cosa tra i TF è sostituita dal valore del TF più piccolo.
    Se non ti piace, pubblica la tua regola e il tuo codice.
     
    Capisco la regola nel codice, ma la descrizione del codice ha una regola diversa
     
    KimIV:

    Funzione GetExtremumZZZPrice().

    Questa funzione cerca un estremo dell'indicatore ZigZag standard personalizzato e restituisce il suo livello di prezzo. La funzione accetta i seguenti parametri opzionali:

    • sy - Nome dello strumento. "" o NULL - simbolo corrente. Il valore predefinito è NULL.
    • tf - Timeframe. Valore predefinito 0 - simbolo corrente.
    • ne - Numero estremo. 0 - ultimo, 1 - precedente, 2 - precedente, ecc.
    • dp, dv, bs - parametri ZigZaga: ExtDepth, ExtDeviation, ExtBackstep.


    Volevo usare questa funzione ma mi sono imbattuto nella seguente situazione: quando appare un nuovo estremo, il livello di prezzo non cambia immediatamente ma rimane lo stesso per un po' di tempo. Mi disturba durante i test. Come risolvere il problema?

     
    Per favore, dimmi dov'è la lista di tutte le funzioni, penso che ci sia una funzione per calcolare leposizioni consecutive perdenti-chiuse - ne hai bisogno per la martingala.
     
    eddy:
    Capisco la regola nel codice, ma la descrizione del codice ha una regola diversa
    Grazie! Ho corretto la descrizione... (al mio posto...) Chi se ne frega, correggilo pure)))