Skip to content

cosicosilife.com

ライフハックについていろいろ書きます

Primary Menu
  • サイトマップ
  • クラウド技術
  • 安全資産投資
  • 旅行
  • ライフハック
  • プライバシーポリシー
  • 運営者情報とご連絡先
  • Home
  • 安全資産投資
  • MT4でEAを動かしてみる
  • AI 機械学習
  • 安全資産投資

MT4でEAを動かしてみる

david 2025年2月24日

この記事の目次(クリックしたらジャンプ)

Toggle
  • はじめに
  • 前提条件
  • 動かすプログラム
  • 動かし方
  • 自動売買をON

はじめに

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

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

Continue Reading

Previous: DeepSeekの進化が変えるAI活用の未来:オープンソースモデルの可能性と実践ガイド
Next: ドイツ語にゅもん

Related Stories

german
  • AI 機械学習

ドイツ語にゅもん

david 2025年3月9日
deepseek
  • AI 機械学習
  • クラウド技術

DeepSeekの進化が変えるAI活用の未来:オープンソースモデルの可能性と実践ガイド

david 2025年2月9日
3
  • 安全資産投資

安全資産への投資のススメ

david 2024年11月10日
  • argocdの導入
  • (タイトルなし)
  • オンプレUbuntuでHelm中心にKubernetes運用・CI/CD構築
  • Ubuntu上にArgo CDをインストールし、ブラウザアクセスできるようにする手順(k8s.cosicosilife.com対応)
  • 【初心者向け】Argo CD に初めてのアプリケーションをデプロイしてみよう!
  • サイトマップ
  • クラウド技術
  • 安全資産投資
  • 旅行
  • ライフハック
  • プライバシーポリシー
  • 運営者情報とご連絡先
  • サイトマップ
  • クラウド技術
  • 安全資産投資
  • 旅行
  • ライフハック
  • プライバシーポリシー
  • 運営者情報とご連絡先
Copyright © Cosicosilife | MoreNews by AF themes.