共通関数

Alert

別ウィンドウにメッセージを表示します。

void  Alert(
argument,     // 初めの値
  …          // 他の値
);

パラメータ

argument

[in]  コンマで区切られた任意の値。情報出力を複数の行に分割するには、改行文字「 \n 」または 「 \ r \ n 」を使用することが出来ます。パラメータの数は 64 を超えることは出来ません。

戻り値

なし

注意事項

配列は Alert() 関数には渡せません。配列は要素ごとに出力する必要があります。double 型のデータは小数点以下8桁で出力され、float 型のデータは小数点以下 5 桁で表示されます。実数を異なる精度または科学形式で出力するには DoubleToString() 関数が使用されます。

bool 型のデータは「 true 」または 「 false 」の文字列として出力されます。日付は YYYY.MM.DD HH:MI:SS として出力されます。日付を別の形式で表示するには TimeToString() 関数が使用されます。カラー型のデータは R、G、B の文字列、または、色がカラーセットに存在する場合は色名として出力されます。

Alert() 関数はストラテジーテスター内では使用できません。

CheckPointer

この関数はオブジェクトポインタの型を返します。

ENUM_POINTER_TYPE  CheckPointer(
object* anyobject      // オブジェクトポインタ
);

パラメータ

anyobject

[in]  オブジェクトポインタ

戻り値

ENUM_POINTER_TYPE 列挙のいずれかの値

注意事項

不正なポインタを呼び出す試みはプログラムの緊急終了を生じます。これが、ポインタを使用する前にCheckPointer 関数を呼び出すのが必要な理由です。ポインタは、次のような場合に不正である場合があります。

  • ポインタが NULL
  • オブジェクトが delete 演算子で削除された

この関数は、ポインタの有効性をチェックするために使用することが出来ます。ゼロ以外の値はポインタアクセスを保証します。

例:

//+——————————————————————+
//| 要素の削除によってリストを削除する                                         |
//+——————————————————————+
void CMyList::Destroy()
{
//— ループの中で作業するためのサービスポインタ
CItem* item;
//— ループを通過し、動的なポインタの削除を試みる
while(CheckPointer(m_items)!=POINTER_INVALID)
{
item=m_items;
m_items=m_items.Next();
if(CheckPointer(item)==POINTER_DYNAMIC)
{
Print(“Dynamic object “,item.Identifier(),” to be deleted”);
delete (item);
}
else Print(“Non-dynamic object “,item.Identifier(),” cannot be deleted”);
}
//—
}

参照

オブジェクトポインタ、オブジェクトポインタのチェック、delete オブジェクト解除演算子

Comment

この関数はチャートの左上隅にコメントを出力します。

void  Comment(
argument,     // 初めの値
  …          // 次の値
);

パラメータ

[in]  コンマで区切られた任意の値。情報出力を複数の行に分割するには、改行文字「 \n 」または 「 \ r \ n 」を使用することが出来ます。パラメータの数は 64 を超えることは出来ません。入力コメントの合計は(目に見えないシンボルを含んで)2,045 文字を超えることは出来ません(余分な文字は切り捨てられます)。

戻り値

なし

注意事項

配列は Alert() 関数には渡せません。配列は要素ごとに渡される必要があります。

double 型のデータは小数点以下最大 16 桁の精度で出力され、どちらの表記がよりコンパクトになるかに応じて、伝統的または科学形式で出力することが出来ます。float 型のデータは小数点以下 5 桁で出力されます。実数を異なる精度または事前定義された形式で出力するには DoubleToString() 関数が使用されます。

bool 型のデータは「 true 」または 「 false 」の文字列として出力されます。日付は YYYY.MM.DD HH:MI:SS として出力されます。日付を別の形式で表示するには TimeToString() 関数が使用されます。カラー型のデータはR、G、Bの文字列、または、色がカラーセットに存在する場合は色名として出力されます。

Comment() 関数はストラテジーテスターでの最適化中には使用できません。

例:

void OnTick()
{
//—
double Ask,Bid;
int Spread;
Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
Spread=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
//— 値を 3 行に出力する
Comment(StringFormat(“Show prices\nAsk = %G\nBid = %G\nSpread = %d”,Ask,Bid,Spread));
}

参照

ChartSetString、ChartGetString

CryptEncode

指定されたメソッドを使用して配列からデータを変換します。

int  CryptEncode(
ENUM_CRYPT_METHOD   method,        // 方法
const uchar&        data[],        // ソース配列
const uchar&        key[],        // キー
uchar&              result[]       // ターゲットの配列
);

パラメータ

method

[in]  データ変換方法。ENUM_CRYPT_METHOD 列挙のいずれかです。

data[]

[in]  ソース配列

key[]

[in]  キー配列

result[]

[out]  ターゲットの配列

戻り値

受け取り側の配列のバイト数、またはエラーの場合は 0。 エラー情報を取得するにはGetLastError() 関数が呼ばれます。

例:

