新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 328

 

你好,我想得到一个期货的 到期日

EXPIRATION=(datetime)SymbolInfoInteger(Symbol(),SYMBOL_EXPIRATION_TIME)。

它给出了1970 01 01 00 00

 

你好,请问谁能告诉我,当你点击 某个点时,如何让EA在图表的某个点开单? 当你安装脚本或EA时,函数NormalizeDouble(WindowPriceOnDropped(),Digits); 定义了你点击鼠标时的点。但问题是,这可以在任何时候从一个正在运行的EA中完成。是否有这种可能性。

我看到一个函数ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1)我还不知道如何使用它,是否可以确定鼠标指针指向哪里(哪一点)?

 
Basicprof:

你好,请问谁能告诉我,当你点击 某个点时,如何让EA在图表的某个点开单? 当你安装脚本或EA时,函数NormalizeDouble(WindowPriceOnDropped(),Digits); 定义了你点击鼠标时的点。但问题是,这可以在任何时候从一个正在运行的EA中完成。是否有这种可能性。

我看到一个函数ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1)但我还没有想好如何使用它。 是否有可能确定鼠标指针指向了哪里(哪一点)?

使用 "CHARTEVENT_CLICK "事件

你可以从这里 获得部分代码

 
Vitaly Muzichenko:

使用 "CHARTEVENT_CLICK "点击事件

你可以从这里 获得代码片段


非常感谢!

 

还有一个问题:我把函数从EA移到了库中,当我运行EA时,它立即崩溃了,信息显示终端不能加载库 不能调用'ATP_funkcii.mq4::DrawLABEL','ATP_funkcii.mq4'没有加载。

我怎样才能解决这个问题呢?

我注意到一件事!可以看到EA的编辑器和库,但在电脑上,由于某种原因,我没有在程序文件中看到它们。只有专家顾问文件。

 
你好,请你告诉我如何知道数组 下一个元素 的索引?
 
vikzip:
你好,请你告诉我如何通过知道一个数组元素的 索引来知道该数组下一个元素的索引?

任何数组的索引总是以零开始。也就是说,如果数组的大小是1,这个单元格的索引将是0。

你怎么知道数字5才能知道数字6呢?

知道了数字6,怎么知道数字7,要知道只有8位数?

知道了索引7,你怎么知道下一个索引,知道数组大小=8?

 

你好,我需要帮助。该指标没有更新,我希望它在每个tick 上更新。


//+------------------------------------------------------------------+
//|                                             alx_RSI_BANDS_MA.mq4 |
//|                                                       alx_Babon |
//+------------------------------------------------------------------+
#property copyright "alx_Babon"
#property link      "babon82@gmail.com"

#property indicator_separate_window
#property indicator_buffers 6
#property  indicator_color1 Yellow
#property  indicator_color2 DarkBlue
#property  indicator_color3 White
#property  indicator_color4 White
#property  indicator_color5 White
//---- input parameters
extern int       RSI_Per=8;
extern int       MA_Per=8;
extern int       Bands_Per=20;
extern int       SmoothType=0;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double Sostoyanie;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   string type;
   switch(SmoothType)
   {
   case MODE_EMA: type="EMA";break;
   case MODE_SMMA: type="SMMA";break;
   case MODE_LWMA: type="LWMA";break;
   default: type="LWMA";SmoothType=0;break; // если ни один вариант не подошел
   }

   SetIndexStyle(0,DRAW_LINE,0,1);
   SetIndexBuffer(0,ExtMapBuffer1);//Свойства RSI
   SetIndexLabel(0,"RSI("+RSI_Per+")");
   SetIndexStyle(1,DRAW_LINE,0,2);
   SetIndexBuffer(1,ExtMapBuffer2);//Свойства MA
   SetIndexLabel(1,"MA ("+MA_Per+"), "+type);
   SetIndexStyle(2,DRAW_LINE,2,1);
   SetIndexBuffer(2,ExtMapBuffer3);//Свойства Bands
   SetIndexLabel(2,"Bands ("+Bands_Per+")");
   SetIndexStyle(3,DRAW_LINE,2,1);
   SetIndexBuffer(3,ExtMapBuffer4);//Свойства Bands
   SetIndexLabel(3,"Bands ("+Bands_Per+")");
   SetIndexStyle(4,DRAW_LINE,2,1);
   SetIndexBuffer(4,ExtMapBuffer5);//Свойства Bands
   SetIndexLabel(4,"Bands ("+Bands_Per+")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int limit,cnt;
   int cnt_rsi,cnt_bb,cnt_ma;
   if (counted_bars==0) 
      {
      limit=Bars-RSI_Per-1;
      for(cnt=limit;cnt>=0;cnt--)
         {
          ExtMapBuffer1[cnt]=iRSI(NULL,0,RSI_Per,PRICE_CLOSE,cnt);
         }
      for(cnt=1;cnt<=Bars;cnt++)
         {
          ExtMapBuffer6[cnt]= iMA(NULL,0,MA_Per,0,SmoothType,PRICE_CLOSE,cnt);
                
         }
      for(cnt=limit-MA_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer2[cnt]=iMAOnArray(ExtMapBuffer1,0,MA_Per,0,SmoothType,cnt);
         }          
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer3[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_LOWER,cnt);
         }
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer4[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_UPPER,cnt);
         }  
      for(cnt=limit-Bands_Per;cnt>=0;cnt--)
         {
          ExtMapBuffer5[cnt]=iBandsOnArray(ExtMapBuffer1,0,Bands_Per,2,0,MODE_MAIN,cnt);
         } 
         
      }
      cnt_rsi=limit;
      cnt_bb=limit-Bands_Per;
      cnt_ma=limit-MA_Per;
      Comment(
               "RSI (",RSI_Per,")=",ExtMapBuffer1[1],"\n",
          "Bolinger (",Bands_Per,")=",ExtMapBuffer5[1],"\n",
                "MA (",MA_Per,")=",ExtMapBuffer2[1],"\n"
                //,"MA CNT (",MA_Per,")=",ExtMapBuffer6[8],"\n"
                //,"CNT_MA (",cnt_ma,")"
             );
//----
      //ObjectCreate("Arrow", OBJ_ARROW, 0, 0, 5);
      //ObjectSet("Arrow",OBJPROP_ARROWCODE,OBJ_PERIOD_M15 | OBJ_PERIOD_H1);
      //ObjectSetText("PivotText", "Pivot Point (DJ)", fontsize, "Arial", 
                 //colorPivot);
//----
   return(0);
  }
//+---------------------------------------

 
Artyom Trishkin:

任何数组的索引总是以零开始。也就是说,如果数组大小为1,那么该单元格的索引将是0。

你怎么知道数字5才能知道数字6呢?

明知只有8个数字,你如何知道数字6才能知道数字7呢?

在知道索引7的情况下,我们如何能找到下一个索引,知道数组大小=8?


谢谢你的详细解释 ))))因此,写成这样是正确的


double Mas[];                                                                //массив для упорядочивания всех ордеров
  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       ArrayResize(Mas, i+1);                                                 //задан размер массива
       Mas [i] = Price; 
       ArraySort (Mas,WHOLE_ARRAY,0,MODE_DESCEND);                           // Теперь цены открытия упорядочены по убыванию
     }
   } 
   if(ArraySize(Mas)>1)                                                         //Если массив не пустой
   
         { 
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

       int Blizko1; 

Mas[Blizko1]= Blizko2+1;     Это верно??

                                                      //Определен индекс ближайшего меньшего по значению елемента к текущей цене         PriceBlizko1=Mas[Blizko1];
你能告诉我吗?

 
vikzip:

谢谢你的详细解释))))因此,写成这样是正确的


你能告诉我吗?

在每次增加一个数组元素 后,不需要对数组进行排序。最好是把排序移到

double Mas[];                                                                //массив для упорядочивания всех ордеров
  for(int i=0; i<OrdersTotal(); i++)                                           // Цикл перебора ордер
   {
    if(OrderSelect(i,SELECT_BY_POS))                                           // Если есть следующий
     {
       Price=OrderOpenPrice();
       ArrayResize(Mas, i+1);                                                 //задан размер массива
       Mas [i] = Price; 
     }
   } 
   if(ArraySize(Mas)>1)                                                         //Если массив не пустой
   
         { 
       ArraySort (Mas,WHOLE_ARRAY,0,MODE_DESCEND);                           // Теперь цены открытия упорядочены по убыванию
        int Blizko2=ArrayBsearch(Mas,Ask,WHOLE_ARRAY,0,MODE_DESCEND);          //Определен индекс ближайшего большего по значению елемента к текущей цене
             PriceBlizko2 = Mas[Blizko2];                                      // Цена выбранного ордера

       int Blizko1; 
        Mas[Blizko1]= Blizko2+1;     Это верно??
                                                      //Определен индекс ближайшего меньшего по значению елемента к текущей цене
        PriceBlizko1=Mas[Blizko1];

来自帮助。

返回值

返回第一个找到的元素的索引。如果没有找到所需的值,它将返回 所需值所在的元素中最接近的较小者的索引

Mas[Blizko2]是数组中最接近的小值。

原因: