MQL5でエントリーしてから経過したバー(ローソク足)の本数を返す関数を作った。
ポジションの損益がプラスのときはエントリーしてからX本後にエグジット、マイナスのときはエントリーしてからY本後にエグジットしたいときなどに使える。
環境
- OANDA MetaTrader 5: 5.00 build 4040
- MetaEditor: 5.00 build 4040
エントリー後のバー数を返す関数
//+------------------------------------------------------------------+ //| エントリー後のバー数(2023/11/03動作確認) | //+------------------------------------------------------------------+ int BarsSinceEntry(ENUM_TIMEFRAMES period, // 期間 int magic // マジックナンバー ) { string position_symbol=""; // ポジションの銘柄 long position_magic=0; // ポジションのマジックナンバー datetime position_time=0; // ポジションの時間 int res=0; // 戻り値 //--- 新しい順に検索している点に注意。ここでは最新のポジションのみ検索対称としている for(int i=PositionsTotal()-1;i>=0;i--) { position_symbol=PositionGetSymbol(i); position_magic=PositionGetInteger(POSITION_MAGIC); position_time=(datetime)PositionGetInteger(POSITION_TIME); if(position_symbol==Symbol() && position_magic==magic) { res=iBarShift(NULL,period,position_time,false); break; } } //--- return(res); }
使用例
マジックナンバーが1であるとして、ポジションの損益がプラスの場合は日足で10本後にエグジット、マイナスの場合は日足で5本後にエグジットしたい場合、以下のようにする。
if((ポジションの損益>0 && BarsSinceEntry(PERIOD_D1,1)>=10) || (ポジションの損益<0 && BarsSinceEntry(PERIOD_D1,1)>=5)) 決済注文;