//+——————————————————————+
//| ArrayToHex                                                       |
//+——————————————————————+
string ArrayToHex(uchar &arr[],int count=-1)
{
string res=“”;
//— チェック
if(count<0 || count>ArraySize(arr))
count=ArraySize(arr);
//— 16 進文字列に変換する
for(int i=0; i<count; i++)
res+=StringFormat(“%.2X”,arr[i]);
//—
return(res);
}
//+——————————————————————+
//| スクリプトプログラムを開始する関数                                          |
//+——————————————————————+
void OnStart()
{
string text=“The quick brown fox jumps over the lazy dog”;
string keystr=“ABCDEFG”;
uchar src[],dst[],key[];
//— キーを準備する
StringToCharArray(keystr,key);
//— テキストを元の配列 src[] に複製する
StringToCharArray(text,src);
//— 初期データをプリントする
PrintFormat(“Initial data: size=%d, string=’%s'”,ArraySize(src),CharArrayToString(src));
//— src[] を key[] のDES 56-ビットキーを使用して暗号化する
int res=CryptEncode(CRYPT_DES,src,key,dst);
//— エラーをチェックする
if(res>0)
{
//— 暗号化されたデータをプリントする
PrintFormat(“Encoded data: size=%d %s”,res,ArrayToHex(dst));
//— dst[] を src[] にデコードする
res=CryptDecode(CRYPT_DES,dst,key,src);
//— エラーをチェックする   
if(res>0)
{
//— デコードされたデータをプリントする
PrintFormat(“Decoded data: size=%d, string=’%s'”,ArraySize(src),CharArrayToString(src));
}
else
Print(“Error in CryptDecode. Error code=”,GetLastError());
}
else
Print(“Error in CryptEncode. Error code=”,GetLastError());
}

参照

配列関数、CryptDecode()

CryptDecode

CryptEncode()で返還された配列からデータの逆変換を行います。

int  CryptEncode(
ENUM_CRYPT_METHOD   method,        // 方法
const uchar&        data[],        // ソース配列
const uchar&        key[],        // キー
uchar&              result[]       // ターゲットの配列
);

パラメータ

method

[in]  データ変換方法。ENUM_CRYPT_METHOD 列挙のいずれかです。

data[]

[in]  ソース配列

key[]

[in]  キー配列

result[]

[out]  ターゲットの配列

戻り値

受け取り側の配列のバイト数、またはエラーの場合は 0。 エラー情報を取得するにはGetLastError() 関数が呼ばれます。

参照

配列関数、 CryptEncode()

DebugBreak

デバグ中のプログラムのブレークポイントです。

void  DebugBreak();

戻り値

なし

注意事項

MQL5 プログラムの実行はデバグモードで起動された場合のみ中断されます。この関数は変数の値及び/またはステップ•バイ•ステップ実行の表示に使用することが出来ます。

ExpertRemove

この関数はエキスパートアドバイザーを停止しチャートからアンロードします。

void  ExpertRemove();

戻り値

なし

注意事項

エキスパートアドバイザーは、ExpertRemove() の呼び出し直後に停止されるわけではありません。EA 動作を停止するフラグのみが設定されます。つまり、次のイベントは処理されず、OnDeinit() が呼び出されてエキスパートアドバイザーがアンロードされてチャートから削除されます。

ストラテジーテスターのOnInit()ハンドラでのExpertRemove()の呼び出しによって、現在のパラメータセットでのテストがキャンセルされます。このような終了は初期化エラーとみなされます。

ストラテジーテスターでEAが正常に初期化された後でExpertRemove()が呼び出されると、テストはOnDeinit()とOnTester()の呼び出しによって正常に終了します。この場合、取引統計と最適化基準値はすべて取得されますが、EAはテストエージェントのメモリからアンロードされます。これは、エージェントが次の最適化パスをテストするためにEAを再読み込みする時間が必要であることを意味します。<よって、TesterStop()はテストの早期終了のための好ましいオプションです。

例:

//+——————————————————————+
//|                                            Test_ExpertRemove.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                             https://www.MQL5.com |
//+——————————————————————+
#property copyright “2009, MetaQuotes Software Corp.”
#property link     “https://www.mql5.com”
#property version   “1.00”
input int ticks_to_close=20;// EA アンロードまでのティック
//+——————————————————————+
//| エキスパート初期化解除に使用される関数                                    |
//+——————————————————————+
void OnDeinit(const int reason)
{
//—
Print(TimeCurrent(),“: “ ,__FUNCTION__,” reason code = “,reason);
//— コメントをクリアする
Comment(“”);
//—
}
//+——————————————————————+
//| エキスパートティック関数                                                 |
//+——————————————————————+
void OnTick()
{
static int tick_counter=0;
//—
tick_counter++;
Comment(“\nBefore unloading expert advisor “,__FILE__,” left”,
(ticks_to_close-tick_counter),” ticks”);
//— 前
if(tick_counter>=ticks_to_close)
{
ExpertRemove();
Print(TimeCurrent(),“: “,__FUNCTION__,” expert advisor will be unloaded”);
}
Print(“tick_counter =”,tick_counter);
//—
}
//+——————————————————————+

参照

プログラムの実行、クライアント端末イベント

GetPointer

この関数はオブジェクトポインタを返します。

void*  GetPointer(
any_class anyobject      // 任意のクラスオブジェクト
);

パラメータ

anyobject

[in]  任意のクラスオブジェクト

戻り値

オブジェクトポインタ

注意事項

クラスオブジェクトのみがポインタを持ちます。構造体インスタンスと基本データ型の変数にはポインタはありません。new() 演算子によって作成されなくても、例えばオブジェクトの配列で自動的に作成されたクラスオブジェクトにはポインタがあります。しかし、このポインタは POINTER_AUTOMATIC 型の自動型であり、delete() 演算子が適用出来ません。これ以外の点では、ポインタ型は POINTER_AUTOMATIC 型の動的ポインタとは異なりません。

構造体型また基本データ型の変数はポインタを持っていないので、それらに GetPointer() 関数を適用することは禁じられています。また、ポインタを関数の引数として渡すことも禁止されています。これらの場合全てで、コンパイラはエラーを通知します。

不正なポインタを呼び出す試みはプログラムの緊急終了を生じます。これが、ポインタを使用する前に CheckPointer() 関数を呼び出すのが必要な理由です。ポインタは、次のような場合に不正であることがあります。

  • ポインタが NULL
  • オブジェクトが delete 演算子で削除された

この関数は、ポインタの有効性を確認するために使用することが出来ます。ゼロ以外の値はポインタアクセスを保証します。

例:

//+——————————————————————+
//|                                             Check_GetPointer.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                             https://www.MQL5.com |
//+——————————————————————+
#property copyright “2009, MetaQuotes Software Corp.”
#property link     “https://www.mql5.com”
#property version   “1.00”

//+——————————————————————+
//| リスト要素を実装するクラス                                               |
//+——————————————————————+
class CItem
{
int               m_id;
string            m_comment;
CItem*            m_next;
public:
CItem() { m_id=0; m_comment=NULL; m_next=NULL; }
~CItem() { Print(“Destructor of “,m_id,
(CheckPointer(GetPointer(this))==POINTER_DYNAMIC)?
“dynamic”:“non-dynamic”); }
void              Initialize(int id,string comm) { m_id=id; m_comment=comm; }
void              PrintMe() { Print(__FUNCTION__,“:”,m_id,m_comment); }
int               Identifier() { return(m_id); }
CItem*            Next() {return(m_next); }
void              Next(CItem *item) { m_next=item; }
};
//+——————————————————————+
//| リストの最も単純なクラス                                                 |
//+——————————————————————+
class CMyList
{
CItem*            m_items;
public:
CMyList() { m_items=NULL; }
~CMyList() { Destroy(); }
bool             InsertToBegin(CItem* item);
void             Destroy();
};
//+——————————————————————+
//| 先頭にリスト要素を挿入する                                              |
//+——————————————————————+
bool CMyList::InsertToBegin(CItem* item)
{
if(CheckPointer(item)==POINTER_INVALID) return(false);
//—
item.Next(m_items);
m_items=item;
//—
return(true);
}
//+——————————————————————+
//| 要素の削除によってリストを削除する                                         |
//+——————————————————————+
void CMyList::Destroy()
{
//— ループの中で作業するためのサービスポインタ
CItem* item;
//— ループを通過し、動的なポインタの削除を試みる
while(CheckPointer(m_items)!=POINTER_INVALID)
{
item=m_items;
m_items=m_items.Next();
if(CheckPointer(item)==POINTER_DYNAMIC)
{
Print(“Dynamyc object “,item.Identifier(),” to be deleted”);
delete (item);
}
else Print(“Non-dynamic object “,item.Identifier(),” cannot be deleted”);
}
//—
}
//+——————————————————————+
//| スクリプトプログラムを開始する関数                                          |
//+——————————————————————+
void OnStart()
{
CMyList list;
CItem   items[10];
CItem*  item;
//— 作成し、リスト動的オブジェクトのポインタに追加
item=new CItem;
if(item!=NULL)
{
item.Initialize(100,“dynamic”);
item.PrintMe();
list.InsertToBegin(item);
}
//— 自動ポインタをリストに追加する
for(int i=0; i<10; i++)
{
items[i].Initialize(i,“automatic”);
items[i].PrintMe();
item=GetPointer(items[i]);
if(CheckPointer(item)!=POINTER_INVALID)
list.InsertToBegin(item);
}
//— リスト先頭に動的なオブジェクトポインタをあと 1 つ追加する
item=new CItem;
if(item!=NULL)
{
item.Initialize(200,“dynamic”);
item.PrintMe();
list.InsertToBegin(item);
}
//— リスト要素を全て削除する
list.Destroy();
//— スクリプト終了後、全てのリスト要素が削除される
//— 端末内の「エキスパート」タブを参照する
}

参照

オブジェクトポインタ、オブジェクトポインタのチェック、delete オブジェクト解除演算子

GetTickCount

GetTickCount() 関数はシステムが起動してからの経過時間をミリ秒数で返します。

uint  GetTickCount();

戻り値

uint 型の値

注意事項

カウンタは、システムタイマの制約によって制限されます。時間は符号なし整数として格納されるので、コンピュータが途切れることなく動作した場合 49.7日 ごとに溢れます。

例:

#define MAX_SIZE 40
//+——————————————————————+
//| 40フィボナッチ数の計算時間を測定するためのスクリプト                            |
//+——————————————————————+
void OnStart()
{
//— 初期値を記録する
uint start=GetTickCount();
//— フィボナッチ数列の次の番号を取得するための変数
long fib=0;
//— フィボナッチ数列から番号の指定された量をループで計算する
for(int i=0;i<MAX_SIZE;i++) fib=TestFibo(i);
//— かかった時間をミリ秒単位で取得する
uint time=GetTickCount()-start;
//— メッセージをエキスパート操作ログへ出力する
PrintFormat(“Calculating %d first Fibonacci numbers took %d ms”,MAX_SIZE,time);
//— スクリプトが完了した
return;
}
//+——————————————————————+
//| フィボナッチ数をシリアル番号で取得するための関数                               |
//+——————————————————————+
long TestFibo(long n)
{
//— フィボナッチ数列の最初のメンバ
if(n<2) return(1);
//— 他の全てのメンバは、以下の式で計算される
return(TestFibo(n-2)+TestFibo(n-1));
}

参照

日付と時刻, EventSetMillisecondTimer

GetMicrosecondCount

GetMicrosecondCount() 関数はMQL5 プログラムの開始からの経過時間マイクロ秒数で返します。

ulong  GetMicrosecondCount();

戻り値

ulong 型の値

例:

//+——————————————————————+
//| テスト関数                                                          |
//+——————————————————————+
void Test()
{
int    res_int=0;
double res_double=0;
//—  
for(int i=0;i<10000;i++)
{
res_int+=i*i;
res_int++;
res_double+=i*i;
res_double++;
}
}
//+——————————————————————+
//| スクリプトプログラムを開始する関数                                          |
//+——————————————————————+
void OnStart()
{
uint   ui=0,ui_max=0,ui_min=INT_MAX;
ulong  ul=0,ul_max=0,ul_min=INT_MAX;
//— 測定値の数
for(int count=0;count<1000;count++)
{
uint  ui_res=0;
ulong ul_res=0;
//—
for(int n=0;n<2;n++)
{
//— 測定の種類を選ぶ
if(n==0) ui=GetTickCount();
else     ul=GetMicrosecondCount();
//— コードを実行する
Test();
//— 測定結果を追加する(種類に応じて)
if(n==0) ui_res+=GetTickCount()-ui;
else     ul_res+=GetMicrosecondCount()-ul;
}
//— 測定値の最小時間と最大時間を計算する
if(ui_min>ui_res) ui_min=ui_res;
if(ui_max<ui_res) ui_max=ui_res;
if(ul_min>ul_res) ul_min=ul_res;
if(ul_max<ul_res) ul_max=ul_res;
}
//—
Print(“GetTickCount error(msec): “,ui_max-ui_min);
Print(“GetMicrosecondCount error(msec): “,DoubleToString((ul_max-ul_min)/1000.0,2));
}

参照

日付と時刻

MessageBox

メッセージボックスを作成、表示及び管理します。メッセージボックスには、メッセージとヘッダ、また、事前に定義された徴候やコマンドボタンの任意の組み合わせが含まれています。

int  MessageBox(
string  text,            // メッセージテキスト
string  caption=NULL,    // ボックスヘッダ
int    flags=0          // ボックスにボタンのセットを定義する
);

パラメータ

text

[in]  出力メッセージを含むテキスト

caption=NULL

[in]  ボックスヘッダに表示される任意のテキスト。パラメータが空の場合、エキスパートアドバイザ名がボックスヘッダに示されます。

flags=0

[in]  メッセージボックスの外観と動作を定義する任意のフラグ。フラグは特殊なグループの組み合わせであることも出来ます。

戻り値

関数が正常に実行された場合は MessageBox() リターンコード値のいずれか

注意事項

指標はインターフェースのスレッドで実行され遅らせるべきではないので、この関数はカスタム指標からは呼び出すことが出来ません。

MessageBox() 関数はストラテジーテスター内では使用できません。

PeriodSeconds

この関数は期間中の秒数を返します。

int  PeriodSeconds(
ENUM_TIMEFRAMES  period=PERIOD_CURRENT      // チャート期間
);

パラメータ

period=PERIOD_CURRENT

[in] ENUM_TIMEFRAMES列挙からのチャート期間。パラメータが指定されていない場合は、プログラムが実行されている現在のチャートの期間の秒数を返します。

戻り値

選択した期間の秒数

参照

_Period、チャート時間軸、日付と時刻、オブジェクトの可視性

PlaySound

サウンドファイルを再生します。

bool  PlaySound(
string  filename      // ファイル名
);

パラメータ

filename

[in]  サウンドファイルへのパスファイル名が NULL の場合は、再生が停止されます。

戻り値

ファイルが見つかった場合は true、それ以外の場合は false

注意事項

ファイルは terminal_directory\Sounds またはそのサブディレクトリに位置しなければいけません。WAVファイルのみが再生されます。

PlaySound() の NULL パラメータでの呼び出しは、再生を停止します。

PlaySound() 関数はストラテジーテスター内では使用できません。

参照

リソース

Print

エキスパートアドバイザーログにメッセージを入力します。パラメータは任意の型です。

void  Print(
argument,     // 初めの値
  …          // 次の値
);

パラメータ

[in]  コンマで区切られた任意の値。パラメータの数は 64 を超えることは出来ません。

注意事項

配列は Print() 関数には渡せません。配列は要素ごとに渡される必要があります。

double 型のデータは小数点以下最大 16 桁の精度で出力され、どちらの表記がよりコンパクトになるかに応じて、伝統的または科学形式で出力することが出来ます。float 型のデータは小数点以下 5 桁で出力されます。実数を異なる精度または事前定義された形式で出力するには PrintFormat()関数が使用されます。

bool 型のデータは「 true 」または 「 false 」のラインとして出力されます。日付は YYYY.MM.DD HH:MI:SS として出力されます。日付を別の形式で表示するには TimeToString() 関数が使用されます。カラー型のデータはR、G、Bの文字列、または、色がカラーセットに存在する場合は色名として出力されます。

Print() 関数はストラテジーテスターでの最適化中には使用できません。

例:

void OnStart()
{
//— DBL_MAX を Print() を使用して出力する。これは PrintFormat(%%.16G,DBL_MAX) と同等
Print(“—- how DBL_MAX looks like —–“);
Print(“Print(DBL_MAX)=”,DBL_MAX);
//— DBL_MAX 数を PrintFormat() を使用して出力する
PrintFormat(“PrintFormat(%%.16G,DBL_MAX)=%.16G”,DBL_MAX);
//— エキスパート操作ログへ出力する
// Print(DBL_MAX)=1.797693134862316e+308
// PrintFormat(%.16G,DBL_MAX)=1.797693134862316E+308
 
//— float の出力され方を参照する
float c=(float)M_PI; // 明示的にターゲット型にキャストする必要がある
Print(“c=”,c, ”    Pi=”,M_PI, ”    (float)M_PI=”,(float)M_PI);
// c=3.14159    Pi=3.141592653589793    (float)M_PI=3.14159

//— 実数型の算術演算で何が起こるかを表示する
double a=7,b=200;
Print(“—- Before arithmetic operations”);
Print(“a=”,a,”   b=”,b);
Print(“Print(DoubleToString(b,16))=”,DoubleToString(b,16));
//— a を b で割る( 7 / 200 )
a=a/b;
//— B変数にて値を復元するエミュレートをする
b=7.0/a; // b=7.0/(7.0/200.0)=>7.0/7.0*200.0=200 が期待されるが、異なる
//— b の新たに計算された値を出力する
Print(“—– After arithmetic operations”);
Print(“Print(b)=”,b);
Print(“Print(DoubleToString(b,16))=”,DoubleToString(b,16));
//— エキスパート操作ログへ出力する
// Print(b)=200.0
// Print(DoubleToString(b,16))=199.9999999999999716 (b はすでに 200.0 と等しくない)  
 
//— 常に小さな値を作成 epsilon=1E-013
double epsilon=1e-13;
Print(“—- Create a very small value”);
Print(“epsilon=”,epsilon); // epsilon=1E-013 を取得
//— b から epsilon を引き、値を再びエキスパート操作ログへ出力する
b=b-epsilon;
//— 2 つの方法を使用する
Print(“—- After subtracting epsilon from the b variable”);
Print(“Print(b)=”,b);
Print(“Print(DoubleToString(b,16))=”,DoubleToString(b,16));
//— エキスパート操作ログへ出力する
// Print(b)=199.9999999999999  ( epsilon を差し引いた後の b の値は 200 に丸めることが出来ない)
// Print(DoubleToString(b,16))=199.9999999999998578
//    ( epsilon を差し引いた後の b の値は 200 に丸めることが出来ない)
}

参照

DoubleToString、StringFormat

PrintFormat

事前に定義された形式に従ってシンボルと値のセットをフォーマットとし、エキスパートアドバイザーのログに入力します。

void  PrintFormat(
string format_string,   // フォーマットされる文字列
  …                    // 基本データ型の値
);

パラメータ

format_string

[in]  フォーマット文字列は、簡単な記号で構成され、引数が続いている場合、引数内にフォーマットの仕様が含まれています。

[in]  コンマで区切られた任意の基本データ型の値パラメータの数はフォーマットされる文字列を含んで 64 を超えることは出来ません。

戻り値

文字列

注意事項

PrintFormat() 関数はストラテジーテスターでの最適化中には使用できません。

パラメータの数、順序、及び型は正確に一連の修飾子と一致しなければなりません。さもないと、プリント結果は未定義になります。PrintFormat() の代わりに printf() の使用が可能です。

フォーマット文字列にパラメータが続く場合、この文字列には、これらのパラメータの出力フォーマットを示すフォーマットの仕様が含まれている必要があります。形式の仕様は、常にパーセント記号 (%) で始まります。

フォーマット文字列は左から右に読み込まれます。最初の形式仕様(もしあれば)が満たされると、フォーマット文字列の後にくる最初のパラメータの値は、予め設定された仕様に従って変換して出力されます。2 番目の形式仕様は変換を呼び出し2 番目のパラメータを出力し、というようにフォーマット文字列が終わるまでプロセスされます。

形式仕様の形式は次の通りです。            

          %[ フラグ ][ 幅 ][ .精度 ][{h | l | ll | I32 | I64}] 型

形式仕様の各フィールドは、単純なシンボル、または単純なフォーマットオプションを表す番号のどちらかです。最も単純な形式の仕様は、パーセント記号(%)と 出力パラメータの種類 (例えば %s)を定義するシンボルが含まれています。フォーマット文字列中にパーセント記号が必要な場合は、形式仕様 %% を使用します。

フラグ

フラグ

説明

デフォルト動作

– (minus)

セット幅内の左寄せ。

右寄せ。

+ (plus)

符号付型の値の + または – 符号を出力します。

符号は値が負の場合のみ表示されます。

0 (zero)

ゼロは事前に定義された幅内で出力値の前に追加されます。0 フラグが整数形式で指定され( iuxXod)精度仕様が設定されている場合(例えば %04.d )、0 は無視されます。

何も追加されません。

space

符号が正の値である場合、出力値の前にスペースが示されています。

スペースは挿入されません。

#

フォーマットox または X と使用された場合、出力値の前に 0、0x または 0X がそれぞれ追加されます。

何も追加されません。

 

フォーマット eEa または A と使用された場合、値は常に小数点で表示されます。

小数点はゼロ以外の小数部がある場合にのみ表示されます。

 

フォーマット g または G と使用された場合、フラグは、出力値の小数点の存在を定義し、先行ゼロの削除を防ぐことが出来ます。

フラグ # はフォーマット cdiu 及び s と使用された場合には無視されます。

小数点はゼロ以外の小数部がある場合にのみ表示されます。先行のゼロは削除されます。

幅 #

フォーマットされた値の出力記号の最小数を設定する負でない 10 進数です。出力シンボルの数が指定された幅よりも小さい場合、対応する数のスペースが、アライメントに応じて左または右から追加されます( – フラグ)。ゼロフラグ( 0 )が存在する場合、対応する数のゼロが出力値の前に追加されます。出力シンボルの数が指定された幅よりも大きい場合、出力値は絶対に切られません。

アスタリスク(*)が幅として指定された場合、整数型の値が渡されたパラメータのリストの対応する場所に示されている必要があります。この値は出力値の幅を指定するのに使用されます。

精度 #

小数点以下の桁数として出力精度を設定する、負でない小数です 。幅仕様とは異なり、精度仕様は、丸めのあるなしにかかわらず小数型の一部を切断することが出来ます。

精度仕様の使用は、フォーマッとの種類によって異なります。

種類

説明

デフォルト桁数

a, A

精度仕様が小数点以下の桁数を設定します。

6。

c, C

使用されません。

 

d, i, u, o, x, X

出力桁の最小数を設定します。対応するパラメータの桁数がこの精度よりも小さい場合、ゼロが出力値の左側に追加されます。出力桁数が指定された精度よりも大きい場合、出力値は短縮されません。

1。

e, E, f

小数点以下の出力桁数を設定します。最後の数字は四捨五入されます。

6。設定精度が 0 であるか、小数部が存在しない場合には、小数点以下は表示されません。

g, G

有効数字の最大数を設定します。

6。

s, S

文字列の出力シンボルの数を設定します。文字列の長さが精度を超えた場合、文字列が短くされます。

全体の文字列が出力されます。

h | l | ll | I32 | I64

パラメータとして渡されたデータサイズの指定を指定します。

パラメータ型

使用するプレフィックス

型のジョイント指定子

int

l (小文字の L )

d、i、o、x または X

uint

l (小文字の L )

o、u、x または X

long

ll (小文字の L が二つ)<

d、i、o、x または X

short

h

d、i、o、x または X

ushort

h

o、u、x または X

int

I32

d、i、o、x または X

uint

I32

o、u、x または X

long

I64

d、i、o、x または X

ulong

I64

o、u、x または X

型 #

型指定子は、フォーマットされた出力のための唯一の必須フィールドです。

Symbol

Type

出力フォーマット

c

int

short 型のシンボル (Unicode)。

C

int

char 型のシンボル (ANSI)。

d

int

符号付き 10 進整数。

i

int

符号付き 10 進整数。

o

int

符号なし 8 進整数。

u

int

符号なし 10 進整数。

x

int

「abcdef」を使用した符号なし 16 進整数。

X

int

「ABCDEF」を使用した符号なし 16 進整数。

e

double

[-] d.dddde[sign] ddd のフォーマットを持った実数で、d は 1 つの 10 進整数、dddd は 1 つ以上の 10 進整数で ddd は 3 桁の数で、指数の大きさとプラスマイナスのサインを決めます。

E

double

指数の符号が大文字で出力されている以外は e のフォーマットと似ています( e の代わりにE )。

f

double

[-] dddd.dddd のフォーマットを持った実数。ここで dddd は 1 つ以上の 10 進整数です。小数点の前の表示桁数は、数値のサイズによって異なります。小数点以下の桁数は、必要な精度に依存します。

g

double

どちらの表記がよりコンパクトになるかに応じて f または e フォーマットで出力された実数。

G

double

どちらの表記がよりコンパクトになるかに応じて F または E フォーマットで出力された実数。

a

double

[−]0xh.hhhh p±dd フォーマットを持った実数で、h.hhhh が 「abcdef」を使用した 16 進数の仮数部で、dd が1桁以上の指数。小数点以下の桁数は、精度仕様によって決定されます。

A

double

[−]0xh.hhhh P±dd フォーマットを持った実数で、h.hhhh が 「abcdef」を使用した 16 進数の仮数部で、dd が1桁以上の指数。小数点以下の桁数は、精度仕様によって決定されます。

s

string

文字列出力

PrintFormat() の代わりに printf() の使用が可能です。

例:

void OnStart()
{
//— 取引サーバ名
  string server=AccountInfoString(ACCOUNT_SERVER);
//— 口座番号
  int login=(int)AccountInfoInteger(ACCOUNT_LOGIN);
//— long 値の出力
  long leverage=AccountInfoInteger(ACCOUNT_LEVERAGE);
  PrintFormat(“%s %d: leverage = 1:%I64d”,
              server,login,leverage);
//— 口座通貨
  string currency=AccountInfoString(ACCOUNT_CURRENCY);
//— 小数点以下 2 桁の double 値の出力
  double equity=AccountInfoDouble(ACCOUNT_EQUITY);
  PrintFormat(“%s %d: account equity = %.2f %s”,
              server,login,equity,currency);
//— +/- 符号の出力を必須とした double 値の出力
  double profit=AccountInfoDouble(ACCOUNT_PROFIT);
  PrintFormat(“%s %d: current result for open positions = %+.2f %s”,
              server,login,profit,currency);
//— 小数点以下の桁数が可変の double 値の出力
  double point_value=SymbolInfoDouble(_Symbol,SYMBOL_POINT);
  string format_string=StringFormat(“%%s: point value  = %%.%df”,_Digits);
  PrintFormat(format_string,_Symbol,point_value);
//— 整数値の出力
  int spread=(int)SymbolInfoInteger(_Symbol,SYMBOL_SPREAD);
  PrintFormat(“%s: current spread in points = %d “,
              _Symbol,spread);
//— 小数点以下 17 桁の科学(浮動小数点)形式の double 値の出力
  PrintFormat(“DBL_MAX = %.17e”,DBL_MAX);
//— 小数点以下 17 桁の科学(浮動小数点)形式の double 値の出力
  PrintFormat(“EMPTY_VALUE = %.17e”,EMPTY_VALUE);
//— デフォルトの精度で PrintFormat() を使用して出力
  PrintFormat(“PrintFormat(EMPTY_VALUE) = %e”,EMPTY_VALUE);
//— Print() を使用した簡単な出力
  Print(“Print(EMPTY_VALUE) = “,EMPTY_VALUE);
/* execution result
  MetaQuotes-Demo 1889998: leverage = 1:100
  MetaQuotes-Demo 1889998: account equity = 22139.86 USD
  MetaQuotes-Demo 1889998: current result for open positions = +174.00 USD
  EURUSD: point value  = 0.00001
  EURUSD: current spread in points = 12
  DBL_MAX = 1.79769313486231570e+308
  EMPTY_VALUE = 1.79769313486231570e+308
  PrintFormat(EMPTY_VALUE) = 1.797693e+308
  Print(EMPTY_VALUE) = 1.797693134862316e+308
*/
}

参照

StringFormat、DoubleToString、浮動小数点数型 (ダブル、フロート)

ResetLastError

所定の変数 _LastErrorの値をゼロに設定します。

void  ResetLastError();

戻り値

なし

注意事項

GetLastError() は _LastError 変数をゼロにしないことには留意すべきです。通常、関数呼び出しの前に ResetLastError() が呼び出され エラー発生がチェックされます。

ResourceCreate

データセットに基づいて画像のリソースを作成します。この関数には 2 つのバージョンがあります。
ファイルに基づいてリソースの作成

bool  ResourceCreate(
const string      resource_name,       // リソース名
const string      path               // ファイルへの相対パス
);

画素の配列に基づいてリソースの作成

bool  ResourceCreate(
const string      resource_name,      // リソース名
const uint&       data[],              // 配列としてのデータセット
uint             img_width,         // 画像リソースの幅
uint             img_height,         // 画像リソースの高さ
uint             data_xoffset,       // 画像の左上隅の水平右方向オフセット
uint             data_yoffset,       // 画像の左上隅の鉛直オフセット
uint             data_width,         // データセットに基づいた画像の全体の幅
ENUM_COLOR_FORMAT color_format         // 色処理方法
);

パラメータ

resource_name

[in]  リソース名

data[][]

。[in]  完全な画像を作成するための 1 次元または 2 次元の配列。

img_width

[in]  画像としてリソースに配置される矩形の画像領域のピクセルで表された幅。data_width を超すことは出来ません。

img_height

[in]  画像としてリソースに配置される矩形の画像領域の高さ(ピクセル単位)。

data_xoffset

[in]  画像の矩形領域の水平右方向オフセット。

data_yoffset

[in]  画像の矩形領域の縦の下方のオフセット。

data_width

[in]  1 次元配列のみで必要。データセットから画像の全幅を表します。data_width=0 の場合、値が img_width と等しいとみなされます。2 次元配列の場合、パラメータは無視され、data[] 配列の第 2 次元に等しいと仮定されます。

color_format

[in]  色処理方法で ENUM_COLOR_FORMAT 列挙から選ばれます。

戻り値

成功の場合は true、それ以外の場合は false 。エラー情報を取得するには、GetLastError() 関数が呼ばれます。次のエラーが発生可能です。

  • 4015 – ERR_RESOURCE_NAME_DUPLICATED (同名の動的リソースと静的リソース)
  • 4016 – ERR_RESOURCE_NOT_FOUND (リソースが見つからない)
  • 4017 – ERR_RESOURCE_UNSUPPORTED_TYPE (この種類のリソースのサポートが不在)
  • 4018 – ERR_RESOURCE_NAME_IS_TOO_LONG (リソース名が長すぎる)

注意事項

関数の 2 番目のバージョンが、異なる幅、高さ、及びシフトパラメータを使用して同じリソースを作成するために呼び出された場合は、新しいリソースは作成されず、単に既存のものが更新されます。

関数の最初のバージョンは、ファイルから画像や音声をアップロードするために使用され、2 番目のバージョンは、画像を動的に作成するために使用されます。

画像は24ビットまたは 32 ビットの色深度を持つ BMP 形式でなければなりません。サポートされているサウンド形式は WAV のみです。リソースのサイズは、16 MBを超えてはなりません。
 

ENUM_COLOR_FORMAT

識別子

説明

COLOR_FORMAT_XRGB_NOALPHA

アルファチャンネルの成分は無視されます。

COLOR_FORMAT_ARGB_RAW

色成分は端末によって処理されません(ユーザが正しく設定する必要があります)。

COLOR_FORMAT_ARGB_NORMALIZE

色成分は端末によって処理されます。

参照

リソース、ObjectCreate()、ObjectSetString()、OBJPROP_BMPFILE

ResourceFree

この関数は動的に作成されたリソースを削除します(割り当てられたメモリを解放します)。

bool  ResourceFree(
const string  resource_name      // リソース名
);

パラメータ

resource_name

[in] リソース名は “::” で始まるべきです。

戻り値

成功の場合は true、それ以外の場合は false。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

ResourceFree() は、MQL5アプリケーション開発者がリソースを操作する場合のメモリ消費量の管理を可能にします。メモリから削除されているリソースに結合されたグラフィカルオブジェクトは、削除後でも正常に表示されます。しかし、新しく作成されたグラフィカルオブジェクト(OBJ_BITMAP と OBJ_BITMAP_LABEL) は削除されたリソースを使用することが出来ません。

この関数は、プログラムによって作成された動的リソースのみを削除します。

参照

リソース、ObjectCreate()、PlaySound()、ObjectSetString()、OBJPROP_BMPFILE

ResourceReadImage

ResourceCreate() 関数で作成されたまたはコンパイル中に EX5 ファイルに保存されたグラフィックリソースからデータを読みます。

bool  ResourceReadImage(
const string      resource_name,       // 読まれるグラフィックリソース名
uint&             data[],             // リソースからデータを受け取るための配列
uint&             width,             // リソースの画像幅を受け取る
uint&             height,             // リソースの画像の高さを受け取る
);

パラメータ

resource_name

[in]  画像を含むグラフィクリソースの名称。自身のリソースにアクセスするには、「::ResourceName」が名称として使用されます。コンパイルされた EX5 ファイルからリソースをダウンロードする場合、完全な名称は「path\\filename.ex5::resourcename」のようにMQL5ディレクトリ、ファイル名とリソース名の相対パスが使用されるべきです 。

data[][]

[in]  グラフィックリソースからデータを受け取るための 1 次元または 2 次元の配列。

img_width

[out]  グラフィックリソース画像の幅(ピクセル単位)。

img_height

[out]  グラフィックリソース画像の高さ(ピクセル単位)。

戻り値

成功の場合は true、それ以外の場合は false 。エラー情報を取得するには、GetLastError() 関数が呼ばれます。

注意事項

data[] 配列がグラフィックリソースの作成に使用される場合, COLOR_FORMAT_ARGB_NORMALIZE または COLOR_FORMAT_XRGB_NOALPHA カラーフォーマットが使用されるべきです。

data[] 配列が 2 次元で、2 番目の次元が、グラフィカルリソースサイズのX(幅)より小さい場合、ResourceReadImage() 関数はfalseを返し、読み込みが行われません。しかし、もしリソースが存在すれば、実際の画像サイズが幅と高さのパラメータに返されます。 これで、リソースからのデータ受けとりをもう一度試むことが可能になります。

参照

リソース、ObjectCreate()、ObjectSetString()、OBJPROP_BMPFILE

ResourceSave

リソースを指定されたファイルに保存します。

bool  ResourceSave(
const string  resource_name      // リソース名
const string  file_name          // ファイル名
);

パラメータ

resource_name

[in]  「::」から始まるリソース名

file_name

[in]  MQL5\Files からのファイルの相対名

戻り値

成功の場合は true、それ以外の場合は fals。エラー情報を取得するには、GetLastError() が呼ばれます。

注意事項

この関数は常にファイルを上書きし、必要に応じてファイル名に必要な全ての中間ディレクトリを作成します。

参照

リソース、ObjectCreate()、PlaySound()、ObjectSetString()、OBJPROP_BMPFILE

SetReturnError

操作終了時に端末プロセスを返すコードを設定します。

void  SetReturnError(
int ret_code      // クライアント端末完了コード
);

パラメータ

ret_code

[in]  操作完了にクライアント端末が返すコード

戻り値

なし

注意事項

SetReturnError()関数を使用して指定されたret_code戻りコードを設定すると、コマンドラインから端末を起動する際にプログラム操作完了の理由を分析するのに有用です。

TerminalClose()と異なり、端末操作はSetReturnError()関数によっては完了されません。代わりに、完了時に端末プロセスを返すコードを設定するだけです。

SetReturnError()関数が複数回呼び出されたり、異なるMQL5プログラムから呼び出されたりすると、最後に設定された戻りコードが返されます。

設定されたコードは、以下の場合を除いて、端末プロセスの完了時に返されます。

  • 実行中に重大エラーが発生した –
  • TerminalClose(int ret_code)関数が呼び出されて、指定されたコードで端末操作完了コマンドを発行した。

 

参照

プログラム実行、実行エラー、初期化解除の理由、 TerminalClose

SetUserError

事前に定義された変数 _LastError を ERR_USER_ERROR_FIRST + user_error に等しい値に設定します。

void  SetUserError(
ushort user_error,   // エラー番号
);

パラメータ

user_error

[in]  ユーザが設定したエラー番号

戻り値

なし

注意事項

SetUserError(user_error) 関数でエラーが設定された後、GetLastError() は ERR_USER_ERROR_FIRST + user_error に等しい値を返します。

例:

void OnStart()
{
//— エラー番号 65537=(ERR_USER_ERROR_FIRST +1) を設定
SetUserError(1);
//— 最後のエラーコードを取得する
Print(“GetLastError = “,GetLastError());
/*
結果
GetLastError = 65537
*/
}

Sleep

指定された間隔内で現在のエキスパートアドバイザーまたはスクリプトの実行を一時停止します。

void  Sleep(
int  milliseconds      // 間隔
);

パラメータ

milliseconds

[in]  ミリ秒単位の遅延間隔

戻り値

なし

注意事項

指標はインターフェースのスレッドで実行され遅らせるべきではないので、Sleep() 関数はカスタム指標からは呼び出すことが出来ません。この関数は 0.1 秒ごとの EA 休止フラグのチェックを内蔵しています。

TerminalClose

この関数は端末に操作完了を命令します。

bool  TerminalClose(
int ret_code      // クライアント端末のコードを終了する
);

パラメータ

ret_code

[in]  動作完了時にクライアント端末の処理によって返されたリターンコード

戻り値

成功の場合は true、それ以外の場合は false

注意事項

TerminalClose() 関数は、すぐに端末を停止せずに、動作を完了するように端末に命令します。

TerminalClose() を呼び出したエキスパートアドバイザーのコードは、即時完了のための準備を(例えば、開いているファイルは、通常モードで閉じる)終える必要があります。この関数の呼び出しは リターンオペレータ で続かれる必要があります。

ret_code パラメータは、コマンドプロンプトからの起動時に端末操作のプログラム終了の理由を分析するのに必要なリターンコードを示すことが出来ます。

例:

//— 入力パラメータ
input int  tiks_before=500; // 終了までのティック数
input int  pips_to_go=15;   // ピップス(為替差益)
input int  seconds_st=50;   // エキスパートアドバイザーに与えられた秒数
//— グローバル
datetime   launch_time;
int        tick_counter=0;
//+——————————————————————+
//| エキスパート初期化解除に使用される関数                                    |
//+——————————————————————+
void OnDeinit(const int reason)
{
//—
Print(__FUNCTION__,” reason code = “,reason);
Comment(“”);
}
//+——————————————————————+
//| エキスパートティック関数                                                 |
//+——————————————————————+
void OnTick()
{
static double first_bid=0.0;
MqlTick       tick;
double        distance;
//—
SymbolInfoTick(_Symbol,tick);
tick_counter++;
if(first_bid==0.0)
{
launch_time=tick.time;
first_bid=tick.bid;
Print(“first_bid =”,first_bid);
return;
}
//— 価格距離(ピップス単位)
distance=(tick.bid-first_bid)/_Point;
//— EA 動作を追跡するための通知を表示する
string comm=“From the moment of start:\r\n\x25CF elapsed seconds: “+
IntegerToString(tick.time-launch_time)+” ;”+
“\r\n\x25CF ticks received: “+(string)tick_counter+” ;”+
“\r\n\x25CF price went in points: “+StringFormat(“%G”,distance);
Comment(comm);
//— 端末を閉じる状態を確認するためのセクション
if(tick_counter>=tiks_before)
TerminalClose(0);   // ティックカウンタによる終了
if(distance>pips_to_go)
TerminalClose(1);   // pips_to_go に等しいピップスの数で上がる
if(distance<-pips_to_go)
TerminalClose(-1);   // pips_to_go に等しいピップスの数で下げる
if(tick.time-launch_time>seconds_st)
TerminalClose(100); // 時間切れによる終了
//—
}

参照

プログラム実行、実行エラー、初期化解除の理由

TesterHideIndicators

EAで使用される指標の非/表示モードを設定します。この関数は、テスト中にのみ指標の可視性を管理するためのものです。

void  TesterHideIndicators(
bool      hide     // フラグ
);

パラメータ

hide

[in]  テスト中に指標を非表示にするフラグ(true – 非表示、false – 表示)

戻り値

なし

注意事項

デフォルトでは、テスト中のEAで作成されたすべての指標は視覚的にテストチャートに表示されます。さらに、これらの指標は、テストが完了したときに自動的に開かれるチャートに表示されます。TesterHideIndicators()関数を使用すると、開発者は使用される指標の表示を無効にすることができます。

EAをテストするときに適用された指標の表示を無効にするには、EAのハンドルを作成する前にTesterHideIndicators()をtrueで呼び出します。それ以降に作成されるすべての指標には非表示フラグが設定されます。これらの指標は、ビジュアルテスト中にも、テスト完了時に自動的に開かれるチャート上にも表示されません。

新しく作成された指標の非表示モードを無効にするには、TesterHideIndicators()をfalseで呼び出します。テスト中のEAから直接生成された指標のみをテストチャートに表示することができます。このルールは<data_folder>MQL5\Profiles\Templatesにテンプレートが1つもない場合にのみ適用されます。

<data_folder>MQL5\Profiles\Templatesディレクトリに特別なテンプレート(<EA_name>.tpl)が含まれている場合は、このテンプレートの指標のみがビジュアルテスト中とテストチャート上に表示されます。この場合、テスト中のEAに適用された指標は表示されません。この動作は、EAコードでTesterHideIndicators()がtrueで呼び出されても変わりません。

<data_folder>MQL5\Profiles\Templatesディレクトリにtester.tplがあるが特別な<EA_name>.tplテンプレートがない場合は、tester.tplの指標とTesterHideIndicators()関数で無効化されていないEA指標がビジュアルテストとテストチャートで表示されます。tester.tplテンプレートがない場合は、default.tplテンプレートの指標が代わりに使われます。

ストラテジーテスターが適切なテンプレート(<EA_name>.tpl、tester.tplまたはdefault.tpl)を見つけられなかった場合、EAに適用された指標の表示は完全にTesterHideIndicators()関数によって管理されます。

例:

bool CSampleExpert::InitIndicators(void)
{
TesterHideIndicators(true);
//— MACD指標を作成する
if(m_handle_macd==INVALID_HANDLE)
if((m_handle_macd=iMACD(NULL,0,12,26,9,PRICE_CLOSE))==INVALID_HANDLE)
{
printf(“Error creating MACD indicator”);
return(false);
}
TesterHideIndicators(false);
//— EMA指標を作成してコレクションに追加する
if(m_handle_ema==INVALID_HANDLE)
if((m_handle_ema=iMA(NULL,0,InpMATrendPeriod,0,MODE_EMA,PRICE_CLOSE))==INVALID_HANDLE)
{
printf(“Error creating EMA indicator”);
return(false);
}
//— 成功した
return(true);
}

参照

IndicatorRelease

TesterStatistics

この関数はテストの結果に基づいて算出された指定の統計パラメータを返します。

double  TesterStatistics(
ENUM_STATISTICS statistic_id      // ID
);

パラメータ

statistic_id

[in] ENUM_STATISTICS 列挙から選ばれた統計パラメータの ID

戻り値

テスト結果に基づいた統計パラメータの値

注意事項

この関数はテスタの OnTester() または OnDeinit() の中で呼び出されます。それ以外の場合、結果は定義されていません。

TesterStop

テスト中にプログラム操作終了コマンドを発行します。

void  TesterStop();

戻り値

なし

注意事項

TesterStop()関数はテストエージェント(たとえば、特定の数の負け取引または事前に設定されたドローダウンレベルに達した場合)で、EAを定期的に早期にシャットダウンするように設計されています。

TesterStop()の呼び出しはテストの正常終了とみなされるため、 OnTester()関数が呼び出され、累積取引統計および最適化基準の値がストラテジーテスターに送信されます。

ストラテジーテスターでのExpertRemove()の呼び出しもテストの正常終了とみなされて取引統計を取得できますが、EAはエージェントのメモリからアンロードされます。この場合、プログラムを再読み込みするためには、次のパラメータセットのパスを実行する必要があります。よって、TesterStop()はテストの早期終了のための好ましいオプションです。

 

参照

プログラムの実行、取り引き戦略のテスト、ExpertRemove、 SetReturnError

TesterDeposit

テスト中の資金入金をエミュレートする特殊関数です。資金管理システムの一部で使用することができます。

bool  TesterDeposit(
double money      // 入金額
);

パラメータ

money

[in] 預金通貨での口座への入金

戻り値

成功の場合は true、それ以外の場合は false

 

参照

TesterWithdrawal

TesterWithdrawal

この特殊関数は、テストの過程で出金の動作をエミュレートします。資産管理システムでの使用が可能です。

bool  TesterWithdrawal(
double money      // 出金の合計額
);

パラメータ

money

[in]  (預金通貨で)出金必要額の合計

戻り値

成功の場合は true、それ以外の場合は false

 

参照

TesterDeposit

TranslateKey

現在の入力言語とコントロールキーの状態を考慮して、仮想キーコードでUnicode文字を返します。

short  TranslateKey(
int  key_code      // Unicode文字を受け取るキーコ—ド
);

パラメータ

key_code

[in]  キーコ—ド

戻り値

変換が成功した場合はUnicode文字。エラーの場合は-1。

注意事項

この関数はToUnicodeExを使用してユーザーが押したキーをUnicode文字に変換します。ToUnicodeExがトリガされない場合(たとえば、SHIFTキー文字を受け取ろうとする場合など)にはエラーが発生することがあります。

例:

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
if(id==CHARTEVENT_KEYDOWN)
{
short sym=TranslateKey((int)lparam);
//— 入力された文字が最上にUnicodeに変換された場合
if(sym>0)
Print(sym,“‘”,ShortToString(sym),“‘”);
else
Print(“Error in TranslateKey for key=”,lparam);
}
}

参照

クライアント端末イベント、OnChartEvent

ZeroMemory

この関数は参照によって渡された変数をリセットします。

void  ZeroMemory(
void & variable      // 変数をリセットする
);

パラメータ

variable

[in] [out]  リセットされる、参照によって渡された変数(ゼロに初期化する)

戻り値

なし

注意事項

この関数の呼び出しは、引数が文字列である場合、その値として NULL を示すのと同じです。
基本データ型とその配列、また基本データ型の構造体とクラスにとっては、これはただのリセットと同じです。
文字列と動的配列を含むオブジェクトの場合、ZeroMemory() が各要素に対して呼び出されます。
const 修飾子によって保護されていない任意の配列の場合、すべての要素がゼロで初期化されます。
複合オブジェクトの配列の場合、ZeroMemory() が各要素に対して呼び出されます。

ZeroMemory() は protected メンバや継承クラスを持つクラスでは使用できません。

Originally posted 2019-07-29 22:58:58.

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">