MT4サンプルコード02
※未検証、勉強の記録として残しているだけです。(トレンド買いのみ)
レンジ相場はループ注文を追加、トレンド相場はシンプルなトレンドフォローの買い専用プログラムを提案します。このプログラムは、移動平均線クロスオーバーを利用し、証拠金の制約を考慮して、小刻みに買い上がる仕組みを含んでいます。
– **買いのみ**のプログラムにしており、売りはまだ想定していません、
以下がサンプルコードです:
このプログラムは以下のように機能します:
1. 短期移動平均線が長期移動平均線を上回った場合に買いポジションを持ちます。
2. 買いポジションは指定されたロットサイズで行われ、ストップロスとテイクプロフィットが設定されます。
3. 証拠金レベルが200%以下の場合や証拠金が不足している場合には新規注文を行いません。
USDJPYに関して特別な調整が必要かどうかについてですが、一般的には通貨ペアによって特別な調整を加えることは少ないです。ただし、いくつかのポイントを確認すると良いでしょう。
1. **スプレッド**:
USDJPYのスプレッドは他の通貨ペアに比べて狭いことが多いですが、ブローカーごとに異なるため、スプレッドに注意してください。プログラムの`Slippage`パラメータを適切に設定して、スプレッドが考慮されるようにします。
2. **証拠金**:
通貨ペアごとの証拠金要件が異なることがありますので、USDJPYの証拠金要件を確認してください。証拠金計算の部分でブローカーの仕様に従って調整します。
3. **取引時間**:
通貨ペアによって取引が活発な時間帯が異なります。USDJPYは東京市場とニューヨーク市場の時間帯が取引量が多いです。そのため、取引の活発な時間帯を意識してプログラムを稼働させると良いでしょう。
以下は、先ほどのサンプルコードに少し調整を加えたものです。この調整はUSDJPY向けに特別な設定をする必要はないものの、一般的なポイントを考慮しています:
“`mql4
//+——————————————————————+
//| TrendFollowBuyOnly.mq4 |
//| トレンドフォロー戦略のサンプル (買いのみ、MQL4) |
//+——————————————————————+
#property strict
//◆ 入力パラメータ ◆
input double LotSize = 0.01; // ロット数
input double SL = 100; // ストップロス (ピップス)
input double TP = 200; // テイクプロフィット (ピップス)
input int FastMAPeriod = 20; // 短期移動平均線期間
input int SlowMAPeriod = 50; // 長期移動平均線期間
input int Slippage = 3; // 許容スリッページ
input double MarginThreshold = 2.0; // 必要証拠金の何倍の余剰証拠金が必要か
//+——————————————————————+
//| OnInit: 初期化関数 |
//+——————————————————————+
int OnInit()
{
Print(“◆ トレンドフォローEAを起動: LotSize=”, LotSize,
“, SL=”, SL, “, TP=”, TP,
“, FastMAPeriod=”, FastMAPeriod,
“, SlowMAPeriod=”, SlowMAPeriod);
return(INIT_SUCCEEDED);
}
//+——————————————————————+
//| OnTick: メインループ |
//+——————————————————————+
void OnTick()
{
// 短期移動平均線と長期移動平均線の計算
double fastMA = iMA(NULL, 0, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
double slowMA = iMA(NULL, 0, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
// 証拠金チェック
double marginRequired = CalcMarginRequired(LotSize, Ask);
double freeMargin = AccountFreeMargin();
double marginLevel = AccountFreeMargin() / AccountMargin() * 100;
if (freeMargin < marginRequired * MarginThreshold || marginLevel < 200)
{
Print(“証拠金不足または証拠金レベルが低い: 必要=”, marginRequired, “, フリー=”, freeMargin, “, 証拠金レベル=”, marginLevel);
return;
}
// 買いシグナル(クロスオーバー)
if (fastMA > slowMA)
{
// 買いポジションを持つ
int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage,
Bid – SL * Point, Ask + TP * Point,
“TrendFollowBuy”, 0, 0, clrBlue);
if (ticket < 0)
{
Print(“◆ 買い注文失敗: “, GetLastError());
}
else
{
Print(“◆ 買い注文成功: Ticket=”, ticket);
}
}
return;
}
//+——————————————————————+
//| CalcMarginRequired: 必要証拠金の概算 (MQL4用) |
//+——————————————————————+
double CalcMarginRequired(double lot, double price)
{
double contractSize = MarketInfo(Symbol(), MODE_LOTSIZE);
double leverage = AccountLeverage();
double margin = (lot * contractSize * price) / leverage;
return margin;
}
“`
いくつかの注意点があります。
1. **エントリーポイントのタイミング**:
– プログラムは移動平均線のクロスオーバーをエントリーポイントとしていますので、すでに上昇トレンドにある場合、次のクロスオーバーシグナルが発生するまでは新しいエントリーが行われないかもしれません。そのため、上昇トレンドの途中からエントリーしたい場合は、現在の価格が上昇トレンドにあることを確認し、手動でエントリーすることを検討してください。
2. **リスク管理**:
– すでに上昇トレンドにある場合でも、ストップロス(SL)とテイクプロフィット(TP)はしっかりと設定して、リスク管理を行ってください。急激な相場の変動にも対応できるようにしましょう。
3. **時間足**:
– 1時間足のチャートを使用している場合、シグナルが発生する頻度が高くなります。特に短期の移動平均線を使用している場合は、頻繁なエントリーが行われる可能性があります。これによりポジションの管理が複雑になることもありますので、設定を調整してみることも考えてください。
※プログラミング詳細内容はEAの専門家にお尋ねください。