Что именно Вы хотите получить? Вам нужно время последней СДЕЛКИ (тип СДЕЛКИ "выход с рынка")? Или нужно знать время закрытия какой-то там ПОЗИЦИИ в торговой истории?
Нужно знать время последней закрытой позиции в торговой истории.
Тот код написанный будет работать в MQL5?, хотя я подключил библиотеку fxsaber работает код мт4, но все же вопрос остался, не ужели нельзя сделать функцию OrderCloseTime() в MQL5?, кстати та функция которую я выложил рабочая вроде... Хотя с такими граблями я лучше откажусь от нее. Вопрос скорее к разработчикам. Отвечать не обязательно, я читал историю в ветке думаю мало кто то сможет ответить на этот вопрос. Многие вещи пока не понятны, со временем возможно пересмотрю свои взгляды на язык MQL5.
Нужно знать время последней закрытой позиции в торговой истории.
Тот код написанный будет работать в MQL5?, хотя я подключил библиотеку fxsaber работает код мт4, но все же вопрос остался, не ужели нельзя сделать функцию OrderCloseTime() в MQL5?, кстати та функция которую я выложил рабочая вроде... Хотя с такими граблями я лучше откажусь от нее. Вопрос скорее к разработчикам. Отвечать не обязательно, я читал историю в ветке думаю мало кто то сможет ответить на этот вопрос. Многие вещи пока не понятны, со временем возможно пересмотрю свои взгляды на язык MQL5.
Всё просто. Нужно только сначала почитать, затем уже делать выводы :)
Нужно знать время последней закрытой позиции в торговой истории.
Тот код написанный будет работать в MQL5?, хотя я подключил библиотеку fxsaber работает код мт4, но все же вопрос остался, не ужели нельзя сделать функцию OrderCloseTime() в MQL5?, кстати та функция которую я выложил рабочая вроде... Хотя с такими граблями я лучше откажусь от нее. Вопрос скорее к разработчикам. Отвечать не обязательно, я читал историю в ветке думаю мало кто то сможет ответить на этот вопрос. Многие вещи пока не понятны, со временем возможно пересмотрю свои взгляды на язык MQL5.
Используйте очень простой способ (тем более, что на хедж счетах в 99% сделка с типом "выход из рынка" - это и есть закрытие позиции).
Онлайн отлавливайте транзакцию TRADE_TRANSACTION_DEAL_ADD – добавление сделки в историю, проверяете чтобы это была сделка или BUY или SELL, проверяете чтобы это была сделка "выход из рынка" DEAL_ENTRY_OUT
//+------------------------------------------------------------------+//| TradeTransaction function |//+------------------------------------------------------------------+voidOnTradeTransaction(constMqlTradeTransaction &trans,
constMqlTradeRequest &request,
constMqlTradeResult &result)
{
//--- get transaction type as enumeration valueENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- if transaction is result of addition of the transaction in historyif(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);
}
elsereturn;
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)
{
*** ***
}
}
}
}
}
Сгенерировал простенький советник с помощью Мастера 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 expertinputstring Expert_Title ="EA_MB_MasterMQL5"; // Document nameulong Expert_MagicNumber =1473; //bool Expert_EveryTick =false; ////--- inputs for main signalinputint Signal_ThresholdOpen =0; // Signal threshold value to open [0...100]inputint Signal_ThresholdClose =0; // Signal threshold value to close [0...100]inputdouble Signal_PriceLevel =0.0; // Price level to execute a dealinputdouble Signal_StopLevel =50.0; // Stop Loss level (in points)inputdouble Signal_TakeLevel =50.0; // Take Profit level (in points)inputint Signal_Expiration =4; // Expiration of pending orders (in bars)inputint Signal_ITF_GoodHourOfDay=-1; // IntradayTimeFilter(-1,...) Good hourinputint Signal_ITF_BadHoursOfDay=8389119; // IntradayTimeFilter(-1,...) Bad hours (bit-map)inputint Signal_ITF_GoodDayOfWeek=-1; // IntradayTimeFilter(-1,...) Good day of weekinputint Signal_ITF_BadDaysOfWeek=0; // IntradayTimeFilter(-1,...) Bad days of week (bit-map)inputdouble Signal_ITF_Weight =1.0; // IntradayTimeFilter(-1,...) Weight [0...1.0]//--- inputs for moneyinputdouble Money_FixRisk_Percent =10.0; // Risk percentage//+------------------------------------------------------------------+//| Global expert object |//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+//| Initialization function of the expert |//+------------------------------------------------------------------+intOnInit()
{
//--- Initializing expertif(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
{
//--- failedprintf(__FUNCTION__+": error initializing expert");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Creating signal
CExpertSignal *signal=new CExpertSignal;
if(signal==NULL)
{
//--- failedprintf(__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)
{
//--- failedprintf(__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)
{
//--- failedprintf(__FUNCTION__+": error creating trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add trailing to expert (will be deleted automatically))if(!ExtExpert.InitTrailing(trailing))
{
//--- failedprintf(__FUNCTION__+": error initializing trailing");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set trailing parameters//--- Creation of money object
CMoneyFixedRisk *money=new CMoneyFixedRisk;
if(money==NULL)
{
//--- failedprintf(__FUNCTION__+": error creating money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Add money to expert (will be deleted automatically))if(!ExtExpert.InitMoney(money))
{
//--- failedprintf(__FUNCTION__+": error initializing money");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Set money parameters
money.Percent(Money_FixRisk_Percent);
//--- Check all trading objects parametersif(!ExtExpert.ValidationSettings())
{
//--- failed
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- Tuning of all necessary indicatorsif(!ExtExpert.InitIndicators())
{
//--- failedprintf(__FUNCTION__+": error initializing indicators");
ExtExpert.Deinit();
return(INIT_FAILED);
}
//--- okreturn(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Deinitialization function of the expert |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
{
ExtExpert.Deinit();
}
//+------------------------------------------------------------------+//| "Tick" event handler function |//+------------------------------------------------------------------+voidOnTick()
{
ExtExpert.OnTick();
}
//+------------------------------------------------------------------+//| "Trade" event handler function |//+------------------------------------------------------------------+voidOnTrade()
{
ExtExpert.OnTrade();
}
//+------------------------------------------------------------------+//| "Timer" event handler function |//+------------------------------------------------------------------+voidOnTimer()
{
ExtExpert.OnTimer();
}
//+------------------------------------------------------------------+
Похоже, что этот модуль сигналов (<Expert\Signal\SignalITF.mqh>) нельзя применять самостоятельно, так как он всегда выдаёт результат.
Как поступить: сгенерируйте советник на базе другого модуля торговых сигналов (например iMA или iMACD) и посмотрите как будут вести себя отложенные ордера.
Похоже, что этот модуль сигналов (<Expert\Signal\SignalITF.mqh>) нельзя применять самостоятельно, так как он всегда выдаёт результат.
Как поступить: сгенерируйте советник на базе другого модуля торговых сигналов (например iMA или iMACD) и посмотрите как будут вести себя отложенные ордера.
Похоже, что этот модуль сигналов (<Expert\Signal\SignalITF.mqh>) нельзя применять самостоятельно, так как он всегда выдаёт результат.
Как поступить: сгенерируйте советник на базе другого модуля торговых сигналов (например iMA или iMACD) и посмотрите как будут вести себя отложенные ордера.
Да, Владимир, Вы были правы, с добавлением iMA функция "Expiration of pending orders (in bars)" стала работать. Ещё раз спасибо!
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Что именно Вы хотите получить? Вам нужно время последней СДЕЛКИ (тип СДЕЛКИ "выход с рынка")? Или нужно знать время закрытия какой-то там ПОЗИЦИИ в торговой истории?
Нужно знать время последней закрытой позиции в торговой истории.
Тот код написанный будет работать в MQL5?, хотя я подключил библиотеку fxsaber работает код мт4, но все же вопрос остался, не ужели нельзя сделать функцию OrderCloseTime() в MQL5?, кстати та функция которую я выложил рабочая вроде... Хотя с такими граблями я лучше откажусь от нее. Вопрос скорее к разработчикам. Отвечать не обязательно, я читал историю в ветке думаю мало кто то сможет ответить на этот вопрос. Многие вещи пока не понятны, со временем возможно пересмотрю свои взгляды на язык MQL5.
Нужно знать время последней закрытой позиции в торговой истории.
Тот код написанный будет работать в MQL5?, хотя я подключил библиотеку fxsaber работает код мт4, но все же вопрос остался, не ужели нельзя сделать функцию OrderCloseTime() в MQL5?, кстати та функция которую я выложил рабочая вроде... Хотя с такими граблями я лучше откажусь от нее. Вопрос скорее к разработчикам. Отвечать не обязательно, я читал историю в ветке думаю мало кто то сможет ответить на этот вопрос. Многие вещи пока не понятны, со временем возможно пересмотрю свои взгляды на язык MQL5.
Всё просто. Нужно только сначала почитать, затем уже делать выводы :)
Нужно знать время последней закрытой позиции в торговой истории.
Тот код написанный будет работать в MQL5?, хотя я подключил библиотеку fxsaber работает код мт4, но все же вопрос остался, не ужели нельзя сделать функцию OrderCloseTime() в MQL5?, кстати та функция которую я выложил рабочая вроде... Хотя с такими граблями я лучше откажусь от нее. Вопрос скорее к разработчикам. Отвечать не обязательно, я читал историю в ветке думаю мало кто то сможет ответить на этот вопрос. Многие вещи пока не понятны, со временем возможно пересмотрю свои взгляды на язык MQL5.
Используйте очень простой способ (тем более, что на хедж счетах в 99% сделка с типом "выход из рынка" - это и есть закрытие позиции).
Онлайн отлавливайте транзакцию TRADE_TRANSACTION_DEAL_ADD – добавление сделки в историю, проверяете чтобы это была сделка или BUY или SELL, проверяете чтобы это была сделка "выход из рынка" 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.
С уважением, Владимир.
Вам уже отвечали. Зачем повторяете вопрос?
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих MQL5 MT5 MetaTrader 5
Сергей Таболин, 2019.09.10 10:04
Вам уже отвечали. Зачем повторяете вопрос?
Здравствуйте, Сергей!
Кто ответил?
С уважением, Владимир.
Ещё несколько раз внимательно просмотрел все сообщения, размещенные после моего вопроса, но нигде не увидел ответа.
С уважением, Владимир.
Похоже, что этот модуль сигналов (<Expert\Signal\SignalITF.mqh>) нельзя применять самостоятельно, так как он всегда выдаёт результат.
Как поступить: сгенерируйте советник на базе другого модуля торговых сигналов (например iMA или iMACD) и посмотрите как будут вести себя отложенные ордера.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих MQL5 MT5 MetaTrader 5
Vladimir Karputov, 2019.09.10 11:44
Похоже, что этот модуль сигналов (<Expert\Signal\SignalITF.mqh>) нельзя применять самостоятельно, так как он всегда выдаёт результат.
Как поступить: сгенерируйте советник на базе другого модуля торговых сигналов (например iMA или iMACD) и посмотрите как будут вести себя отложенные ордера.
Спасибо, Владимир, за совет!
С уважением, Владимир.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопросы от начинающих MQL5 MT5 MetaTrader 5
Vladimir Karputov, 2019.09.10 11:44
Похоже, что этот модуль сигналов (<Expert\Signal\SignalITF.mqh>) нельзя применять самостоятельно, так как он всегда выдаёт результат.
Как поступить: сгенерируйте советник на базе другого модуля торговых сигналов (например iMA или iMACD) и посмотрите как будут вести себя отложенные ордера.
Да, Владимир, Вы были правы, с добавлением iMA функция "Expiration of pending orders (in bars)" стала работать. Ещё раз спасибо!
С уважением, Владимир.