# Ваши вопросы по языку MQL4

Раздел: Язык программирования MQL4
Автор темы: chocolate
Создана: 2011-11-07 10:37
Ответов: 9576 | Просмотров: 1107158
Страница 471 из 479
Источник: https://forexsystemru.com/threads/65289/page-471

---

## star603 — 2024-08-07 23:15

Раньше выдавала так:

2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=997type=0p=1
2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=996type=0p=1
2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=993type=0p=1
2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=992type=0p=1
2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=990type=0p=1
2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=987type=0p=1

А теперь так:

2024.08.07 23:13:19.447    2008.02.27 00:02:10  S2 EURUSD,Daily: №=0Date=2008.02.27 00:00:00type=0
2024.08.07 23:13:19.447    2008.02.27 00:01:25  S2 EURUSD,Daily: №=0Date=2008.02.27 00:00:00type=0
2024.08.07 23:13:19.447    2008.02.27 00:01:20  S2 EURUSD,Daily: №=0Date=2008.02.27 00:00:00type=0
2024.08.07 23:13:14.620    2008.02.21 00:17:20  S2 EURUSD,Daily: №=0Date=2008.02.21 00:00:00type=0
2024.08.07 23:13:14.610    2008.02.21 00:06:24  S2 EURUSD,Daily: №=0Date=2008.02.21 00:00:00type=0
2024.08.07 23:13:13.231    2008.02.20 02:45:10  S2 EURUSD,Daily: №=0Date=2008.02.20 00:00:00type=0

## star603 — 2024-08-07 23:39

> Цитата (star603):
> Раньше выдавала так:
>
> 2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=997type=0p=1
> 2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=996type=0p=1
> 2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=993type=0p=1
> 2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=992type=0p=1
> 2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=990type=0p=1
> 2024.08.07 19:32:14.255 2008.01.02 09:31:40 S2 EURUSD,Daily: i=987type=0p=1
>
> А теперь так:
>
> 2024.08.07 23:13:19.447    2008.02.27 00:02:10  S2 EURUSD,Daily: №=0Date=2008.02.27 00:00:00type=0
> 2024.08.07 23:13:19.447    2008.02.27 00:01:25  S2 EURUSD,Daily: №=0Date=2008.02.27 00:00:00type=0
> 2024.08.07 23:13:19.447    2008.02.27 00:01:20  S2 EURUSD,Daily: №=0Date=2008.02.27 00:00:00type=0
> 2024.08.07 23:13:14.620    2008.02.21 00:17:20  S2 EURUSD,Daily: №=0Date=2008.02.21 00:00:00type=0
> 2024.08.07 23:13:14.610    2008.02.21 00:06:24  S2 EURUSD,Daily: №=0Date=2008.02.21 00:00:00type=0
> 2024.08.07 23:13:13.231    2008.02.20 02:45:10  S2 EURUSD,Daily: №=0Date=2008.02.20 00:00:00type=0

еще раньше выдал ошибку критическую ошибку больше за предела массива. а сейчас такого не выдает.

## star603 — 2024-08-08 15:29

> Цитата (star603):
> еще раньше выдал ошибку критическую ошибку больше за предела массива. а сейчас такого не выдает.

решилась проблема

## star603 — 2024-08-08 17:06

for(int i=0; i<=Bars; i++)
     {
      if(candle.marbozu(i)==2)
        {
         int k=0;
         Print("#=",i," ","Up==",candle.Up_shadow(i)," ","Dw=",candle.Dw_shadow(i)," ","Date=",Time[i+1]," ","k=",k++);
        }
     }

не работает счетчик

## ИванМН — 2024-08-09 01:21

> Цитата (star603):
> 
> for(int i=0; i<=Bars; i++)
>      {
>       if(candle.marbozu(i)==2)
>         {
>          int k=0;
>          Print("#=",i," ","Up==",candle.Up_shadow(i)," ","Dw=",candle.Dw_shadow(i)," ","Date=",Time[i+1]," ","k=",k++);
>         }
>      }
> 
> не работает счетчик

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

## MakarFX — 2024-08-09 08:11

> Цитата (star603):
> не работает счетчик

```
int k=0;
for(int i=0; i<=Bars; i++)
     {
      if(candle.marbozu(i)==2)
        {
         k++;
         Print("#=",i," ","Up==",candle.Up_shadow(i)," ","Dw=",candle.Dw_shadow(i)," ","Date=",Time[i+1]," ","k=",k);
        }
     }
```

