155 lines
6.3 KiB
Plaintext
155 lines
6.3 KiB
Plaintext
//+------------------------------------------------------------------+
|
|
//| MadTurtle_UI.mqh - Status Dashboard, P&L, Signal Oscillator |
|
|
//+------------------------------------------------------------------+
|
|
#ifndef MADTURTLE_UI
|
|
#define MADTURTLE_UI
|
|
|
|
// UI color theme
|
|
#define UI_COLOR_BG clrBlack
|
|
#define UI_COLOR_PANEL clrDarkSlateGray
|
|
#define UI_COLOR_TEXT clrWhite
|
|
#define UI_COLOR_PROFIT clrLime
|
|
#define UI_COLOR_LOSS clrRed
|
|
#define UI_COLOR_BUY clrDodgerBlue
|
|
#define UI_COLOR_SELL clrOrangeRed
|
|
#define UI_COLOR_HOLD clrGray
|
|
#define UI_COLOR_ACCENT clrAqua
|
|
|
|
// Panel layout (x, y, w, h)
|
|
#define UI_STATUS_X 10
|
|
#define UI_STATUS_Y 10
|
|
#define UI_STATUS_W 280
|
|
#define UI_STATUS_H 180
|
|
|
|
#define UI_METRICS_X 10
|
|
#define UI_METRICS_Y 200
|
|
#define UI_METRICS_W 280
|
|
#define UI_METRICS_H 120
|
|
|
|
#define UI_OSC_X 300
|
|
#define UI_OSC_Y 10
|
|
#define UI_OSC_W 220
|
|
#define UI_OSC_H 140
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Draw rounded rectangle panel |
|
|
//+------------------------------------------------------------------+
|
|
void MadTurtle_DrawPanel(int x, int y, int w, int h, color bg = UI_COLOR_PANEL, color border = UI_COLOR_ACCENT)
|
|
{
|
|
string name = StringFormat("panel_bg_%d_%d", x, y);
|
|
if(ObjectFind(0, name) < 0) {
|
|
ObjectCreate(0, name, OBJ_RECTANGLE, 0, 0, 0);
|
|
}
|
|
ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
|
|
ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
|
|
ObjectSetInteger(0, name, OBJPROP_XSIZE, w);
|
|
ObjectSetInteger(0, name, OBJPROP_YSIZE, h);
|
|
ObjectSetInteger(0, name, OBJPROP_COLOR, border);
|
|
ObjectSetInteger(0, name, OBJPROP_STYLE, STYLE_SOLID);
|
|
ObjectSetInteger(0, name, OBJPROP_WIDTH, 1);
|
|
ObjectSetInteger(0, name, OBJPROP_FILL, true);
|
|
ObjectSetInteger(0, name, OBJPROP_BGCOLOR, bg);
|
|
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
|
|
ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Draw label text on panel |
|
|
//+------------------------------------------------------------------+
|
|
void MadTurtle_DrawLabel(string objName, string text, int x, int y, int fontSize = 9,
|
|
color clr = UI_COLOR_TEXT, int anchor = ANCHOR_LEFT_UPPER)
|
|
{
|
|
if(ObjectFind(0, objName) < 0) {
|
|
ObjectCreate(0, objName, OBJ_LABEL, 0, 0, 0);
|
|
}
|
|
ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, x);
|
|
ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, y);
|
|
ObjectSetString(0, objName, OBJPROP_TEXT, text);
|
|
ObjectSetInteger(0, objName, OBJPROP_COLOR, clr);
|
|
ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, fontSize);
|
|
ObjectSetInteger(0, objName, OBJPROP_ANCHOR, anchor);
|
|
ObjectSetInteger(0, objName, OBJPROP_SELECTABLE, false);
|
|
ObjectSetInteger(0, objName, OBJPROP_HIDDEN, true);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Draw mini equity curve (simple text + bar) |
|
|
//+------------------------------------------------------------------+
|
|
void MadTurtle_DrawEquityCurve(double &equity[], int x, int y, int w, int h, color lineClr = UI_COLOR_PROFIT)
|
|
{
|
|
int n = ArraySize(equity);
|
|
if(n < 2) return;
|
|
|
|
double minE = equity[ArrayMinimum(equity)];
|
|
double maxE = equity[ArrayMaximum(equity)];
|
|
if(maxE - minE < 1e-6) maxE = minE + 1.0;
|
|
|
|
// Draw as vertical bars in a rectangle
|
|
int barW = (int)((double)w / n);
|
|
if(barW < 1) barW = 1;
|
|
|
|
for(int i = 0; i < n; i++) {
|
|
int barH = (int)((equity[i] - minE) / (maxE - minE) * h);
|
|
if(barH < 1) barH = 1;
|
|
string barName = StringFormat("eq_bar_%d", i);
|
|
if(ObjectFind(0, barName) < 0) {
|
|
ObjectCreate(0, barName, OBJ_RECTANGLE, 0, 0, 0);
|
|
}
|
|
ObjectSetInteger(0, barName, OBJPROP_XDISTANCE, x + i * barW);
|
|
ObjectSetInteger(0, barName, OBJPROP_YDISTANCE, y + h - barH);
|
|
ObjectSetInteger(0, barName, OBJPROP_XSIZE, barW);
|
|
ObjectSetInteger(0, barName, OBJPROP_YSIZE, barH);
|
|
ObjectSetInteger(0, barName, OBJPROP_COLOR, lineClr);
|
|
ObjectSetInteger(0, barName, OBJPROP_FILL, true);
|
|
ObjectSetInteger(0, barName, OBJPROP_SELECTABLE, false);
|
|
ObjectSetInteger(0, barName, OBJPROP_HIDDEN, true);
|
|
}
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Draw signal oscillator bars (buy/sell confidence) |
|
|
//+------------------------------------------------------------------+
|
|
void MadTurtle_DrawOscillator(double buyConf, double sellConf, int x, int y, int w, int h)
|
|
{
|
|
string objBuy = "osc_buy_bar";
|
|
string objSell = "osc_sell_bar";
|
|
|
|
if(ObjectFind(0, objBuy) < 0) ObjectCreate(0, objBuy, OBJ_RECTANGLE, 0, 0, 0);
|
|
if(ObjectFind(0, objSell) < 0) ObjectCreate(0, objSell, OBJ_RECTANGLE, 0, 0, 0);
|
|
|
|
int buyH = (int)(buyConf / 100.0 * h);
|
|
int sellH = (int)(sellConf / 100.0 * h);
|
|
|
|
ObjectSetInteger(0, objBuy, OBJPROP_XDISTANCE, x);
|
|
ObjectSetInteger(0, objBuy, OBJPROP_YDISTANCE, y + h - buyH);
|
|
ObjectSetInteger(0, objBuy, OBJPROP_XSIZE, w / 2 - 2);
|
|
ObjectSetInteger(0, objBuy, OBJPROP_YSIZE, buyH);
|
|
ObjectSetInteger(0, objBuy, OBJPROP_COLOR, UI_COLOR_BUY);
|
|
ObjectSetInteger(0, objBuy, OBJPROP_FILL, true);
|
|
ObjectSetInteger(0, objBuy, OBJPROP_SELECTABLE, false);
|
|
ObjectSetInteger(0, objBuy, OBJPROP_HIDDEN, true);
|
|
|
|
ObjectSetInteger(0, objSell, OBJPROP_XDISTANCE, x + w / 2 + 2);
|
|
ObjectSetInteger(0, objSell, OBJPROP_YDISTANCE, y + h - sellH);
|
|
ObjectSetInteger(0, objSell, OBJPROP_XSIZE, w / 2 - 2);
|
|
ObjectSetInteger(0, objSell, OBJPROP_YSIZE, sellH);
|
|
ObjectSetInteger(0, objSell, OBJPROP_COLOR, UI_COLOR_SELL);
|
|
ObjectSetInteger(0, objSell, OBJPROP_FILL, true);
|
|
ObjectSetInteger(0, objSell, OBJPROP_SELECTABLE, false);
|
|
ObjectSetInteger(0, objSell, OBJPROP_HIDDEN, true);
|
|
}
|
|
|
|
//+------------------------------------------------------------------+
|
|
//| Clean up all UI objects on deinit |
|
|
//+------------------------------------------------------------------+
|
|
void MadTurtle_CleanupUI()
|
|
{
|
|
ObjectsDeleteAll(0, "panel_bg_");
|
|
ObjectsDeleteAll(0, "ui_label_");
|
|
ObjectsDeleteAll(0, "eq_bar_");
|
|
ObjectsDeleteAll(0, "osc_");
|
|
ObjectsDeleteAll(0, "sig_arrow_");
|
|
}
|
|
|
|
#endif // MADTURTLE_UI
|