MQL5で取引の直近の損益を返す関数を作った。
取引の直近の損益がプラスかマイナスか、つまり前回のトレードが勝ちか負けかでトレード間隔を決めたいときなどに使える。
環境
- OANDA MetaTrader 5: 5.00 build 4040
- MetaEditor: 5.00 build 4040
取引の損益を返す関数
//+------------------------------------------------------------------+ //| 取引の損益(2023/11/06動作確認) | //+------------------------------------------------------------------+ double DealProfit(int magic // マジックナンバー ) { datetime start=0; // 開始時間 datetime end=TimeCurrent(); // 終了時間 ulong deal_ticket=0; // 取引のチケット string deal_symbol=""; // 取引の銘柄 long deal_magic=0; // 取引のマジックナンバー double deal_profit=0; // 取引の損益 double res=0; // 戻り値 HistorySelect(start,end); //--- 新しい順に検索している点に注意。ここでは最新の取引のみ検索対称としている for(int i=HistoryDealsTotal()-1;i>=0;i--) { deal_ticket=HistoryDealGetTicket(i); deal_symbol=HistoryDealGetString(deal_ticket,DEAL_SYMBOL); deal_magic=HistoryDealGetInteger(deal_ticket,DEAL_MAGIC); deal_profit=HistoryDealGetDouble(deal_ticket,DEAL_PROFIT); //--- 取引の中には損益を含まないものもあるので、損益が0ではないという条件を加える if(deal_symbol==Symbol() && deal_magic==magic && deal_profit!=0) { res=deal_profit; break; } //--- } //--- return(res); }
使用例
マジックナンバーが1であるとして、直近の取引が勝ちの場合は日足で1本後にエントリー、負けの場合は日足で5本後にエントリーするという条件を加えたい場合、以下のようにする。
if((DealProfit(1)>0 && 日足でエグジットしてからのバー数>=1) || (DealProfit(1)<0 && 日足でエグジットしてからのバー数>=5 || DealProfit(1)==0) && 他のエントリー条件) 新規注文;