获取当前图表的最高和最低价格

时间:2017-04-02 02:45:32

标签: mql4

执行

ChartGetDouble(0,CHART_PRICE_MAX,0,top)
ChartGetDouble(0,CHART_PRICE_MIN,0,top)
WindowPriceMax
WindowPriceMin

我想获得该特定图表的最高和最低价格。

我试过

ChartNavigate

他们都没有给我list="$@"之后的价格。 这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

新的 - MQL4.56789功能可能会令人惊讶:

步骤 0:始终抓住 Chart_OkFLAG

    bool   Chart_OkFLAG;
    double Chart_min,
           Chart_MAX;
    int    Chart_ToBeMODIFIED          = ChartID();
    int    Chart_ToBeMODIFIED_SubWinID = 0;
    int    Chart_nBarsRelativeSHIFT    = 0;

           Chart_OkFLAG = ChartNavigate( Chart_ToBeMODIFIED,
                                       < CHART_BEGIN       |
                                         CHART_END         |
                                         CHART_CURRENT_POS >,
                                         Chart_nBarsRelativeSHIFT
                                         );

如果OK:你赢了第一轮,GUI命令已被接受为语法和&amp;语境正确。这并不意味着,它是由GUI处理器执行的。它刚刚进入GUI命令-QUEUE的尾部。

步骤 1:强制执行它(明智地考虑在完成任务关键元素之后将此类处理推迟到某个安全的地方)

   if (  Chart_OkFLAG ){
         WindowRedraw();                                        // ol'-MQL4
         ChartRedraw(                Chart_ToBeMODIFIED );      // new-MQL4
         Chart_min =  ChartPriceMin( Chart_ToBeMODIFIED,
                                     Chart_ToBeMODIFIED_SubWinID
                                     );
         Chart_MAX =  ChartPriceMAX( Chart_ToBeMODIFIED,
                                     Chart_ToBeMODIFIED_SubWinID
                                     );
   }
   else{
      // ERROR HANDLING onChartNavigate(T)ERROR
   }

总是:毫不犹豫地内联错误处理程序,即使MQL4语言看起来很简单(你永远不知道,当这种努力通过避免数小时的错误跟踪而得到回报)

double ChartPriceMin( const long Chart_ID           = 0,
                      const int  Chart_SubWindow_ID = 0
                      ) {
                      double result = EMPTY_VALUE;
                      ResetLastError();
                      if (  !ChartGetDouble( Chart_ID,
                                             CHART_PRICE_MIN,
                                             Chart_SubWindow_ID,
                                             result
                                             )
                             ){
                             PrintFormat( "ERROR: Code(%d) in [%s]",
                                           GetLastError(),
                                           __FUNCTION__,
                                           );
                      }
                      return( result );
}
double ChartPriceMAX( const long Chart_ID           = 0,
                      const int  Chart_SubWindow_ID = 0
                      ) {
                      double result = EMPTY_VALUE;
                      ResetLastError();
                      if (  !ChartGetDouble( Chart_ID,
                                             CHART_PRICE_MAX,
                                             Chart_SubWindow_ID,
                                             result
                                             )
                             ){
                             PrintFormat( "ERROR: Code(%d) in [%s]",
                                           GetLastError(),
                                           __FUNCTION__,
                                           );
                      }
                      return( result );
}