XX分経過したポジションをクローズする
恋と同じで、どんなロジックも時間経過によりエッジが失われたりします。
XX分経ったら決算するロジックを作成してみました。
よかったら使ってみてね
#include <Trade\Trade.mqh>
CTrade mytrade;
//+------------------------------------------------------------------+
//| オープンしてX分経ったポジションを清算する |
//+------------------------------------------------------------------+
void CloseOrdersAfterXMinutes(int minutes, ulong magicNumber1, ulong magicNumber2) export
{
int totalOrders = PositionsTotal(); // オープン中の全ポジション数を取得
for (int i = totalOrders - 1; i >= 0; i--)
{
ulong ticket = PositionGetTicket(i);
if (PositionSelectByTicket(ticket))
{
// Magicnumberが一致するもの対象とする
ulong magic = PositionGetInteger(POSITION_MAGIC); // ポジションのMagicNumber
if (magic == magicNumber1 || magic == magicNumber2)
{
datetime openTime = (datetime)PositionGetInteger(POSITION_TIME); // ポジションのオープン時間を取得
datetime currentTime = TimeCurrent(); // 現在の時間を取得
int elapsedTime = (int)((currentTime - openTime) / 60); // 経過時間を分単位で計算
if (elapsedTime >= minutes)
{
// 経過時間が指定時間を超えた場合、ポジションを決済
mytrade.PositionClose(ticket, 10);
}
}
}
else
{
Print("PositionSelectByTicket error: ", GetLastError());
}
}
}
使い方(5分経過したポジションをクローズしたい場合)
CloseOrdersAfterXMinutes(5, MagicNumber_bid, MagicNumber_ask);
MQL5コード一覧はコチラ
https://note.com/noway_pway/n/na50e47a51645
この記事が気に入ったらサポートをしてみませんか?