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

 
Valeriy Yastremskiy #:
Средствами винды. Настройка графики большой маленький шрифт тоже должно настраивать.

А если два монитора? Разных...

 
Artyom Trishkin #:

А если два монитора? Разных...

Тогда надо понимать разрешение экрана, куда выводится изображение. Объект может и на 2 монитора попасть) но это более сложная задача.
Да, привязка к стандартным шрифтам системы через отрицательные значения   TextSetFont() хорошее решение. 
 

Помогите оптимизировать индикатор. Индюк работает но медленно, оптимизация советника с ним растягивается идет очень долго. Подскажите, что не так сделано? Как ускорить работу?

//+------------------------------------------------------------------+
//|                                                     Momentum.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2022, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red

#property indicator_maximum 1
#property indicator_minimum 0

#property indicator_width1 2

//---- input parameters
extern int  MomPeriod    = 10;
extern int  WindowOfNorm = 45; // ширина окна нормирования в барах
extern int  MA_Length    = 10; // Average Period
extern int  MA_Mode      =  0; // Mode of Moving Average

//---- buffers
double NormBuffer[],MomBuffer[],AvgVolumes[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicator line
   SetIndexStyle(2,DRAW_NONE);
   SetIndexBuffer(2,NormBuffer);

   SetIndexStyle(1,DRAW_NONE);
   SetIndexBuffer(1,MomBuffer);
   
    SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,AvgVolumes);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Momentum                                                         |
//+------------------------------------------------------------------+
int start()
  {
   for(int i = 1;i <= 130; i++)
     {
      MomBuffer[i]=iMA(NULL,0,MomPeriod,0,0,0,i)*100/iMA(NULL,0,MomPeriod,0,0,0,i+MomPeriod);

      // нормирование
      NormBuffer[i]=Norm(WindowOfNorm,i);
      //-----
      AvgVolumes[i] = iMAOnArray(NormBuffer,0,MA_Length,0,MA_Mode,i);
     }
   return(0);
  }
//+------------------------------------------------------------------+

// нормирование
double Norm(int norm, int i) {
   // экстремумы
   double max=MomBuffer[ArrayMaximum(MomBuffer,norm,i)];
   double min=MomBuffer[ArrayMinimum(MomBuffer,norm,i)];
   // вычисление осциллятора
   double delta=max-min; // размах
   if(delta==0) return(1);
   else return((MomBuffer[i]-min)/delta);
  }

Файлы:
 
IrishDance #:

Помогите оптимизировать индикатор. Индюк работает но медленно, оптимизация советника с ним растягивается идет очень долго. Подскажите, что не так сделано? Как ускорить работу?

Всё не так сделано. Только обратите внимание на эту строку

//|                      Copyright © 2004, MetaQuotes Software Corp. |

За эти 18 лет язык программирования претерпел такие изменения, что это работать вообще не должно. Я не понимаю почему MQ до сих пор не отключили вообще функции int init() и int start()

 

Что не так, с 2 параметрами ВЛайн в тестере дает ошибку 2022.03.24 18:24:27.615 TestGenerator: unmatched data error (volume limit 263 at 2022.03.18 14:30 exceeded)

Если первый параметр time1 убираешь, то все норм.

