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

 
Artyom Trishkin:

Я, честно говоря, не пользовался никогда этими ресурсами СБ. Но что вам мешает посмотреть в СБ где там, какими методами, задаются цвета. То, что вы показали в листинге:

- так это имена объектов - классов CPanel, CEdit, CBmpButton и CWndClient.

А вам нужно найти имена членов этих классов, в которых хранятся цвета, и поглядеть какими методами они могут быть инициализированы или изменены.

И наверняка придётся сначала инициализировать нужные значения, а уже потом строить сам объект.

Цвета задаются в Дефайнах, потом объекты раскрашиваются через функции ObjectSetInteger(). Я тоже сейчас пока этим методом напрямую перекрашиваю. Но хотелось бы через ООП попробовать. Я так понимаю, если нет отдельного публичного метода для изменения, то до private-члена не достучаться. Просто не настолько силен в наследованиях, виртуальных методах, еще "плаваю" и изучаю эту тему. Ладно, попробую в сервис-деске попросить сделать публичный метод для раскраски, а если можно по-другому, может подскажут как.
 
LRA:
Щелкнуть по сообщению об ошибке. Курсор укажет имя переменной. Ее надо объявить
Спасибо!
 
Kedrov:
Спасибо!

Не стоит выкладывать на данный форум декомпилированные коды. Я понимаю, что вы выложили не код, а лишь картинку. Но это означает, что вы работаете с ворованными программными продуктами. Здесь такое категорически не приветствуется - это ... как бы сказать ... нарушение этики сообщества. Здесь, на форуме и ресурсе львиную долю форумчан составляют программисты - мы сами пишем свои коды или пользуемся публичными наработками своих коллег. Вы же пользуетесь и переделываете у кого-то украденный код (может быть и у кого-то из присутствующих здесь). В общем - не стоит так начинать здесь свою деятельность.

 
Vasiliy Pushkaryov:
Цвета задаются в Дефайнах, потом объекты раскрашиваются через функции ObjectSetInteger(). Я тоже сейчас пока этим методом напрямую перекрашиваю. Но хотелось бы через ООП попробовать. Я так понимаю, если нет отдельного публичного метода для изменения, то до private-члена не достучаться. Просто не настолько силен в наследованиях, виртуальных методах, еще "плаваю" и изучаю эту тему. Ладно, попробую в сервис-деске попросить сделать публичный метод для раскраски, а если можно по-другому, может подскажут как.

Временно - скопируйте себе в Include\Ваша_папка этот класс и впишите в него нужные вам переменные-члены класса для хранения цветов и публичные методы их установки и возврата.

Плюс - вы сможете делать так, как уже нужно вам. Минус - при обновлении СБ в исходном классе могут появиться доработки, а у вас их не будет и придётся опять копировать и вписывать в обновлённый класс нужные вам методы.

... ну странно, что нет возможности спокойно менять цвет - без дефайнов ...

 

Прошу помочь - как быстро получить и информацию по объему (количество лотов всего) всех открытых позиций на всех инструментах? Поделитесь, пожалуйста, функцией.

 
Aleksey Vyazmikin:

Прошу помочь - как быстро получить и информацию по объему (количество лотов всего) всех открытых позиций на всех инструментах? Поделитесь, пожалуйста, функцией.


Функция GetAmountLotFromOpenPos().

Данная функция возвращает сумму лотов открытых позиций. Более точный отбор учитываемых позиций задаётся внешними параметрами:

  • sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
  • op - Торговая операция, тип позиции. Допустимые значения: OP_BUYOP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
  • mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

 
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает сумму лотов открытых позиций                        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - торговая операция          ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
double GetAmountLotFromOpenPos(string sy="", int op=-1, int mn=-1) {
  double l=0;
  int    i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              l+=OrderLots();
            }
          }
        }
      }
    }
  }
  return(l);
}
 
Vladimir Zubov:

Спасибо.

 

Будьте добры, подскажите такой вопрос:  Зиг-заг по порогу(depth(в пунктах, High(Low) образуются после прохождения n-пунктов, depth=Depth*Point). Есть цепочка точек(ArrUp(ArrDn)), показывающих дорисовку зигзага, т.е. была точка ArrUp последняя, потом отстут depth и образовалась первая точка ArrDn, после нее еще серия точек ArrDn, т.к. цена пошла вниз,(дорисовка). Нужно так построить алгоритм, чтобы был отступ depth м.у этими точка. Может цикл for, не могу сообразить.

//+------------------------------------------------------------------+
//|                                                       FastZZ.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yurich"
#property link      "https://login.mql5.com/ru/users/Yurich"
//---
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Red
#property indicator_color2 Red
#property indicator_color3 Gold
#property indicator_color4 DodgerBlue
#property indicator_width3 3
#property indicator_width4 3

//--- input parameters
extern int  Depth=10;
//---
double zzH[],zzL[];
double depth;
int last,direction,pbars;
datetime lastbar;
double ArrUp[];
double ArrDn[];
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexBuffer(0,zzH);
   SetIndexBuffer(1,zzL);
   SetIndexBuffer(2,ArrUp);
   SetIndexBuffer(3,ArrDn);
   SetIndexStyle(0,DRAW_ZIGZAG);
   SetIndexStyle(1,DRAW_ZIGZAG);
   SetIndexStyle(2,DRAW_ARROW);
   SetIndexStyle(3,DRAW_ARROW);
   SetIndexArrow(2,159);
   SetIndexArrow(3,159);
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   IndicatorDigits(Digits);
//----
   depth=Depth*Point;
   direction=1;
   last=0;
   pbars=0;
   lastbar=0;
   return(0);
  }
//+------------------------------------------------------------------+
int start()
  {
   int limit=Bars-IndicatorCounted()-1;
   if(lastbar!=Time[0])
     {
      lastbar=Time[0];
      last++;
     }
   if(MathAbs(Bars-pbars)>1) { last=Bars-1; limit=last;}
   pbars=Bars;
//---
   for(int i=limit; i>0; i--)
     {
      bool set=false;
      zzL[i]=0;
      zzH[i]=0;
      ArrUp[i]=EMPTY_VALUE;
      ArrDn[i]=EMPTY_VALUE;
      //---
      if(direction>0)
        {
         if(High[i]>zzH[last])
           {
            zzH[last]=0;
            zzH[i]=High[i];
            ArrUp[i]=High[i];
            if(Low[i]<High[last]-depth)
              {
               if(Open[i]<Close[i])
                 {
                  zzH[last]=High[last];
                  ArrUp[last]=High[last];
                 }
               else direction=-1;
               zzL[i]=Low[i];
               ArrDn[i]=Low[i];
              }
            last=i;
            set=true;
           }
         if(Low[i]<zzH[last]-depth && (!set || Open[i]>Close[i]))
           {
            zzL[i]=Low[i];
            ArrDn[i]=Low[i];
            if(High[i]>zzL[i]+depth && Open[i]<Close[i])
              {
               zzH[i]=High[i];
               ArrUp[i]=High[i];
              }
            else direction=-1;
            last=i;
           }
        }
      else //direction<0
        {
         if(Low[i]<zzL[last])
           {
            zzL[last]=0;
            zzL[i]=Low[i];
            ArrDn[i]=Low[i];
            if(High[i]>Low[last]+depth)
              {
               if(Open[i]>Close[i])
                 {
                  zzL[last]=Low[last];
                  ArrDn[last]=Low[last];
                 }
               else direction=1;
               zzH[i]=High[i];
               ArrUp[i]=High[i];
              }
            last=i;
            set=true;
           }
         if(High[i]>zzL[last]+depth && (!set || Open[i]<Close[i]))
           {
            zzH[i]=High[i];
            ArrUp[i]=High[i];
            if(Low[i]<zzH[i]-depth && Open[i]>Close[i])
              {
               zzL[i]=Low[i];
               ArrDn[i]=Low[i];
              }
            else direction=1;
            last=i;
           }
        }
     }
//----
   zzH[0]=0;
   zzL[0]=0;
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

Всем привет.

Научите, как остановить работу советника и запустить при появлении новой свечи.

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