1评论

0收藏

5、接第四帖

avatar 追星 | 49 人阅读 | 1 人评论 | 2024-04-23

使用仪表板时,数据会使用以下函数显示在面板上:
//+------------------------------------------------------------------+//| 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   MqlTick  tick={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   int  size=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);     }  }
""
还没有人打赏,支持一下

评论|共 1 个

兔斯基_5912

发表于 2024-4-23 16:52:41 | 显示全部楼层

最新

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则