## procom73 — 2024-08-14 13:04

> Цитата (Surem):
> Уважаемые специалисты. Переконвертируйте пожалуйста такой индюк. Но будет наиболее правильно конвертировать индюк в mq4 если тут это возможно, тогда Surem конвертировать не надо.

Приветствую.
Помогите чайнику mql5. Работал Expert на mql4, сейчас нужен для mql5.
Условия проще некуда.

int dtriger = 0;

if(dtriger == 2) { открываем 2 Лота  BUY }
if(dtriger == 1) { закрывем  1  Лот  BUY }
     
if(dtriger == -2) {открываем 2 Лота Sell }
if(dtriger == -1) {закрывем  1  Sell }

if(dtriger == 0) { закрывем  ВСЕ открытое }

Благодарствую.

## star603 — 2024-08-26 22:08

class Candle
{
private:
double open; // цена открытия
double close; // цена закрытия
double high; // максимум
double low; // минимум
long volume; // тиковый объём
datetime time_op; // время открытия
bool type; // тип свечи (1-true, 2-false)
int height_full; // общая высота свечи
int height_body; // размер тела свечи
int top_shadow; // размер верхней тени
int down_shadow; // размер нижней тени
int max_shadow; // размер нижней тени
int min_shadow; // размер нижней тени
int gep; // размер гепа
bool trend; // true - верх, false - вниз
bool vibor; // для двойного выбора
int many; // для множествонного значения
public:
bool Candle_type(int bar)
{
if(MathMax(Open,Close)==Open)
type = false;//медведи
else
type = true;//быки
return(type);
}
int Candle_body(int bar)
{
if(Candle_type(bar)==false)
height_body int)((Open-Close)/Point);
else
height_body int)((Open-Close)/Point);
return(height_full);
}
int Candle_rost(int bar)
{
height_full = (int)((High-Low)/Point);
return(height_full);
}
long Candle_volume(int bar)
{
volume = Volume;
return(volume);
}
int Up_shadow(int bar)
{
top_shadow = (int)((High-MathMax(Open,Close))/Point);
return(top_shadow);
}
int Dw_shadow(int bar)
{
down_shadow = (int)((MathMin(Open,Close)-Low)/Point);
return(down_shadow);
}
int Max_shadow(int bar)
{
max_shadowint)(MathMax(Up_shadow(bar)*Point,Dw_shadow(bar)*P oint)/Point);
return(max_shadow);
}
int Min_shadow(int bar)
{
min_shadowint)(MathMin(Up_shadow(bar)*Point,Dw_shadow(bar)*P oint)/Point);
return(min_shadow);
}
}candle; 

Жду ваши мнение о коде. Заранее спасибо.

## star603 — 2024-08-27 17:06

> Цитата (star603):
> 
> class Candle
> {
> private:
> double open; // цена открытия
> double close; // цена закрытия
> double high; // максимум
> double low; // минимум
> long volume; // тиковый объём
> datetime time_op; // время открытия
> bool type; // тип свечи (1-true, 2-false)
> int height_full; // общая высота свечи
> int height_body; // размер тела свечи
> int top_shadow; // размер верхней тени
> int down_shadow; // размер нижней тени
> int max_shadow; // размер нижней тени
> int min_shadow; // размер нижней тени
> int gep; // размер гепа
> bool trend; // true - верх, false - вниз
> bool vibor; // для двойного выбора
> int many; // для множествонного значения
> public:
> bool Candle_type(int bar)
> {
> if(MathMax(Open,Close)==Open)
> type = false;//медведи
> else
> type = true;//быки
> return(type);
> }
> int Candle_body(int bar)
> {
> if(Candle_type(bar)==false)
> height_body int)((Open-Close)/Point);
> else
> height_body int)((Open-Close)/Point);
> return(height_full);
> }
> int Candle_rost(int bar)
> {
> height_full = (int)((High-Low)/Point);
> return(height_full);
> }
> long Candle_volume(int bar)
> {
> volume = Volume;
> return(volume);
> }
> int Up_shadow(int bar)
> {
> top_shadow = (int)((High-MathMax(Open,Close))/Point);
> return(top_shadow);
> }
> int Dw_shadow(int bar)
> {
> down_shadow = (int)((MathMin(Open,Close)-Low)/Point);
> return(down_shadow);
> }
> int Max_shadow(int bar)
> {
> max_shadowint)(MathMax(Up_shadow(bar)*Point,Dw_shadow(bar)*P oint)/Point);
> return(max_shadow);
> }
> int Min_shadow(int bar)
> {
> min_shadowint)(MathMin(Up_shadow(bar)*Point,Dw_shadow(bar)*P oint)/Point);
> return(min_shadow);
> }
> }candle;
> 
>
> Жду ваши мнение о коде. Заранее спасибо.

Правильно ли я понимаю если новый класс будет использовать методы из класса candle это будет значит наследование?

## ИванМН — 2024-08-27 22:15

> Цитата (star603):
> Правильно ли я понимаю если новый класс будет использовать методы из класса candle это будет значит наследование?

🤦‍♂️🤦‍♂️🤦‍♂️
Кошмар. Человек начитался чего-то лишнего.

"Действительно, у Хоттабыча был сильный жар.
Старик здорово объелся мороженым увлёкся ООП."

## AlexeyVik — 2024-08-28 08:51

> Цитата (ИванМН):
> 🤦‍♂️🤦‍♂️🤦‍♂️
> Кошмар. Человек начитался чего-то лишнего.
>
> "Действительно, у Хоттабыча был сильный жар.
> Старик здорово объелся мороженым увлёкся ООП."

Это не лишнее. Просто человеку запретили доступ к документации по языку. Вот он и просит пересказать всё своими словами. Или скопировать документацию сюда, кусками.

## star603 — 2024-08-28 10:50

> Цитата (AlexeyVik):
> Это не лишнее. Просто человеку запретили доступ к документации по языку. Вот он и просит пересказать всё своими словами. Или скопировать документацию сюда, кусками.

из последнего что писал не копировал ничего.

## AlexeyVik — 2024-08-28 11:48

> Цитата (star603):
> из последнего что писал не копировал ничего.

Разве я говорил о том, что ты копировал? 
Я сказал, что ты просишь скопировать документацию или пересказать всё там написанное. Тебе запретили доступ к документации? 
mql5.com/ru/docs/basis/oop/inheritance
И в МЕ есть эта документация. Можно и там читать всё это.

## star603 — 2024-08-28 12:23

Подскажите пожалуста как написать одной строчкой код коментария чтобы выодился в столбиком?

## ИванМН — 2024-08-28 13:14

> Цитата (AlexeyVik):
> Это не лишнее.

На мой взгляд, ООП - одно большое лишнее. Но не навязываю свою точку зрения.

> Цитата (star603):
> Подскажите пожалуйста как написать одной строчкой код комментария чтобы выводился столбиком?

Почитайте про форматирование строк , например, в описании функции Comment. Перед переносимым в новую строку фрагментом ставится последовательность "\n".

## AlexeyVik — 2024-08-28 13:31

> Цитата (ИванМН):
> На мой взгляд, ООП - одно большое лишнее. Но не навязываю свою точку зрения.

А ты сравни многомерный массив и массив структуры. Ведь структура тоже относится к ООП.  Массив не может быть более 4х измерений, а структура пожалуйста. В массиве поля обезличены и надо помнить в каком что хранится, а в структуре именованы. Да плюс ко всему её можно написать как класс.
А функция открытия позиции, постановке отложенного ордера, модификация и т.д. В MQL4 всё ООП спрятано от глаз программиста, а в MQL5 дали самостоятельно это делать. Это не лишнее, а просто неумение это использовать. Некоторые используют ООП там где это совсем не надо. И от этого складывается впечатление о вреде ООП. Я тоже не очень понимаю ООП, но пользуюсь иногда с пользой для себя.

## star603 — 2024-08-29 20:15

//+------------------------------------------------------------------+
//|                                                           S3.mq4 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
class Candle
  {
private:
   double            open;           // цена открытия
   double            close;          // цена закрытия
   double            high;           // максимум цены
   double            low;            // минимум цены
   long              volume;         // тиковый объём
   datetime          time_op;        // время открытия
   bool              type;           // тип свечи: true - бычья (цена закрытия выше открытия), false - медвежья
   int               height_full;    // общая высота свечи (разница между максимумом и минимумом)
   int               height_body;    // размер тела свечи (разница между ценой открытия и закрытия)
   int               top_shadow;     // размер верхней тени (разница между максимумом и более высокой из цен открытия и закрытия)
   int               down_shadow;    // размер нижней тени (разница между минимумом и более низкой из цен открытия и закрытия)
   int               max_shadow;     // максимальный размер тени (выбирается между верхней и нижней)
   int               min_shadow;     // минимальный размер тени (выбирается между верхней и нижней)
   int               gep;            // размер гепа (разрыв между предыдущей и текущей свечой)
   bool              trend;          // направление тренда: true - вверх, false - вниз
   bool              vibor;          // переменная для двойного выбора (использование зависит от логики программы)
   int               many;           // переменная для множественного значения (использование зависит от логики программы)

public:
   // Определение типа свечи: медвежья или бычья
   bool              Candle_type(int bar)
     {
      if(MathMax(Open, Close) == Open)
         type = false; // медвежья свеча
      else
         type = true;  // бычья свеча
      return(type);
     }

   // Вычисление размера тела свечи
   int               Candle_body(int bar)
     {
      if(Candle_type(bar) == false)
         height_body = int((Open - Close) / Point);
      else
         height_body = int((Close - Open) / Point);
      return(height_body);
     }
   // Вычисление полной высоты свечи
   int               Candle_rost(int bar)
     {
      height_full = (int)((High - Low) / Point);
      return(height_full);
     }
   // Получение объема свечи
   long              Candle_volume(int bar)
     {
      volume = Volume;
      return(volume);
     }
   // Вычисление размера верхней тени свечи
   int               Up_shadow(int bar)
     {
      top_shadow = (int)((High - MathMax(Open, Close)) / Point);
      return(top_shadow);
     }
   // Вычисление размера нижней тени свечи
   int               Dw_shadow(int bar)
     {
      down_shadow = (int)((MathMin(Open, Close) - Low) / Point);
      return(down_shadow);
     }
   // Вычисление максимальной тени (верхняя или нижняя)
   int               Max_shadow(int bar)
     {
      max_shadow = int(MathMax(Up_shadow(bar) * Point, Dw_shadow(bar) * Point) / Point);
      return(max_shadow);
     }
   // Вычисление минимальной тени (верхняя или нижняя)
   int               Min_shadow(int bar)
     {
      min_shadow = int(MathMin(Up_shadow(bar) * Point, Dw_shadow(bar) * Point) / Point);
      return(min_shadow);
     }
   //Cумма белых свечей обратный подсчет
   int               Sum_W_candle_b(int col_bar)
     {
      int k =0;
      for(int i=col_bar; i>0; i--)
         if(Candle_type(i)==true)
            many = k++;
      return(many);
     }
   //Cумма черных свечей обратный подсчет
   int               Sum_B_candle_b(int col_bar)
     {
      int k =0;
      for(int i=col_bar; i>0; i--)
         if(Candle_type(i)==false)
            many = k++;
      return(many);
     }
   //Cумма белых свечей прямой подсчет
   int               Sum_W_candle_r(int col_bar)
     {
      int k =0;
      for(int i=0; i<col_bar; i++)
         if(Candle_type(i)==true)
            many = k++;
      return(many);
     }
   //Cумма черных свечей прямой подсчет
   int               Sum_B_candle_r(int col_bar)
     {
      int k =0;
      for(int i=0; i<col_bar; i++)
         if(Candle_type(i)==false)
            many = k++;
      return(many);
     }
  } candle;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int               OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void              OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void              OnTick()
  {
   Comment(candle.Sum_B_candle_r(36),"  ",Time);
  }
//+------------------------------------------------------------------+
[\PHP]

Почему показывает на 1 меньше на графике USD/JPY? У меня показывает 19 вместо 20. Заранее спасибо.

## ИванМН — 2024-08-29 22:04

> Цитата (star603):
> Почему показывает на 1 меньше на графике USD/JPY? У меня показывает 19 вместо 20. Заранее спасибо.

Во всех функциях замените k++ на ++k.

## vis26 — 2024-08-29 23:04

Подскажите пожалуйста как сделать так, чтоб прибыль ордера закрывалась в зависимости от объёма ордера. Сейчас ордера закрываются при достижении прибыли
OrderProfit()+OrderSwap()+OrderCommission()>=FixedProfit1 а, хотелось бы чтоб допустим FixedProfit1=5  тогда
 0,01*FixedProfit1=5
0,02*FixedProfit1=10
0,03*FixedProfit1=15
0,04*FixedProfit1=20

## star603 — 2024-08-30 08:34

> Цитата (ИванМН):
> Во всех функциях замените k++ на ++k.

Скажи пожалуйста в чем разница?

---

Следующая страница: https://forexsystemru.com/threads/65289/page-472
