KimIVの便利な機能 - ページ 105

 
zennon:
MovingInWL()関数は、入力フィルタsy,op,mnに関係なく、すべてのオープンポジションを通過させるだけです。これは添付のEA例(P55)でも同様です。
ストップロスをリセットするために、何のために!を経て、すべてをModiforder関数に送ります。
 

知能の低い人に役立つ

また、このスレッドからではありませんが、「KimIVのとても便利な機能」-INIファイルの読み込み

KimIV インクルードの断片(コンパイルには十分だが、読みやすさのためにすべてではない)。

//+------------------------------------------------------------------+
//|                                                     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

問題は、その理由です。機能は正しく記述されているようです。読み込み(全呼び出し後)、ダブルプリント(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);

    5より14の方が15に近くないか?

    例えば、時計は60ではなく50と入力しました。まあ...なんだか懐かしいですね。

    で、この関数は30を返します。)

     
    eddy:

    は5より14の方が15に近いのでは?)

    TFの間にある ものは、小さい方の TFの値で置き換えられるという明確なルールで動いています。
    気に入らなければ、自分のルールとコードを投稿してください。
     
    コードのルールは理解できたが、コードの説明には別のルールがある
     
    KimIV:

    GetExtremumZZZPrice()関数。

    この関数は、標準カスタムZigZag インディケータの極値を検索し、その価格水準を返します。この関数は、以下のオプションパラメータを受け付ける。

    • sy- 楽器の名前です。"" またはNULL- 現在のシンボル。デフォルトはNULL
    • tf- タイムフレーム.初期値0- 現在のシンボル。
    • ne- 極端な数字。0- 最後、1- 前、2- 前、など。
    • dp,dv,bs- ZigZagaのパラメータ:ExtDepth, ExtDeviation, ExtBackstep.


    この機能を使いたかったのですが、次のような状況に出くわしました。新しい極値が現れたとき、価格水準はすぐには変化せず、しばらくは同じままです。テスト中に邪魔になる。どうすれば直るのか?

     
    全機能のリストはどこにあるのか教えてください。マーチンゲールに必要な、連続負け越しポジションを 計算する機能があると思います。
     
    eddy:
    コードのルールは理解できたが、コードの説明には別のルールがある
    ありがとうございました。説明文を訂正しました...(自分のコードでは...気にしないで、それも修正してください)))