Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 328

 

здравствуйте  хочу получить дату экспирации для фьючерсов 

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

А выдает 1970 01 01 00 00

 

Добрый день! Подскажите кто нибудь , пожалуйста, как сделать чтобы в советнике при нажатии мыши на определенной точке графика происходило открытие ордера в этой точке, Есть пример только когда устанавливаешь  скрипт или советник, то функция NormalizeDouble(WindowPriceOnDropped(),Digits); определяет точку указания мышью, . Но вопрос в том чтобы это можно было делать в любой момент из работающего советника. Есть ли такая возможность. 

Вижу функцию ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1)) , но как ее использовать пока не понял, можно ли определить куда (в какую точку) был направлен указатель мыши?

 
Basicprof:

Добрый день! Подскажите кто нибудь , пожалуйста, как сделать чтобы в советнике при нажатии мыши на определенной точке графика происходило открытие ордера в этой точке, Есть пример только когда устанавливаешь  скрипт или советник, то функция NormalizeDouble(WindowPriceOnDropped(),Digits); определяет точку указания мышью, . Но вопрос в том чтобы это можно было делать в любой момент из работающего советника. Есть ли такая возможность. 

Вижу функцию ChartGetInteger(0,CHART_EVENT_MOUSE_MOVE,0,1)) , но как ее использовать пока не понял, можно ли определить куда (в какую точку) был направлен указатель мыши?

Используйте событие клика "CHARTEVENT_CLICK"

Куски кода можно взять отсюда

 
Vitaly Muzichenko:

Используйте событие клика "CHARTEVENT_CLICK"

Куски кода можно взять отсюда


Огромное Спасибо !!!

 

Еще вопрос : перенес функции в библиотеку из советника при запуске советника, он сразу же вылетает, а в сообщениях показывает что терминал не может загрузить библиотеку Cannot call 'ATP_funkcii.mq4::DrawLABEL', 'ATP_funkcii.mq4' is not loaded

 Как решить проблемму?

Заметил одну вещь! В редакторе программы файлы советника и библиотеки видно, а на компьютере в файлах программы их почему то нет. Только файл советника.

 
Здравствуйте! Подскажите пожалуйста как зная индекс элемента массива узнать индекс следующего элемента массива?
 
vikzip:
Здравствуйте! Подскажите пожалуйста как зная индекс элемента массива узнать индекс следующего элемента массива?

Индекс любого массива всегда начинается с нуля. Т.е., если размер массива 1, то индекс этой ячейки будет 0.

Как, зная цифру 5, узнать цифру 6 ?

Как, зная цифру 6, узнать цифру 7, зная, что цифр всего 8 ?

Как, зная индекс 7, узнать следующий индекс, зная, что размер массива = 8 ?

 

Здравствуйте, прошу помощи. Не обновляются показания индикатора, хочу чтобы на каждом тике обновлялись.


//+------------------------------------------------------------------+
//|                                             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 ?

Как, зная цифру 6, узнать цифру 7, зная, что цифр всего 8 ?

Как, зная индекс 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] это и есть ближайшее меньшее значение в массиве.

Причина обращения: