gryps2/IND-code/Yoritsugu/Disp_Total_Pips.mq4
super.admin ae3f0ebf03 convert
2025-05-30 14:58:21 +02:00

213 lines
No EOL
21 KiB
MQL4
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//+------------------------------------------------------------------+
//| 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);
}