はじめに
EAで何となく自動売買してみたくなったので、操作してみました
前提条件
・楽天MT4野でもアカウントを持っている人
・MT4をご自身のWINDOWS PCでインストールしている
・一通りEAのプログラムで何が書いてあるかわかる
動かすプログラム
windows にMT4 インストールしたら下記のようなフォルダができるので、Experts 以下のフォルダに
C:\Users\david\AppData\Roaming\MetaQuotes\Terminal\A84B568DA10F82A859153D6F\MQL4\Experts
下記のEA作成して、mq4という拡張子で保存してください
//+------------------------------------------------------------------+
//| Multi-Currency Trading EA |
//| Uses MA, RSI, ATR, Bollinger Bands for Trade Logic |
//| Implements Dynamic Risk Management and Filtering |
//+------------------------------------------------------------------+
// 設定パラメータ
input double LotSize = 0.1;
input int TakeProfitMultiplier = 3; // ATRに基づいた利益確定倍率
input int StopLossMultiplier = 2; // ATRに基づいた損切倍率
input int FastMAPeriod = 10; // 短期移動平均線
input int SlowMAPeriod = 50; // 長期移動平均線
input int RSIPeriod = 14; // RSI期間
input int ATRPeriod = 14; // ATR期間
input double MinVolatility = 0.0005;// 最小ボラティリティ閾値
input int TradeInterval = 60; // 取引間隔 (秒)
input double RiskPercentage = 2.0; // 許容リスク割合(%)
// 通貨ペアリスト(12種類)
string Pairs[] = {"EURUSD", "USDJPY", "GBPUSD", "AUDUSD", "USDCAD", "NZDUSD", "EURGBP", "EURJPY", "GBPJPY", "CHFJPY", "AUDJPY", "CADJPY"};
double LastTradeTime;
// 資金管理に基づくロットサイズ計算
double CalculateLotSize(string symbol)
{
double accountRisk = AccountBalance() * (RiskPercentage / 100.0);
double tickValue = MarketInfo(symbol, MODE_TICKVALUE);
double lotSize = accountRisk / (StopLossMultiplier * tickValue);
return NormalizeDouble(lotSize, 2);
}
// ボラティリティ確認(ATRを使用)
bool IsMarketVolatile(string symbol)
{
double atr = iATR(symbol, PERIOD_M15, ATRPeriod, 0);
return (atr > MinVolatility);
}
// トレンド確認(MAクロスをチェック)
bool IsTrendContinuing(string symbol, bool isBuy)
{
int trendCount = 0;
for (int i = 1; i <= 5; i++)
{
double fastMA = iMA(symbol, PERIOD_M15, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
double slowMA = iMA(symbol, PERIOD_M15, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
if ((isBuy && fastMA > slowMA) || (!isBuy && fastMA < slowMA))
{
trendCount++;
}
}
return (trendCount >= 3);
}
// MACD & ボリンジャーバンドを利用したモメンタムチェック
bool IsStrongMomentum(string symbol)
{
double macdMain = iMACD(symbol, PERIOD_M15, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 0);
double macdSignal = iMACD(symbol, PERIOD_M15, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 0);
double upperBand = iBands(symbol, PERIOD_M15, 20, 2, 0, PRICE_CLOSE, MODE_UPPER, 0);
double lowerBand = iBands(symbol, PERIOD_M15, 20, 2, 0, PRICE_CLOSE, MODE_LOWER, 0);
double price = iClose(symbol, PERIOD_M15, 0);
return ((macdMain > macdSignal && price > upperBand) || (macdMain < macdSignal && price < lowerBand));
}
// メイントレードロジック
void OnTick()
{
for(int i = 0; i < ArraySize(Pairs); i++)
{
string symbol = Pairs[i];
double fastMA = iMA(symbol, PERIOD_M15, FastMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
double slowMA = iMA(symbol, PERIOD_M15, SlowMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
double rsi = iRSI(symbol, PERIOD_M15, RSIPeriod, PRICE_CLOSE, 0);
double lotSize = CalculateLotSize(symbol);
double atr = iATR(symbol, PERIOD_M15, ATRPeriod, 0);
double dynamicStopLoss = StopLossMultiplier * atr;
double dynamicTakeProfit = TakeProfitMultiplier * atr;
if (TimeCurrent() - LastTradeTime < TradeInterval) continue;
if (!IsMarketVolatile(symbol)) continue;
// 買いエントリー条件
if(fastMA > slowMA && rsi > 50 && IsTrendContinuing(symbol, true) && IsStrongMomentum(symbol))
{
OrderSend(symbol, OP_BUY, lotSize, Ask, 3, Ask - dynamicStopLoss * Point, Ask + dynamicTakeProfit * Point);
LastTradeTime = TimeCurrent();
}
// 売りエントリー条件
else if(fastMA < slowMA && rsi < 50 && IsTrendContinuing(symbol, false) && IsStrongMomentum(symbol))
{
OrderSend(symbol, OP_SELL, lotSize, Bid, 3, Bid + dynamicStopLoss * Point, Bid - dynamicTakeProfit * Point);
LastTradeTime = TimeCurrent();
}
}
}
動かし方
まずはEA をコンパイルして動くかどうか確認します。ツールからメタエディターを開きます

コンパイルボタンを押します

このようにエラーがでなければOK

自動売買をON
ツール >> ナビゲーター

先ほど作成したEAをひょいっと、チャートにドラッグアンドドロップ

自動売買をONにします

ターミナルの操作履歴に Automated trading enabled と表示されればOK

ターミナル間違えて消しちゃった人は もう一度表示 から出してみてください
