//+------------------------------------------------------------------+ //| Disp_Total_pips.mq4 | //| Copyright 2025, Yoritsugu | //|                 | //+------------------------------------------------------------------+ #property copyright "よりつぐ" #property link "https://note.com/yoritugu" #property version "1.0" #property strict #property indicator_chart_window // 入力パラメータ extern string _Common = ""; //▼表示設定 input ENUM_TIMEFRAMES Disp_TimeFrame = PERIOD_M5; // 更新の間隔(始値の30秒以降に更新) input int Rireki_M = 999; // 過去〇ヶ月の履歴表示 input int P_UD = 0; // Total獲得Pips表示位置調整量(下方向移動量) input color TotalColor = clrWhite; // Total獲得Pipsの色(文字) input color HP_Color = clrYellow; // Total獲得Pipsのポジション保有時の色(文字) input color Line_Color = clrAqua; // ラインの色 input color P_Color = clrAqua; // 利益の色(ライン上の文字) input color L_Color = clrYellow; // 損失の色(ライン上の文字) extern string _MagicNumber = ""; //▼マジックナンバーの設定 input int MagicNumber0 = 0; //非表示マジックナンバー input int MagicNumber1 = 0; //マジックナンバー1 input int MagicNumber2 = 0; //マジックナンバー2 input int MagicNumber3 = 0; //マジックナンバー3 input int MagicNumber4 = 0; //マジックナンバー4 input int MagicNumber5 = 0; //マジックナンバー5 input int MagicNumber6 = 0; //マジックナンバー6 input int MagicNumber7 = 0; //マジックナンバー7 input int MagicNumber8 = 0; //マジックナンバー8 input int MagicNumber9 = 0; //マジックナンバー9 input int MagicNumber10 = 0; //マジックナンバー10 // グローバル変数 //チャート表示部分 datetime EarnPipsTime=0; int HistoryTotal=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit(){ ObjectsDeleteAll(0, "TotalEarnPips"); label("TotalEarnPips"," Total Profit(Pips) ",0,40+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); ObjectSetInteger(0,"TotalEarnPips", OBJPROP_COLOR, TotalColor); label("TotalEarnPipsTime",TimeToStr(iTime(NULL,PERIOD_MN1,Rireki_M))+"~ ",0,25+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); ObjectSetInteger(0,"TotalEarnPipsTime", OBJPROP_COLOR, TotalColor); label("TotalEarnPips"+IntegerToString(MagicNumber1),"",0,55+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); label("TotalEarnPips"+IntegerToString(MagicNumber2),"",0,70+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); label("TotalEarnPips"+IntegerToString(MagicNumber3),"",0,85+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); label("TotalEarnPips"+IntegerToString(MagicNumber4),"",0,100+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); label("TotalEarnPips"+IntegerToString(MagicNumber5),"",0,115+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); label("TotalEarnPips"+IntegerToString(MagicNumber6),"",0,130+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); label("TotalEarnPips"+IntegerToString(MagicNumber7),"",0,145+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); label("TotalEarnPips"+IntegerToString(MagicNumber8),"",0,160+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); label("TotalEarnPips"+IntegerToString(MagicNumber9),"",0,175+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); label("TotalEarnPips"+IntegerToString(MagicNumber10),"",0,190+P_UD,0,10,CORNER_RIGHT_UPPER,ANCHOR_RIGHT); if(MagicNumber1!=MagicNumber0){HistoryEarnPips(MagicNumber1);} if(MagicNumber2!=MagicNumber0){HistoryEarnPips(MagicNumber2);} if(MagicNumber3!=MagicNumber0){HistoryEarnPips(MagicNumber3);} if(MagicNumber4!=MagicNumber0){HistoryEarnPips(MagicNumber4);} if(MagicNumber5!=MagicNumber0){HistoryEarnPips(MagicNumber5);} if(MagicNumber6!=MagicNumber0){HistoryEarnPips(MagicNumber6);} if(MagicNumber7!=MagicNumber0){HistoryEarnPips(MagicNumber7);} if(MagicNumber8!=MagicNumber0){HistoryEarnPips(MagicNumber8);} if(MagicNumber9!=MagicNumber0){HistoryEarnPips(MagicNumber9);} if(MagicNumber10!=MagicNumber0){HistoryEarnPips(MagicNumber10);} //SetChart(); return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit(){ ObjectsDeleteAll(0, "EarnPips"); ObjectsDeleteAll(0, "TotalEarnPips"); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ // OnCalculate関数 int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(EarnPipsTime != iTime(NULL,Disp_TimeFrame,0) && Seconds() > 30 ){ ObjectsDeleteAll(0, "EarnPips"); if(MagicNumber1!=MagicNumber0){HistoryEarnPips(MagicNumber1);} if(MagicNumber2!=MagicNumber0){HistoryEarnPips(MagicNumber2);} if(MagicNumber3!=MagicNumber0){HistoryEarnPips(MagicNumber3);} if(MagicNumber4!=MagicNumber0){HistoryEarnPips(MagicNumber4);} if(MagicNumber5!=MagicNumber0){HistoryEarnPips(MagicNumber5);} if(MagicNumber6!=MagicNumber0){HistoryEarnPips(MagicNumber6);} if(MagicNumber7!=MagicNumber0){HistoryEarnPips(MagicNumber7);} if(MagicNumber8!=MagicNumber0){HistoryEarnPips(MagicNumber8);} if(MagicNumber9!=MagicNumber0){HistoryEarnPips(MagicNumber9);} if(MagicNumber10!=MagicNumber0){HistoryEarnPips(MagicNumber10);} EarnPipsTime = iTime(NULL,Disp_TimeFrame,0); } return(rates_total); } //Label関数 void label(string name, string text, int x, int y, int font, int fontsize,ENUM_BASE_CORNER corner,ENUM_ANCHOR_POINT anchor){ ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0); ObjectSetString(0, name, OBJPROP_TEXT, text); ObjectSetInteger(0, name, OBJPROP_COLOR, clrLightGray); ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false); ObjectSetInteger(0, name, OBJPROP_HIDDEN, true); ObjectSetString(0, name, OBJPROP_FONT, font == 1 ? "Times New Roman" : "MS 明朝"); ObjectSetInteger(0, name, OBJPROP_FONTSIZE, fontsize ); ObjectSetInteger(0, name, OBJPROP_CORNER, corner); ObjectSetInteger(0, name, OBJPROP_ANCHOR, anchor); ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x ); ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y ); ObjectSetInteger(0, name, OBJPROP_STATE, false); ObjectSetInteger(0, name, OBJPROP_BACK, false); return; } void HistoryEarnPips(int magicnumber){ double totalpips1 = 0; double totalpips2 = 0; bool flag = false; int res; datetime MT1=iTime(NULL,PERIOD_MN1,Rireki_M); for(int i = OrdersHistoryTotal() - 1; i >= 0; i--){ res = OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); if(res == false)continue; if(OrderCloseTime()< MT1)continue; if(OrderSymbol() != Symbol() || OrderType() > 1 || OrderMagicNumber() != magicnumber)continue; totalpips1 += EarnPipsLine(OrderTicket(),OrderOpenTime(),OrderOpenPrice(),OrderCloseTime(),OrderClosePrice(),OrderType()); } ObjectSetString(0,"TotalEarnPips"+IntegerToString(magicnumber),OBJPROP_TEXT, IntegerToString(magicnumber)+" : "+DoubleToString(totalpips1, 1)); ObjectSetInteger(0,"TotalEarnPips"+IntegerToString(magicnumber), OBJPROP_COLOR, TotalColor); for(int i = OrdersTotal() - 1; i >= 0; i--){ res = OrderSelect(i, SELECT_BY_POS); if(res == false)continue; if(OrderSymbol() != Symbol() || OrderType() > 1 || OrderMagicNumber() != magicnumber)continue; totalpips2 += EarnPipsLine(OrderTicket(),OrderOpenTime(),OrderOpenPrice(),Time[0], OrderType() == 0 ? Bid : Ask,OrderType()); flag = true; } if(flag){ ObjectSetString(0,"TotalEarnPips"+IntegerToString(magicnumber),OBJPROP_TEXT,"Holding position "+IntegerToString(magicnumber)+" : "+DoubleToString(totalpips1, 1)); ObjectSetInteger(0,"TotalEarnPips"+IntegerToString(magicnumber), OBJPROP_COLOR, HP_Color); } } double EarnPipsLine(int ticket, datetime opentime, double openprice, datetime closetime, double closeprice, int type){ double pips = (type == 0 ? closeprice - openprice : openprice - closeprice) / Point() * 0.1 ; ObjectDelete("EarnPipsLine" + IntegerToString(ticket)); ObjectCreate(0,"EarnPipsLine" + IntegerToString(ticket), OBJ_TREND, 0, opentime, openprice, closetime, closeprice); ObjectSetInteger(0, "EarnPipsLine" + IntegerToString(ticket), OBJPROP_RAY_RIGHT, false); ObjectSetInteger(0, "EarnPipsLine" + IntegerToString(ticket), OBJPROP_COLOR, type == 0 ? Line_Color : Line_Color); //ラインの色 ObjectSetInteger(0, "EarnPipsLine" + IntegerToString(ticket), OBJPROP_SELECTABLE, false); ObjectDelete("EarnPipsText" + IntegerToString(ticket)); ObjectCreate(0, "EarnPipsText" + IntegerToString(ticket), OBJ_TEXT, 0, (datetime)(((double)closetime - (double)opentime) * 0.8+(double)opentime), (closeprice-openprice) * 0.8+(openprice) ); ObjectSetInteger(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_COLOR, pips < 0 ? L_Color : type == 0 ? P_Color : P_Color); ObjectSetInteger(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_SELECTABLE, false); ObjectSetInteger(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_FONTSIZE, 11); ObjectSetInteger(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_ANCHOR, ANCHOR_CENTER); ObjectSetString(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_TEXT, DoubleToString(pips, 1)); ObjectSetString(0, "EarnPipsText" + IntegerToString(ticket), OBJPROP_FONT, "Arial Black"); return(pips); } void SetChart(){ ChartSetInteger(0, CHART_SHOW_DATE_SCALE, true); ChartSetInteger(0, CHART_SHOW_PRICE_SCALE, true); ChartSetInteger(0, CHART_FOREGROUND, false); ChartSetInteger(0, CHART_SHOW_GRID, false); ChartSetInteger(0, CHART_SHOW_ONE_CLICK, false); ChartSetInteger(0, CHART_SHOW_OHLC, true); ChartSetInteger(0, CHART_COLOR_FOREGROUND, clrLightGray); ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrBlack); ChartSetInteger(0, CHART_COLOR_CANDLE_BEAR, clrBlack); ChartSetInteger(0, CHART_COLOR_CANDLE_BULL, clrDarkGray); ChartSetInteger(0, CHART_COLOR_CHART_DOWN, clrDimGray); ChartSetInteger(0, CHART_COLOR_CHART_UP, clrDimGray); ChartSetInteger(0, CHART_COLOR_CHART_LINE, clrDimGray); ChartSetInteger(0, CHART_SHIFT, true); ChartSetInteger(0, CHART_SCALE, 2); ChartSetInteger(0, CHART_MODE, CHART_CANDLES); }