Questions from Beginners MQL5 MT5 MetaTrader 5 - page 1121

 

Good day everyone and great profits!

I generated a simple Expert Advisor with VQL5 Wizard, the code is below. Please help me to find out why the "Expiration of pending orders (in bars)" function does not work. I set any Signal_Expiration values from 1 to 1000, but the pending order still exists only within one bar. I also attach parameter settings.

For testing, I am using a demo account in the Metatrader 5 terminal, build 2136.

Sincerely, Vladimir.

//+------------------------------------------------------------------+
//|                                                EA_MasterMQL5.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalITF.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedRisk.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title            ="EA_MB_MasterMQL5"; // Document name
ulong        Expert_MagicNumber      =1473;               //
bool         Expert_EveryTick        =false;              //
//--- inputs for main signal
input int    Signal_ThresholdOpen    =0;                 // Signal threshold value to open [0...100]
input int    Signal_ThresholdClose   =0;                 // Signal threshold value to close [0...100]
input double Signal_PriceLevel       =0.0;                // Price level to execute a deal
input double Signal_StopLevel        =50.0;               // Stop Loss level (in points)
input double Signal_TakeLevel        =50.0;               // Take Profit level (in points)
input int    Signal_Expiration       =4;                  // Expiration of pending orders (in bars)
input int    Signal_ITF_GoodHourOfDay=-1;                 // IntradayTimeFilter(-1,...) Good hour
input int    Signal_ITF_BadHoursOfDay=8389119;            // IntradayTimeFilter(-1,...) Bad hours (bit-map)
input int    Signal_ITF_GoodDayOfWeek=-1;                 // IntradayTimeFilter(-1,...) Good day of week
input int    Signal_ITF_BadDaysOfWeek=0;                  // IntradayTimeFilter(-1,...) Bad days of week (bit-map)
input double Signal_ITF_Weight       =1.0;                // IntradayTimeFilter(-1,...) Weight [0...1.0]
//--- inputs for money
input double Money_FixRisk_Percent   =10.0;               // Risk percentage
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Initializing expert
   if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Creating signal
   CExpertSignal *signal=new CExpertSignal;
   if(signal==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating signal");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalITF
   CSignalITF *filter0=new CSignalITF;
   if(filter0==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating filter0");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
   signal.AddFilter(filter0);
//--- Set filter parameters
   filter0.GoodHourOfDay(Signal_ITF_GoodHourOfDay);
   filter0.BadHoursOfDay(Signal_ITF_BadHoursOfDay);
   filter0.GoodDayOfWeek(Signal_ITF_GoodDayOfWeek);
   filter0.BadDaysOfWeek(Signal_ITF_BadDaysOfWeek);
   filter0.Weight(Signal_ITF_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing=new CTrailingNone;
   if(trailing==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add trailing to expert (will be deleted automatically))
   if(!ExtExpert.InitTrailing(trailing))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing trailing");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedRisk *money=new CMoneyFixedRisk;
   if(money==NULL)
     {
      //--- failed
      printf(__FUNCTION__+": error creating money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Add money to expert (will be deleted automatically))
   if(!ExtExpert.InitMoney(money))
     {
      //--- failed
      printf(__FUNCTION__+": error initializing money");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Set money parameters
   money.Percent(Money_FixRisk_Percent);
//--- Check all trading objects parameters
   if(!ExtExpert.ValidationSettings())
     {
      //--- failed
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- Tuning of all necessary indicators
   if(!ExtExpert.InitIndicators())
     {
      //--- failed
      printf(__FUNCTION__+": error initializing indicators");
      ExtExpert.Deinit();
      return(INIT_FAILED);
     }
//--- ok
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
   ExtExpert.OnTick();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
   ExtExpert.OnTrade();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   ExtExpert.OnTimer();
  }
//+------------------------------------------------------------------+
 

Will it work for developers instead of OrderCloseTime()??

My experience in MQL5 is the fourth day, but I've already had my fill!

Bring back the OrderCloseTime() function, this position can be done somehow programmatically.... - order - then trade - then position, or is it so hard to calculate the position by machine?

//+------------------------------------------------------------------+
//| Check for close position conditions                              |
//+------------------------------------------------------------------+
//fxsaber

datetime TimCloseHisPos(){

datetime timCloseHisPos = 0;

if (!ticket1)
ticket1 = TradeClose.PositionOpen(_Symbol, ORDER_TYPE_BUY, 0.1, Ask_, Ask_ - 100 * Point_, Ask_ + 100 * Point_) ? TradeClose.ResultOrder() : 0;
else if (!PositionSelectByTicket(ticket1) && HistorySelectByPosition(ticket1) && HistoryDealGetString(ticket1,DEAL_SYMBOL)==_Symbol)
{
ENUM_ORDER_TYPE cmd = (ENUM_ORDER_TYPE)HistoryOrderGetInteger(HistoryOrderGetTicket(HistoryOrdersTotal() - 1), ORDER_TYPE);
double open = cmd ? Bid_ : Ask_;
double tp = open - (cmd ? 1 : -1) * 100 * Point_;
double sl = open + (cmd ? 1 : -1) * 100 * Point_;
ticket1 = TradeClose.PositionOpen(_Symbol, cmd, 0.1, open, sl, tp) ? TradeClose.ResultOrder() : 0;
}
//Pul-Adgi Mo-UlStan
if(HistoryDealSelect(ticket1))
{
//--- время совершения сделки в миллисекундах от 01.01.1970
timCloseHisPos=(datetime)HistoryDealGetInteger(ticket1,DEAL_TIME_MSC);
}
return(timCloseHisPos);
}
//+------------------------------------------------------------------+
 

Good afternoon everyone!

If it's not too much trouble, please correct MQL4 code so that it works in ML5

int init()
   {

         info_init();                                                 // Вызов функции менеджера инициализации вывода информации на экран
         Fun_Label();                                                 // Вызов функции вывода информации на экран (чтобы сразу видно было)
    return(0);                                                        // Выход из init()
   }


int deinit()
   {
         info_deinit();                                               // Удаляем вывод информации на экран из блоков 1 - 8 
    return(0);                                                        // Выход из deinit()
   }


int start()
   {
         Fun_Label();                                                 // Ввод параметров для вывод информации на экран
    return(0);                                                        // Выход из start()
   }




void info_init()
   {
    info_init_1();  info(  0,".",Tan,8); // info( 10,".",Tan,8); info( 20,".",Tan,8); info( 30,".",Tan,8); // Tan - самое короткое название цвета
   }


void info_init_1()
   {
    for(int row = 0; row <= 9; row ++)                                           // row - номер текстовой метки (строки сообщения)
        {             
         info_LabelCreate( StringConcatenate( "InfoLabel_0", row ), 1000, 15 + 15*row ); // Вызов функции _LabelCreate
        }           // Передаются      string _Name, int _XDistance, int _YDistance
    }


void info_LabelCreate(string _Name, int _XDist, int _YDist, int _Corner = 0)       // Координаты: х = _XDist, у = _YDist, угол = _Corner.
   {
    int _GetLastError;

    if (!ObjectCreate(_Name, OBJ_LABEL, 0, 0, 0))          // Объекты с типом OBJ_LABEL игнорируют координаты, поэтому используем функцию ObjectSet()...
        {                                                  // ...  для установки свойств OBJPROP_XDISTANCE, OBJPROP_YDISTANCE и OBJPROP_CORNER
         _GetLastError = GetLastError();
         if (_GetLastError != 4200)                        // 4200 - Объект уже существует
             {
              Print("ObjectCreate(\"", _Name, "\", OBJ_LABEL,0,0,0) - Error #", _GetLastError);
             }
        }

    if (!ObjectSet(_Name, OBJPROP_XDISTANCE, _XDist))      // OBJPROP_XDISTANCE - Дистанция в пикселях по оси X от угла привязки
        {
         _GetLastError = GetLastError();
         Print("ObjectSet( \"", _Name, "\", OBJPROP_XDISTANCE, ", _XDist, ") - Error #", _GetLastError);
        }
    if (!ObjectSet(_Name, OBJPROP_YDISTANCE, _YDist))      // OBJPROP_YDISTANCE - Дистанция в пикселях по оси Y от угла привязки
        {
         _GetLastError = GetLastError();
         Print("ObjectSet( \"", _Name, "\", OBJPROP_YDISTANCE, ", _YDist, ") - Error #", _GetLastError);
        }
    if (!ObjectSet(_Name, OBJPROP_CORNER, _Corner))        // OBJPROP_CORNER - Угол графика для привязки графического объекта
        {
         _GetLastError = GetLastError();
         Print("ObjectSet( \"", _Name, "\", OBJPROP_CORNER, ", _Corner, ") - Error #", _GetLastError);
        }

    if (!ObjectSetText(_Name, "", 10))                     // Задаём размер шрифта (font_size)
        {
         _GetLastError = GetLastError();
         Print("ObjectSetText( \"", _Name, "\", \"\", 10 ) - Error #", _GetLastError);
        }
   }


void info_deinit() // Удаление объектов, созданных функцией info_init() для блоков 1-8 
   {
    int _GetLastError;
    for ( int row = 0; row <= 9; row ++ )
        {

         if ( !ObjectDelete( StringConcatenate( "InfoLabel_0", row ) ) )
             {_GetLastError = GetLastError(); Print( "ObjectDelete( \"", StringConcatenate( "InfoLabel_0", row ), "\" ) - Error #", _GetLastError ); }
        }
   }


void info(int LabelNumber, string Text, color Color = 17000000, double FontSize = -1.0, string Font = "-1")
   {
    //---- определяем имя объекта
    string LabelName;

    if ( LabelNumber <  10 )
         LabelName = StringConcatenate( "InfoLabel_0", LabelNumber );  // Обязательно "0" впереди перед ОДИНОЧНЫМИ цифрами

    color  lastusedColor    = Black;
    double lastusedFontSize = 9.0;
    string lastusedFont     = "Arial";

    //---- если значения дополнительных параметров не задавались, устанавливаем последние используемые значения
    if(Color == 17000000) Color    = lastusedColor;           // 0-чёрный, 16 777 215-белый, 17000000-цвета нет
    if(FontSize < 0)      FontSize = lastusedFontSize;
    if(Font == "-1")      Font     = lastusedFont;

    //---- запоминаем последние используемые значения
    lastusedColor    = Color;
    lastusedFontSize = FontSize;
    lastusedFont     = Font;

    //---- отображаем новый текст
    if(!ObjectSetText(LabelName, Text, FontSize, Font, Color))
        {
         int _GetLastError = GetLastError();
         Print("ObjectSetText( \"", LabelName,"\", \"", Text, "\", ", FontSize, ", ", Font, ", ", Color, " ) - Error #", _GetLastError);
        }
    //---- перерисовываем объекты
    ObjectsRedraw();
   }


void Fun_Label()                                                      // Ввод параметров для вывод информации на экран
   {
    info(  0, "x", Magenta, 8 );
    info(  1, "x", Magenta, 8 );
    info(  2, "x", Magenta, 8 );
    info(  3, "x", Magenta, 8 );
    info(  4, "x", Magenta, 8 );
    info(  5, "x", Magenta, 8 );
    info(  6, "x", Magenta, 8 );
    info(  7, "x", Magenta, 8 );
    info(  8, "x", Magenta, 8 );
    info(  9, "x", Magenta, 8 );
   }
 

Observe unnatural behaviour of the platform.

1. ME5 does not retain the interface settings that were in place when it was switched off. In particular, the settings panel disappears. Can be restored, but it has to be done every time it is switched on.

2. I am making an indicator. Changing indicator settings in MT5 usually leads to a failure: shape of lines changes significantly, colour cannot be changed, etc.
Moreover, if you change settings in a newly installed indicator, everything works as planned.

Issues:

1. is it just me or is it a general problem?
2. If it's something I'm missing or doing wrong, please advise.

 
Comments not related to this topic have been moved to "Questions from MQL4 MT4 MetaTrader 4 beginners".
 
Leo59:

Good afternoon everyone!

If it's not too much trouble, please correct MQL4 code so that it works in ML5

First of all, you need to write the system functions correctly. The easiest way to do it is in MetaEditor 5 menu File - Create - Expert Advisor (template). Compare your code and mine:

//+------------------------------------------------------------------+
//|                                                            1.mq5 |
//|                              Copyright © 2019, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2019, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//--- input parameters
input int      Input1=9;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
When you've corrected it, we'll go on ...
 
Pul-Adgi Mo-UlStan:

Will it work instead of OrderCloseTime()??

My experience in MQL5 is the fourth day, but I've already had my fill!

Bring back the OrderCloseTime() function, this position can be done somehow programmatically.... - order - then trade - then position, or is it so difficult to calculate the position by machine?

What exactly do you want to get? Do you need the time of the last trade(type of trade "market exit")? Or do you want to know the closing time of a position in the trading history?

 
User_mt5:

Observe unnatural behaviour of the platform.

1. ME5 does not retain the interface settings that were in place when it was switched off. In particular, the settings panel disappears. It can be restored, but you have to do it every time you turn it on.


Who is ME? Who is Settings Panel?

 
Vladimir Karputov:

Who is ME? Who is the settings panel?

ME = MetaEditor.

The settings panel, is my caveat. I mean the toolbar with buttons, including Compile.
(I said "settings" out of inertia - it's me with MT5 who is also struggling with the indicator settings panel)

Build 2138 dated 06.09.2019.
 
User_mt5:

ME = MetaEditor.

The settings panel is my caveat. I mean the toolbar, which has buttons, including Compile.
(I said "settings" out of inertia - it's me with MT5 who also bothers with the settings panel of the indicator parameters)

Build 2138 dated 06.09.2019.

Please specify on which equipment this is happening:

Forum on trading, automated trading systems and trading strategy testing

Bugs, bugs, questions

Vladimir Karputov, 2019.07.31 12:12

Specify such data:

copy three lines from "Log" tab (select three lines -> right mouse click -> Copy)


and paste it into your message. You should get something like this:

2019.07.31 11:53:10.681 MetaTrader 5 x64 build 2093 started (MetaQuotes Software Corp.)
2019.07.31 11:53:10.685 Windows 10 (build 18362) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3188 / 8077 Mb, Disk: 99 / 415 Gb, GMT+2
2019.07.31 11:53:10.685 C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

Then describe step by step and with screenshots - what exactly is going on for you.
Reason: