iniファイルの読み込み方

セクションとキーから値を取得する

テキストファイルの読み込み方で、テキストファイルを読み込むする方法を説明しましたが、今回はiniファイルの読み込み方法について説明します。

iniファイルは設定ファイルとして使われます。EAやインジケーターのパラメータを外部ファイル化できるイメージですね。

複数のEAやインジケーターでパラメータを共通化したい時(というケースは稀でしょうが)に役立つかもしれません。

まずは、サンプルコードをご覧ください。

01//+------------------------------------------------------------------+
02//|                                                       Sample.mq4 |
03//|                                     Copyright (c) 2018, りゅーき |
04//|                                           https://autofx100.com/ |
05//+------------------------------------------------------------------+
06#property copyright "Copyright (c) 2018, りゅーき"
07#property link      "https://autofx100.com/"
08#property version   "1.0"
09#property strict
10 
11//+------------------------------------------------------------------+
12//| ライブラリ                                                       |
13//+------------------------------------------------------------------+
14#include <stderror.mqh>
15#include <stdlib.mqh>
16#include <WinUser32.mqh>
17#include <Original/Application.mqh>
18#include <Original/Basic.mqh>
19#include <Original/DateAndTime.mqh>
20#include <Original/LotSizing.mqh>
21#include <Original/OrderHandle.mqh>
22#include <Original/OrderReliable.mqh>
23 
24#import "kernel32.dll"
25  int GetPrivateProfileStringW(string sectionName, string keyName, string defaultValue, string &returnValue, uint bufferSize, string iniFilePath);
26#import
27 
28//+------------------------------------------------------------------+
29//| 定数                                                             |
30//+------------------------------------------------------------------+
31 
32//+------------------------------------------------------------------+
33//| EAパラメータ設定情報                                             |
34//+------------------------------------------------------------------+
35extern int MagicNumber = 20171204;
36 
37//+------------------------------------------------------------------+
38//| グローバル変数                                                   |
39//+------------------------------------------------------------------+
40// 共通
41double gPipsPoint     = 0.0;
42int    gSlippage      = 0;
43color  gArrowColor[6] = {Blue, Red, Blue, Red, Blue, Red}; //BUY: Blue, SELL: Red
44 
45//+------------------------------------------------------------------+
46//| Expert initialization function                                   |
47//+------------------------------------------------------------------+
48int OnInit()
49{
50  string sectionName  = "section";
51  string keyName      = "key";
52  string defaultValue = "default";
53  string returnValue  = "";
54  uint   bufferSize   = 255;
55  string iniFilePath  = TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL4\\Files\\test.ini";
56 
57  int dmy = GetPrivateProfileStringW(sectionName, keyName, defaultValue, returnValue, bufferSize, iniFilePath);
58 
59  Print("returnValue = ", returnValue);
60 
61  return(INIT_SUCCEEDED);
62}
63 
64//+------------------------------------------------------------------+
65//| Expert deinitialization function                                 |
66//+------------------------------------------------------------------+
67void OnDeinit(const int reason)
68{
69}
70 
71//+------------------------------------------------------------------+
72//| Expert tick function                                             |
73//+------------------------------------------------------------------+
74void OnTick()
75{
76}

test.iniの中身は以下です。

ポイントは以下の2箇所です。

1#import "kernel32.dll"
2int GetPrivateProfileStringW(string sectionName, string keyName, string defaultValue, string &returnValue, uint bufferSize, string iniFilePath);
3#import
1int dmy = GetPrivateProfileStringW(sectionName, keyName, defaultValue, returnValue, bufferSize, iniFilePath);

GetPrivateProfileStringW関数はWindows APIの1つで、kernel32.dllの中で定義されています。

MT4の標準関数ではありませんのでご注意ください。

importは、外部dllを読み込む際に使います。この例では、外部dllのkernel32.dllをMT4内で使えるように読み込むよ、という宣言になります。

外部dllの読み込み

MT4はこんな風に外部のdllを読み込んで利用できるんですね。知っておくとEAやインジケーターの実装幅が広がってとても便利です。

ポイントです!
吹き出し

さて、importで定義した後は、int dmy = GetPrivateProfileStringWで関数を呼び出して、iniファイルを読み込みます。

iniファイルはセクションとキーから値を取得する構造となっています。sectionNameとkeyNameを引数として渡すと、値(この例ではGreat)がreturnValueに格納されて戻ってくる仕掛けです。

あとは、returnValueを使ってやりたいことを実現しちゃってください!

なお、dmyはダミーの意味で、この関数の戻り値は使わないよと明示するための独自ネーミングルールです。

MT4の無料プログラミング講座

メルマガ登録して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG