TrainingChartController

0 Views
0 Downloads
0 Favorites
TrainingChartController
//+------------------------------------------------------------------+
//|                                      TrainingChartController.mq4 |
//+------------------------------------------------------------------+
#property strict
#property indicator_chart_window

enum LeftToRight { Left, Center, Right };

//--- input parameters
input datetime iStart = D'2019.06.01 00:00:00'; // Start date/time
input string strChartName = "";                 // Name of this Chart
input bool bNameAtBottom = true;                // Name at Bottom (false=top)
input LeftToRight bNameLToR = Center;           // Name at Left/Center/Right
input color iNameColor = clrWhite;              // Color of Chart Name
input int iFontSize = 13;                       // Size of Name

string gvNameStart, gvNameNextBar, gvNameRestart;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   gvNameStart = "TrainingChart-Start-"+Symbol()+"-"+string(Period());
   gvNameNextBar = "TrainingChart-NextBar-"+Symbol()+"-"+string(Period());
   gvNameRestart = "TrainingChart-Restart-"+Symbol()+"-"+string(Period());

   GlobalVariableSet(gvNameStart,iStart);

   EventSetMillisecondTimer(500);
   
   Comment ("'n'-NextBar, 'b'-PrevBar, 'r'-Reset");

   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
{
   return(rates_total);
}

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if (id==CHARTEVENT_KEYDOWN)
   {
      if (TranslateKey((int)lparam)=='n')
         GlobalVariableSet(gvNameNextBar,1);
      if (TranslateKey((int)lparam)=='b')
         GlobalVariableSet(gvNameNextBar,-1);
      if (TranslateKey((int)lparam)=='r')
         GlobalVariableSet(gvNameRestart,1);
   }
}

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
   long iCID = ChartID();
   string strChartObj = "ChartObj";
   
   long iXDistance, iYDistance;
   iXDistance = ChartGetInteger(iCID,CHART_WIDTH_IN_PIXELS,0);
   iYDistance = long(ChartGetInteger(iCID,CHART_HEIGHT_IN_PIXELS,0));
   
   if (bNameAtBottom)
   {
      if (iYDistance*0.98>iFontSize/2)
         iYDistance = iYDistance-(iFontSize/2+4);
      else
         iYDistance = long(iYDistance*0.98);
   }
   else
   {
      if (iYDistance*0.02<iFontSize/2)
         iYDistance = iFontSize/2+4;
      else
         iYDistance = long(iYDistance*0.02);
   }
   
   if (ObjectFind(iCID,strChartObj)!=0)
      ObjectCreate(iCID,strChartObj,OBJ_LABEL,0,100,100);
      
   ObjectSetText(strChartObj,strChartName);
   
   if (bNameLToR==Left)
   {
      iXDistance = 4;
      ObjectSetInteger(iCID,strChartObj,OBJPROP_XDISTANCE,iXDistance);
      ObjectSetInteger(iCID,strChartObj,OBJPROP_YDISTANCE,iYDistance);
      ObjectSetInteger(iCID,strChartObj,OBJPROP_ANCHOR,ANCHOR_LEFT);
   }
   else
   if (bNameLToR==Center)
   {
      ObjectSetInteger(iCID,strChartObj,OBJPROP_XDISTANCE,iXDistance/2);
      ObjectSetInteger(iCID,strChartObj,OBJPROP_YDISTANCE,iYDistance);
      ObjectSetInteger(iCID,strChartObj,OBJPROP_ANCHOR,ANCHOR_CENTER);
   }
   else
   if (bNameLToR==Right)
   {
      iXDistance = iXDistance - 4;
      ObjectSetInteger(iCID,strChartObj,OBJPROP_XDISTANCE,iXDistance);
      ObjectSetInteger(iCID,strChartObj,OBJPROP_YDISTANCE,iYDistance);
      ObjectSetInteger(iCID,strChartObj,OBJPROP_ANCHOR,ANCHOR_RIGHT);
   }
   
   ObjectSetInteger(iCID,strChartObj,OBJPROP_FONTSIZE,iFontSize);
   ObjectSetInteger(iCID,strChartObj,OBJPROP_COLOR,iNameColor);
   ObjectSetInteger(iCID,strChartObj,OBJPROP_SELECTABLE,false);
   ObjectSetInteger(iCID,strChartObj,OBJPROP_HIDDEN,true);
}

Comments