Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1122

 

2019.09.09 18:03:27.865    Terminal    MetaTrader 5 x64 build 2138 started (MetaQuotes Software Corp.)
2019.09.09 18:03:27.866    Terminal    Windows 10 (build 18362) x64, IE 11, UAC, Intel Core i7-3770K  @ 3.50GHz, Memory: 20544 / 24520 Mb, Disk: 145 / 237 Gb, GMT+2
2019.09.09 18:03:27.866    Terminal    C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

Обычный вид моего МЕ:

Настроенный МЕ

После работы я его закрываю, от способа закрытия ничего не зависит.
При последующем открытии МЕ предстаёт в таком виде:

Ненастроенный МЕ

Вид - Панели инструментов можно всё настроить.

После выключения всё повторяется.


Билд
 
User_mt5:

2019.09.09 18:03:27.865    Terminal    MetaTrader 5 x64 build 2138 started (MetaQuotes Software Corp.)
2019.09.09 18:03:27.866    Terminal    Windows 10 (build 18362) x64, IE 11, UAC, Intel Core i7-3770K  @ 3.50GHz, Memory: 20544 / 24520 Mb, Disk: 145 / 237 Gb, GMT+2
2019.09.09 18:03:27.866    Terminal    C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

Обычный вид моего МЕ:

После работы я его закрываю, от способа закрытия ничего не зависит.
При последующем открытии МЕ предстаёт в таком виде:

Вид - Панели инструментов можно всё настроить.

После выключения всё повторяется.


А теперь нажмите F12

 
User_mt5:

2019.09.09 18:03:27.865    Terminal    MetaTrader 5 x64 build 2138 started (MetaQuotes Software Corp.)
2019.09.09 18:03:27.866    Terminal    Windows 10 (build 18362) x64, IE 11, UAC, Intel Core i7-3770K  @ 3.50GHz, Memory: 20544 / 24520 Mb, Disk: 145 / 237 Gb, GMT+2
2019.09.09 18:03:27.866    Terminal    C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

Обычный вид моего МЕ:

После работы я его закрываю, от способа закрытия ничего не зависит.
При последующем открытии МЕ предстаёт в таком виде:

Вид - Панели инструментов можно всё настроить.

После выключения всё повторяется.


Попробуйте открыть папку Data Folder в ней перейти в \config, закрыть терминал и редактор MetaEditor, удалить файл metaeditor.ini

 
Artyom Trishkin:

А теперь нажмите F12

Это сработало.

Большое спасибо.

 
Vladimir Karputov:

Попробуйте открыть папку Data Folder в ней перейти в \config, закрыть терминал и редактор MetaEditor, удалить файл metaeditor.ini

Сработало  F12, так что больше ничего не требуется.

Спасибо за помощь.

 
User_mt5:

Сработало  F12, так что больше ничего не требуется.

Спасибо за помощь.

Ух ты. А я и не знал про F12 (развернуть на весь экран) для редактора MetaEditor 5!

 
Vladimir Karputov:

Что именно Вы хотите получить? Вам нужно время последней СДЕЛКИ (тип СДЕЛКИ "выход с рынка")? Или нужно знать время закрытия какой-то там ПОЗИЦИИ в торговой истории?

Нужно знать время последней закрытой позиции в торговой истории.

Тот код написанный будет работать в MQL5?, хотя я подключил библиотеку fxsaber работает код мт4, но все же вопрос остался, не ужели нельзя сделать функцию  OrderCloseTime() в MQL5?, кстати та функция которую я выложил рабочая вроде... Хотя с такими граблями я лучше откажусь от нее. Вопрос скорее к разработчикам. Отвечать не обязательно, я читал историю в ветке думаю мало кто то сможет ответить на этот вопрос. Многие вещи пока не понятны, со временем возможно пересмотрю свои взгляды на язык MQL5.

 
Pul-Adgi Mo-UlStan:

Нужно знать время последней закрытой позиции в торговой истории.

Тот код написанный будет работать в MQL5?, хотя я подключил библиотеку fxsaber работает код мт4, но все же вопрос остался, не ужели нельзя сделать функцию  OrderCloseTime() в MQL5?, кстати та функция которую я выложил рабочая вроде... Хотя с такими граблями я лучше откажусь от нее. Вопрос скорее к разработчикам. Отвечать не обязательно, я читал историю в ветке думаю мало кто то сможет ответить на этот вопрос. Многие вещи пока не понятны, со временем возможно пересмотрю свои взгляды на язык MQL5.

