213 lines
No EOL
21 KiB
MQL4
213 lines
No EOL
21 KiB
MQL4
//+------------------------------------------------------------------+
|
||
//| 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);
|
||
} |