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

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
 

Вложения

  • S2.mq4
    S2.mq4
    8,5 КБ · Просмотры: 6

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

Новичок форума
PHP:
Expand Collapse Copy
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++);
        }
     }
не работает счетчик
 

ИванМН

Местный знаток
PHP:
Expand Collapse Copy
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++);
        }
     }
не работает счетчик
А зачем его обнулять на каждом выполнении условия перед распринтовкой?
 

procom73

Прохожий
Уважаемые специалисты. Переконвертируйте пожалуйста такой индюк. Но будет наиболее правильно конвертировать индюк в 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

Новичок форума
PHP:
Expand Collapse Copy
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[bar],Close[bar])==Open[bar])
type = false;//медведи
else
type = true;//быки
return(type);
}
int Candle_body(int bar)
{
if(Candle_type(bar)==false)
height_body int)((Open[bar]-Close[bar])/Point);
else
height_body int)((Open[bar]-Close[bar])/Point);
return(height_full);
}
int Candle_rost(int bar)
{
height_full = (int)((High[bar]-Low[bar])/Point);
return(height_full);
}
long Candle_volume(int bar)
{
volume = Volume[bar];
return(volume);
}
int Up_shadow(int bar)
{
top_shadow = (int)((High[bar]-MathMax(Open[bar],Close[bar]))/Point);
return(top_shadow);
}
int Dw_shadow(int bar)
{
down_shadow = (int)((MathMin(Open[bar],Close[bar])-Low[bar])/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

Новичок форума
PHP:
Expand Collapse Copy
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[bar],Close[bar])==Open[bar])
type = false;//медведи
else
type = true;//быки
return(type);
}
int Candle_body(int bar)
{
if(Candle_type(bar)==false)
height_body int)((Open[bar]-Close[bar])/Point);
else
height_body int)((Open[bar]-Close[bar])/Point);
return(height_full);
}
int Candle_rost(int bar)
{
height_full = (int)((High[bar]-Low[bar])/Point);
return(height_full);
}
long Candle_volume(int bar)
{
volume = Volume[bar];
return(volume);
}
int Up_shadow(int bar)
{
top_shadow = (int)((High[bar]-MathMax(Open[bar],Close[bar]))/Point);
return(top_shadow);
}
int Dw_shadow(int bar)
{
down_shadow = (int)((MathMin(Open[bar],Close[bar])-Low[bar])/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 это будет значит наследование?
 

ИванМН

Местный знаток
Правильно ли я понимаю если новый класс будет использовать методы из класса candle это будет значит наследование?
🤦‍♂️🤦‍♂️🤦‍♂️
Кошмар. Человек начитался чего-то лишнего.

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

AlexeyVik

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

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

star603

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

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

AlexeyVik

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

star603

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

ИванМН

Местный знаток
На мой взгляд, ООП - одно большое лишнее. Но не навязываю свою точку зрения.
Подскажите пожалуйста как написать одной строчкой код комментария чтобы выводился столбиком?
Почитайте про форматирование строк , например, в описании функции Comment. Перед переносимым в новую строку фрагментом ставится последовательность "\n".
 

AlexeyVik

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

star603

Новичок форума
PHP:
Expand Collapse Copy
//+------------------------------------------------------------------+
//|                                                           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[bar], Close[bar]) == Open[bar])
         type = false; // медвежья свеча
      else
         type = true;  // бычья свеча
      return(type);
     }

   // Вычисление размера тела свечи
   int               Candle_body(int bar)
     {
      if(Candle_type(bar) == false)
         height_body = int((Open[bar] - Close[bar]) / Point);
      else
         height_body = int((Close[bar] - Open[bar]) / Point);
      return(height_body);
     }
   // Вычисление полной высоты свечи
   int               Candle_rost(int bar)
     {
      height_full = (int)((High[bar] - Low[bar]) / Point);
      return(height_full);
     }
   // Получение объема свечи
   long              Candle_volume(int bar)
     {
      volume = Volume[bar];
      return(volume);
     }
   // Вычисление размера верхней тени свечи
   int               Up_shadow(int bar)
     {
      top_shadow = (int)((High[bar] - MathMax(Open[bar], Close[bar])) / Point);
      return(top_shadow);
     }
   // Вычисление размера нижней тени свечи
   int               Dw_shadow(int bar)
     {
      down_shadow = (int)((MathMin(Open[bar], Close[bar]) - Low[bar]) / 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[36]);
  }
//+------------------------------------------------------------------+
[\PHP]

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

vis26

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