Всё просто. Нужно только сначала почитать, затем уже делать выводы :)

 
Pul-Adgi Mo-UlStan:

Нужно знать время последней закрытой позиции в торговой истории.

Тот код написанный будет работать в MQL5?, хотя я подключил библиотеку fxsaber работает код мт4, но все же вопрос остался, не ужели нельзя сделать функцию  OrderCloseTime() в MQL5?, кстати та функция которую я выложил рабочая вроде... Хотя с такими граблями я лучше откажусь от нее. Вопрос скорее к разработчикам. Отвечать не обязательно, я читал историю в ветке думаю мало кто то сможет ответить на этот вопрос. Многие вещи пока не понятны, со временем возможно пересмотрю свои взгляды на язык MQL5.

Используйте очень простой способ (тем более, что на хедж счетах в 99% сделка с типом "выход из рынка" - это и есть закрытие позиции).

Онлайн отлавливайте транзакцию TRADE_TRANSACTION_DEAL_ADD – добавление сделки в историю, проверяете чтобы это была сделка или BUY или SELL, проверяете чтобы это была сделка "выход из рынка" DEAL_ENTRY_OUT 

//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- get transaction type as enumeration value
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in history
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_ticket       =0;
      long     deal_order        =0;
      long     deal_time         =0;
      long     deal_time_msc     =0;
      long     deal_type         =-1;
      long     deal_entry        =-1;
      long     deal_magic        =0;
      long     deal_reason       =-1;
      long     deal_position_id  =0;
      double   deal_volume       =0.0;
      double   deal_price        =0.0;
      double   deal_commission   =0.0;
      double   deal_swap         =0.0;
      double   deal_profit       =0.0;
      string   deal_symbol       ="";
      string   deal_comment      ="";
      string   deal_external_id  ="";
      if(HistoryDealSelect(trans.deal))
        {
         deal_ticket       =HistoryDealGetInteger(trans.deal,DEAL_TICKET);
         deal_order        =HistoryDealGetInteger(trans.deal,DEAL_ORDER);
         deal_time         =HistoryDealGetInteger(trans.deal,DEAL_TIME);
         deal_time_msc     =HistoryDealGetInteger(trans.deal,DEAL_TIME_MSC);
         deal_type         =HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_entry        =HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_magic        =HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_reason       =HistoryDealGetInteger(trans.deal,DEAL_REASON);
         deal_position_id  =HistoryDealGetInteger(trans.deal,DEAL_POSITION_ID);

         deal_volume       =HistoryDealGetDouble(trans.deal,DEAL_VOLUME);
         deal_price        =HistoryDealGetDouble(trans.deal,DEAL_PRICE);
         deal_commission   =HistoryDealGetDouble(trans.deal,DEAL_COMMISSION);
         deal_swap         =HistoryDealGetDouble(trans.deal,DEAL_SWAP);
         deal_profit       =HistoryDealGetDouble(trans.deal,DEAL_PROFIT);

         deal_symbol       =HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_comment      =HistoryDealGetString(trans.deal,DEAL_COMMENT);
         deal_external_id  =HistoryDealGetString(trans.deal,DEAL_EXTERNAL_ID);
        }
      else
         return;
      ENUM_DEAL_ENTRY enum_deal_entry=(ENUM_DEAL_ENTRY)deal_entry;
      if(deal_symbol==ИМЯ ВАШЕГО СИМВОЛА && deal_magic==НОМЕР ВАШЕГО MAGIC)
        {
         if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
           {
            if(deal_entry==DEAL_ENTRY_OUT)
              {
               *** ***
              }
           }
        }
     }
  }
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопросы от начинающих MQL5 MT5 MetaTrader 5

MrBrooklin, 2019.09.09 09:50

Всем доброго дня и большого профита!

Сгенерировал простенький советник с помощью Мастера VQL5, код приведу ниже. Помогите разобраться, почему не работает функция "Expiration of pending orders (in bars)", переводится как "Срок действия отложенных ордеров (в барах)". Устанавливаю любые значения Signal_Expiration от 1 до 1000, но все-равно отложенный ордер существует только в течении одного бара. Настройки параметров также прикладываю.

Для тестирования использую Демо-счет терминала Метатрейдер 5, build 2136.

С уважением, Владимир.

//+------------------------------------------------------------------+
//|                                                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();
  }
//+------------------------------------------------------------------+

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