初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1485

 

我将其重写为 MQL5。我删除了工作对象。

当设置 Ratio=1 时,它以应有的方式出现在图表上,即以高低柱形图的形式叠加在图表上。但在调试模式下,由于某些原因,情况并非如此、

它显示为比率设置为 2,而实际设置为 1。

代码中的一切都正确吗?

//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   1
//--- plot Histogram_2
#property indicator_label1  "Histogram_2"
#property indicator_type1   DRAW_HISTOGRAM2
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

input int Ratio=1;
int limit;
int limitBars=0;

double H[];
double L[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,H,INDICATOR_DATA);
   SetIndexBuffer(1,L,INDICATOR_DATA);
   ArraySetAsSeries(H,true);
   ArraySetAsSeries(L,true);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
   double max[256];
   double min[256];

   if(limitBars<Bars(_Symbol,_Period))
      limit=CHART_FIRST_VISIBLE_BAR;

   for(int i=0; i<limit; i++)
     {
      for(int shift=0; shift<Ratio; shift++)
        {
         max[shift]=iHigh(Symbol(),Period(),i*Ratio+shift);
         min[shift]=iLow(Symbol(),Period(),i*Ratio+shift);
        }

      H[i]=max[ArrayMaximum(max,0,Ratio)];
      L[i]=min[ArrayMinimum(min,0,Ratio)];
     }

   if(limit>1)
     {
      max[0]=H[ArrayMaximum(H,0,limit)];
      min[0]=L[ArrayMinimum(L,0,limit)];
     

     }

   limitBars=Bars(_Symbol,_Period);
   limit=1;
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
如何通过脚本获取参数值
rates_total

在指标中很清楚。但脚本呢?


#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()

  {
      Alert(rates_total());
    }
Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2023.12.04
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
Novichokkk #:
如何通过脚本获取参数值

这在指标中很清楚。但脚本呢?


https://www.mql5.com/ru/docs/series/bars

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Bars - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

可以理解,我以前也是这么做的。谢谢

#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()

  {

   Alert(Bars(_Symbol,_Period));
   

  }
//+------------------------------------------------------------------+

我想知道是否有其他方法。

 
Novichokkk #:

这是可以理解的,我以前也这样做过。谢谢

我想知道是否有其他办法。

可以。SeriesInfoInteger().

Документация по MQL5: Доступ к таймсериям и индикаторам / SeriesInfoInteger
Документация по MQL5: Доступ к таймсериям и индикаторам / SeriesInfoInteger
  • www.mql5.com
SeriesInfoInteger - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

在哪里可以看到实现片断线性插值的简单示例?

例如,对于数组 x[]={0.1,0.8,3.2,7.9,9.3}(5 个值),在数组 y[]={-3.2,2.7,1.1,-6.4,20}(5 个值)中有相应的值。

如何通过参数 x1[]={0.1, 1, 2, 2.5, 5, 5.1, 6, 8, 9.3} (9 个值) 的片断线性插值函数,从数组 y[]9 个值中获取参数 x1[]={0.1, 1, 2, 2.5, 5, 5.1, 6, 8, 9.3} (9 个值) 的相应值?

我的理解是,首先在数组 x[] 中查找数组 x1[] 中的值,如果完全匹配,则将数组 y[]/ 中的值赋值给数组 y1[]。

如果不匹配,则在数组 x1[] 中寻找两个值,在这两个值之间是数组 x1 的值。然后,对于数组 y1[],我们通过公式计算数组 y[] 中的相应值。

这样就可以得到所需的点数。但是通过枚举数组中的 每个元素 进行搜索并不 经济。也许可以使用二进制搜索(我读过有关搜索方法的资料)。

因此,我想知道这种函数是如何编写和使用的。在搜索过程中,我只找到了 ALGLIB。但我不知道它从何而来,如何使用。

不要把我送到 ALGLIB。

 
Novichokkk 数组中的 每个元素 进行搜索并不 经济。也许可以使用二进制搜索(我读过有关搜索方法的资料)。

因此,我想知道这样的函数是如何编写和使用的。在搜索过程中,我只找到了 ALGLIB。但我不知道它从何而来,又是如何使用的。

别让我去找 ALGLIB。

为什么要分别搜索?如果 x 和 x1 是有序的,我们就可以通过两个索引对它们进行排序。

 
JRandomTrader #:

为什么要分别搜索?如果 x 和 x1 是有序的,我们就前进两个索引。

是的,我没想到这一点。所以我才要求举例说明。但我找不到。我需要正确的方法。

 
如何在 MQL5 中上传机器人在市场上出售?
 
Alisher Batiraliev #:
我如何在市场中上传 MQL5 中的机器人进行销售?

市场 中。右上方有一个绿色按钮...


Форекс-маркет – Магазин торговых роботов, советников и технических индикаторов для MetaTrader 5
Форекс-маркет – Магазин торговых роботов, советников и технических индикаторов для MetaTrader 5
  • www.mql5.com
Официальная витрина приложений для торговли из терминала