bool FlagOpOr=false;
bool FlagClOr=false;
bool Work=true;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

   
//---
   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[])
  {

//---
     static bool FlagNDay=true, FlagVLRed=false,FlagVLBlue=false;
  static datetime Data = 0, NData=0;
  Data = Day();
 if(NData!=Data){FlagVLRed=true; FlagVLBlue=true;NData=Data;} 
if(FlagVLRed==true && Hour()==0){ VLine(1,clrRed); FlagVLRed=false;}
if(FlagVLBlue==true &&  Hour()==1){ VLine(1,clrBlue); FlagVLBlue=false;  }
      
    
  
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)//int deinit(void)void
  {
   int i;
   int obj_total=ObjectsTotal();
   for(i=obj_total-1;i>=0;i--)
     {
 string     sn=ObjectName(i);
      string Head=StringSubstr(sn,0,4);// Извлекаем первые 4 сим
      if(Head == "VLin")
        {
          ObjectDelete(sn);       

       }
     }
   
    Comment("");
   return;
  }
 
  //+------------------------------------------------------------------+
  bool VLine( int time1=0, color clr = clrRed ){
  string  var1=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
     string NameLine="VLine_" +  "_"+var1;
            bool   created=ObjectCreate(0,NameLine,OBJ_VLINE,0,TimeCurrent(),0);
            if(created)// если создался - сделаем ему тюнинг
              {              
               //--- точка привязки сверху, чтобы не наезжать на бар
               ObjectSetInteger(0,NameLine,OBJPROP_STYLE,STYLE_SOLID);
               //--- последний штрих - покрасим
               ObjectSetInteger(0,NameLine,OBJPROP_COLOR,clr);
               //--- установим толщину линии 
               ObjectSetInteger(0,NameLine,OBJPROP_WIDTH,2); 
                
              }
              else return(false );time1=0;
              return(true);
              }
 

Всем добрый день. Во время торговли открыто 20-40 графиков. И чтобы откапать нужный в нижней части всех инструментов или в пункте верхнего меню «окно» приходиться тратить много времени. А можно как-то скриптом это ускорить- накинул скрипт во входные параметры вписал руками нужный инструмент, и он открылся как если бы его нашли глазами и нажали по нему мышью. Как такое дело реализовать?

 
DanilaMactep #:

Всем добрый день. Во время торговли открыто 20-40 графиков. И чтобы откапать нужный в нижней части всех инструментов или в пункте верхнего меню «окно» приходиться тратить много времени. А можно как-то скриптом это ускорить- накинул скрипт во входные параметры вписал руками нужный инструмент, и он открылся как если бы его нашли глазами и нажали по нему мышью. Как такое дело реализовать?

По логике скрипт должен узнать сколько чартов / окон открыто и по каким инструментам, запомнить их (символы и чарт_айди графиков), потом, по количеству инструментов нарисовать панель с кнопками на которых написано название инструмента. По нажатию кнопки график с нужным инструментом меняет свойство на развернутый (он может быть свернут) и над всеми, и скрипт закрывается. 

 
Valeriy Yastremskiy #:

По логике скрипт должен узнать сколько чартов / окон открыто и по каким инструментам, запомнить их (символы и чарт_айди графиков), потом, по количеству инструментов нарисовать панель с кнопками на которых написано название инструмента. По нажатию кнопки график с нужным инструментом меняет свойство на развернутый (он может быть свернут) и над всеми, и скрипт закрывается. 

Плохая логика- какая разница в каких кнопках искать- в низу, в меню окно или в кнопках нарисованных скриптом? Надо как-то так сделать, что вписал нужный символ во входные параметры, и скрипт открыл тебе именно это окно- так  проще и быстрей будет. Есть у кого-нибудь такое чудо- поделитесь пожалуйста?
 

здравствуйте!

ищу советник, сеточник.

открывает рыночные ордера - сеткой.

закрывает ордера  когда сетка выходит на определенный (%) прибыли.

Встречал такой советник, а теперь найти не могу. 

Может у кого то под рукой имеется?

 
DanilaMactep #:
Плохая логика- какая разница в каких кнопках искать- в низу, в меню окно или в кнопках нарисованных скриптом? Надо как-то так сделать, что вписал нужный символ во входные параметры, и скрипт открыл тебе именно это окно- так  проще и быстрей будет. Есть у кого-нибудь такое чудо- поделитесь пожалуйста?
Открыть новое окно (откроется без советника и с дефолтным шаблоном) или поднять наверх или развернуть уже открытое окно.
Посмотри прикрепленный код, там есть перебор чартов и рисование на чарте по условию. Может поможет.
Причина обращения: