実現したいこと
MT5で、自動でポジションを閉じるEAを作りたいです。
表示しているMA20を跨いでローソク足が確定した場合にポジションを閉じてほしいです。
買いポジションの場合は、MAを下回って確定したら自動決済です。売りポジションの場合は、MAを上回って確定したら自動決済です。複数ポジションを持っている場合にはポジションを指定できるようにしたいと思うのですが。
前提
ここに質問の内容を詳しく書いてください。
(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
警告 56行目 28列 implicit conversion tom 'number' to 'string'
エラー1 60行目 22列 'PositionClose' - undeclared identifier
エラー2 60行目 36列 'ticket' - some operator expected
該当のソースコード
//+------------------------------------------------------------------+
//| CloseOnMA.mq5 |
//| Copyright 2024, MetaQuotes Software Corp. |
//| 1 |
//+------------------------------------------------------------------+
#property strict
// インクルード
#include <Trade\Trade.mqh>
// 入力パラメータ
input ENUM_MA_METHOD MA_Method = MODE_SMA; // MAの計算方法
input int MA_Period = 20; // MAの期間
input int MagicNumber = 123456; // マジックナンバー
input double LotSize = 0.1; // トレードロットサイズ
input int Slippage = 3; // スリッページ
// グローバル変数
int ma_handle; // MAのハンドル
// 初期化関数
void OnInit()
{
// MAを設定
ma_handle = iMA(NULL, 0, MA_Period, 0, MA_Method, PRICE_CLOSE);
}
// エントリーポイント
void OnTick()
{
// 現在の価格を取得
double current_price = SymbolInfoDouble(Symbol(), SYMBOL_BID);
// 現在のMAの値を取得 double ma_value = iMA(NULL, 0, MA_Period, 0, MA_Method, 0); // 買いポジションの場合、MAを下回ったらポジションをクローズ if (ma_value > current_price) { ClosePositionByType(POSITION_TYPE_BUY); } // 売りポジションの場合、MAを上回ったらポジションをクローズ else if (ma_value < current_price) { ClosePositionByType(POSITION_TYPE_SELL); }
}
// 指定したポジションタイプのポジションをすべて閉じる関数
void ClosePositionByType(ENUM_POSITION_TYPE position_type)
{
int total = PositionsTotal();
for (int i = total - 1; i >= 0; i--)
{
ulong ticket = PositionGetTicket(i);
if (PositionSelect(ticket))
{
if (PositionGetInteger(POSITION_TYPE) == position_type && PositionGetInteger(POSITION_MAGIC) == MagicNumber)
{
if (!PositionClose(ticket))
{
Print("Error closing position: ", GetLastError());
}
}
}
}
}
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。