自動売買システムへの応用

2024年10月1日

執筆者

佐川直弘(株式会社トリロジー取締役)

自動売買システムでは、アカウント情報を利用してリアルタイムにリスクを管理することが重要です。ここでは、口座の有効証拠金と現在のリスクレベルを基に、ポジションのサイズを動的に調整する方法を紹介します。

アカウント情報を利用したリスク管理の例

コード例

以下のコードは、有効証拠金を基にポジションのサイズを決定し、リスクを管理する自動売買システムの例です。このシステムは、指定されたリスク割合を超えないようにポジションサイズを調整します。

スクリプトの例
//+——————————————————————+
//|                                             RiskManagementEA.mq4 |
//|                        Copyright 2024, MetaQuotes Software Corp. |
//|                                           https://www.metaquotes.net |
//+——————————————————————+
input double RiskPercentage = 1.0; // リスクの割合(%)
double LotSize;                    // ポジションサイズ
double AccountEquity;              // 有効証拠金

//+——————————————————————+
//| Expert initialization function                                   |
//+——————————————————————+
int OnInit()
  {
  // 初期化
  AccountEquity = AccountEquity();
  LotSize = CalculateLotSize();
  return(INIT_SUCCEEDED);
  }

//+——————————————————————+
//| Expert deinitialization function                                 |
//+——————————————————————+
void OnDeinit(const int reason)
  {
  // 終了時の処理
  }

//+——————————————————————+
//| Expert tick function                                             |
//+——————————————————————+
void OnTick()
  {
  // 有効証拠金を取得
  AccountEquity = AccountEquity();
 
  // ポジションサイズを再計算
  LotSize = CalculateLotSize();
 
  // ロジックに基づいて注文を送信(例として買い注文を送信)
  if(ConditionToBuy())
    {
      if(OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, 0, 0, “Buy order", MAGIC_NUMBER, 0, Blue) < 0)
        {
        Print(“注文送信に失敗しました。エラーコード: “, GetLastError());
        }
    }
  }

//+——————————————————————+
//| ポジションサイズを計算する関数                                   |
//+——————————————————————+
double CalculateLotSize()
  {
  double lot = (AccountEquity * RiskPercentage / 100) / 100000; // 簡単なロットサイズ計算例
  lot = NormalizeDouble(lot, 2); // 小数点以下2桁に丸める
  return(lot);
  }

//+——————————————————————+
//| 買い注文の条件を判定する関数                                     |
//+——————————————————————+
bool ConditionToBuy()
  {
  // ここに買い注文の条件を記述
  return(true); // シンプルな例として常にtrueを返す
  }
//+——————————————————————+

コードの解説

input double RiskPercentage = 1.0;
トレードごとのリスクの割合を指定します。この例では1%としています。
double LotSize;
ポジションサイズを格納する変数です。
double AccountEquity;
有効証拠金を格納する変数です。
OnInit()
エキスパートアドバイザの初期化時に呼び出される関数です。有効証拠金を取得し、初期のポジションサイズを計算します。
OnTick()
新しいティックが到着するたびに呼び出される関数です。有効証拠金を更新し、ポジションサイズを再計算します。また、買い注文の条件が満たされた場合に注文を送信します。
CalculateLotSize()
有効証拠金とリスク割合に基づいてポジションサイズを計算する関数です。
ConditionToBuy()
買い注文の条件を判定する関数です。この例では常にtrueを返すようにしています。

活用方法

このスクリプトを使用することで、自動売買システムがリアルタイムでアカウント情報を利用し、リスクを適切に管理することができます。これにより、トレードの安全性と効率性を高めることが可能です。次回のトレードから、ぜひこの方法を活用してみてください。

MQL4

Posted by 佐川直弘