1. CopyLow関数の概要と実務での活用法
MQL5のCopyLow関数は、指定した通貨ペアおよび時間足の「安値(Low)」データを取得し、配列に格納するための関数です。FXの自動売買(EA)開発において、安値データは単なる価格情報以上の意味を持ちます。
実務レベルでは、主に以下の用途で使用されます。
* ストップロスの設定: 直近数本のローソク足の最安値を計算し、そのわずか下に逆指値を置く。
* ブレイクアウト判定: 前日の安値を下抜けた瞬間にショートエントリーする。
* ボラティリティの把握: 高値(CopyHigh)と安値の差から、現在の市場のボラティリティを算出する。
初心者の方が最初につまずきやすいのは、「取得したデータの時系列順序」です。MQL5の動的配列は、デフォルトでは古いデータがインデックス0になります。しかし、MT4の慣習に慣れている開発者は「最新の足=インデックス0」として扱いたいため、このギャップでバグ(インデックスの読み間違い)を誘発しがちです。
2. 構文と戻り値
CopyLowには、データの指定方法によって3つのオーバーロード(書き方)がありますが、最も一般的に使われる「開始位置と個数を指定する方法」を解説します。
構文
int CopyLow(
string symbol_name, // 通貨ペア(NULLで現在のペア)
ENUM_TIMEFRAMES timeframe, // 時間足(PERIOD_CURRENTで現在の足)
int start_pos, // 開始位置(0が最新の足)
int count, // 取得する個数
double low_array[] // 格納先の配列
);
戻り値
- 成功時: コピーされた要素の数(int型)を返します。
- 失敗時: -1を返します。エラーの詳細は
GetLastError()関数で確認できます。
3. 具体的な使い方・実践サンプルコード
以下は、直近3本のローソク足の安値をチェックし、現在の価格がその最安値を更新した際にログを出力するシンプルなEAの例です。
//+------------------------------------------------------------------+
//| Sample_CopyLow.mq5 |
//+------------------------------------------------------------------+
void OnTick()
{
double lows[]; // 安値を格納する配列
int lookback = 3; // 過去3本分を取得
// 配列を時系列(最新がインデックス0)にセット
ArraySetAsSeries(lows, true);
// CopyLowを実行(最新の確定足[1]から3本分取得)
// インデックス0は現在形成中の足のため、実務では1から取ることが多い
if(CopyLow(_Symbol, _Period, 1, lookback, lows) < lookback)
{
Print("データの取得に失敗しました。エラーコード: ", GetLastError());
return;
}
// 取得したデータから最安値を算出
double lowestPrice = lows[0];
for(int i = 1; i < lookback; i++)
{
if(lows[i] < lowestPrice) lowestPrice = lows[i];
}
// 現在価格の取得
double currentBid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
// ロジック判定:直近安値を更新したか?
if(currentBid < lowestPrice)
{
Print("直近3本の安値を更新しました! 現在値: ", currentBid, " 最安値: ", lowestPrice);
}
}
4. 使用上の注意点とよくあるエラー
-
配列の時系列設定(ArraySetAsSeries):
デフォルトの配列は、古いデータから順に[0], [1], [2]…と並びます。ArraySetAsSeries(array, true)を実行しない限り、lows[0]は「指定した範囲の中で最も古い足」を指すことになります。これを忘れると、ロジックが意図せず逆転します。 -
データ未準備によるエラー:
EAの起動直後や時間足を切り替えた直後は、ヒストリーデータが端末にダウンロードされていないことがあります。この場合、CopyLowは-1を返します。必ず戻り値をチェックし、データが正しく取得できたかを確認するIF文を入れてください。 -
メモリへの負荷:
countに数万といった極端に大きな数値を指定すると、メモリ消費が激しくなりEAの動作が重くなります。必要な分だけを取得するのがクオンツエンジニアとしての鉄則です。
5. 【重要】自動売買における約定スピードと環境の罠
アルゴリズムのロジックがどれほど完璧であっても、それを実行する「環境」が劣悪であれば、期待した利益は得られません。特に日本国内の自宅PCから海外の取引サーバーへ注文を出す場合、物理的な距離に起因するネットワーク遅延(レイテンシ)は避けられず、画面上の価格と約定価格が乖離する「スリッページ」が頻発します。この数ミリ秒の遅れが、積もり積もって致命的な損失を招きます。
プロのクオンツエンジニアが共通して行う対策は、取引サーバーに物理的に近い場所にある「専用のVPS(仮想専用サーバー)」を利用することです。24時間安定して稼働し、超低遅延で注文を執行できる環境を整えることは、手法を磨くこと以上にトレードの勝率に直結します。自動売買を本気で運用するのであれば、自宅PCではなく、信頼性の高いVPS環境への投資は必須と言えるでしょう。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント