追星 发表于 2024-4-23 16:51:28

5、接第四帖

使用仪表板时,数据会使用以下函数显示在面板上://+------------------------------------------------------------------+//| Display data from the specified timeseries index to the panel    |//+------------------------------------------------------------------+void DrawData(const int index,const datetime time){//--- Declare the variables to receive data in them   MqlTicktick={0};   MqlRates rates[1];//--- Exit if unable to get the current prices   if(!SymbolInfoTick(Symbol(),tick))      return;//--- Exit if unable to get the bar data by the specified index   if(CopyRates(Symbol(),PERIOD_CURRENT,index,1,rates)!=1)      return;//--- Set font parameters for bar and indicator data headers   intsize=0;   uint flags=0;   uint angle=0;   string name=panel.FontParams(size,flags,angle);   panel.SetFontParams(name,9,FW_BOLD);   panel.DrawText("Bar data ["+(string)index+"]",3,panel.TableY1(0)-16,clrMaroon,panel.Width()-6);   panel.DrawText("Indicator data ["+(string)index+"]",3,panel.TableY1(1)-16,clrGreen,panel.Width()-6);//--- Set font parameters for bar and indicator data   panel.SetFontParams(name,9);//--- Display the data of the specified bar in table 0 on the panel   panel.DrawText("Date",panel.CellX(0,0,0)+2, panel.CellY(0,0,0)+2); panel.DrawText(TimeToString(rates[0].time,TIME_DATE),   panel.CellX(0,0,1)+2, panel.CellY(0,0,1)+2,clrNONE,90);   panel.DrawText("Time",panel.CellX(0,1,0)+2, panel.CellY(0,1,0)+2); panel.DrawText(TimeToString(rates[0].time,TIME_MINUTES),panel.CellX(0,1,1)+2, panel.CellY(0,1,1)+2,clrNONE,90);   panel.DrawText("Open",panel.CellX(0,2,0)+2, panel.CellY(0,2,0)+2); panel.DrawText(DoubleToString(rates[0].open,Digits()),      panel.CellX(0,2,1)+2, panel.CellY(0,2,1)+2,clrNONE,90);   panel.DrawText("High",panel.CellX(0,3,0)+2, panel.CellY(0,3,0)+2); panel.DrawText(DoubleToString(rates[0].high,Digits()),      panel.CellX(0,3,1)+2, panel.CellY(0,3,1)+2,clrNONE,90);   panel.DrawText("Low",   panel.CellX(0,4,0)+2, panel.CellY(0,4,0)+2); panel.DrawText(DoubleToString(rates[0].low,Digits()),       panel.CellX(0,4,1)+2, panel.CellY(0,4,1)+2,clrNONE,90);   panel.DrawText("Close", panel.CellX(0,5,0)+2, panel.CellY(0,5,0)+2); panel.DrawText(DoubleToString(rates[0].close,Digits()),   panel.CellX(0,5,1)+2, panel.CellY(0,5,1)+2,clrNONE,90);//--- Display the indicator data from the specified bar on the panel in table 1   panel.DrawText(ind_title, panel.CellX(1,0,0)+2, panel.CellY(1,0,0)+2);   double value=IndicatorValue(handle,index,0);   string value_str=(value!=EMPTY_VALUE ? DoubleToString(value,ind_digits) : "");   panel.DrawText(value_str,panel.CellX(1,0,1)+2,panel.CellY(1,0,1)+2,clrNONE,100);   //--- Display a description of the indicator line state   panel.DrawText("Line state", panel.CellX(1,1,0)+2, panel.CellY(1,1,0)+2);   ENUM_LINE_STATE state=LineState(handle,index,0);   panel.DrawText(LineStateDescription(state),panel.CellX(1,1,1)+2,panel.CellY(1,1,1)+2,clrNONE,90);   //--- Redraw the chart to immediately display all changes on the panel   ChartRedraw(ChartID());}此外,当使用仪表板时,面板事件处理程序在OnChartEvent()EA事件处理函数中调用,以及处理用于接收光标下的柱形索引的事件://+------------------------------------------------------------------+//| ChartEvent function                                              |//+------------------------------------------------------------------+void OnChartEvent(const int id,                  const long &lparam,                  const double &dparam,                  const string &sparam){//--- Handling the panel//--- Call the panel event handler   panel.OnChartEvent(id,lparam,dparam,sparam);//--- If the cursor moves or a click is made on the chart   if(id==CHARTEVENT_MOUSE_MOVE || id==CHARTEVENT_CLICK)   {      //--- Declare the variables to record time and price coordinates in them      datetime time=0;      double price=0;      int wnd=0;      //--- If the cursor coordinates are converted to date and time      if(ChartXYToTimePrice(ChartID(),(int)lparam,(int)dparam,wnd,time,price))      {         //--- write the bar index where the cursor is located to a global variable         mouse_bar_index=iBarShift(Symbol(),PERIOD_CURRENT,time);         //--- Display the bar data under the cursor on the panel          DrawData(mouse_bar_index,time);      }   }//--- If we received a custom event, display the appropriate message in the journal   if(id>CHARTEVENT_CUSTOM)   {      //--- Here we can implement handling a click on the close button on the panel      PrintFormat("%s: Event id=%ld, object id (lparam): %lu, event message (sparam): %s",__FUNCTION__,id,lparam,sparam);   }}

兔斯基_5912 发表于 2024-4-23 16:52:41

最新
页: [1]
查看完整版本: 5、接第四帖