Разве публиковался такой скрипт? Попробуйте подправить DealToString, обсудим. А то мне непонятно совсем, о чем идет речь.
Ладно. Не публиковался.
Публиковался другой.
voidOnStart()
{
Print(SymbolToString());
}
Ну мыж не лохи какие то, по аналогии делать умеем. А тут подстава такая нарисовалась, по аналогии не работает. Не хорошо.
А если серьёзно, то я не понимаю как правильно использовать ваш код для того, чтоб распечатать все поля сделки.
На примере конкретной задачи. Допустим мы в советнике сохранили тикет сделки и через какое то время, нам нужно распечатать, всё , что связано с этой сделкой.
HistoryDealSelect сама напрашивается для этого, а вы говорите, что так делать моветон. А как тогда будет не моветон?
//+------------------------------------------------------------------+//| Prints the account specification to the Experts tab. |//+------------------------------------------------------------------+void PrintAccount()
{
if(AccountInfoInteger(ACCOUNT_LOGIN))
{
PROPERTIES1(AccountInfoInteger,ENUM_ACCOUNT_INFO_INTEGER);
PROPERTIES1(AccountInfoDouble,ENUM_ACCOUNT_INFO_DOUBLE);
PROPERTIES1(AccountInfoString,ENUM_ACCOUNT_INFO_STRING);
}
}
Информация о терминале:
//+------------------------------------------------------------------+//| Prints the terminal properties to the Experts tab. |//+------------------------------------------------------------------+void PrintTerminal()
{
if(TerminalInfoString(TERMINAL_COMPANY)!="")
{
PROPERTIES1(TerminalInfoInteger,ENUM_TERMINAL_INFO_INTEGER);
PROPERTIES1(TerminalInfoDouble,ENUM_TERMINAL_INFO_DOUBLE);
PROPERTIES1(TerminalInfoString,ENUM_TERMINAL_INFO_STRING);
}
}
Информация о графике:
//+------------------------------------------------------------------+//| Prints the chart properties to the Experts tab. |//+------------------------------------------------------------------+void PrintChart(constlong chart_id) // 0 means the current chart
{
if(ChartSymbol(chart_id)!="")
{
PROPERTIES2(ChartGetInteger,chart_id,ENUM_CHART_PROPERTY_INTEGER);
PROPERTIES2(ChartGetDouble,chart_id,ENUM_CHART_PROPERTY_DOUBLE);
PROPERTIES2(ChartGetString,chart_id,ENUM_CHART_PROPERTY_STRING);
}
}
Информация о символах:
//+------------------------------------------------------------------+//| Prints the symbol specification to the Experts tab. |//+------------------------------------------------------------------+void PrintSymbol(conststring symbol)
{
Print(Symbol(),", ",SymbolInfoString(Symbol(),SYMBOL_DESCRIPTION));
if(SymbolSelect(symbol,true))
{
PROPERTIES2(SymbolInfoInteger,symbol,ENUM_SYMBOL_INFO_INTEGER);
PROPERTIES2(SymbolInfoDouble,symbol,ENUM_SYMBOL_INFO_DOUBLE);
PROPERTIES2(SymbolInfoString,symbol,ENUM_SYMBOL_INFO_STRING);
}
}
Позиции и сделки:
//+------------------------------------------------------------------+//| Prints the position properties to the Experts tab. |//+------------------------------------------------------------------+void PrintPosition(constulong pos_ticket)
{
if(PositionSelectByTicket(pos_ticket))
{
PROPERTIES1(PositionGetInteger,ENUM_POSITION_PROPERTY_INTEGER);
PROPERTIES1(PositionGetDouble,ENUM_POSITION_PROPERTY_DOUBLE);
PROPERTIES1(PositionGetString,ENUM_POSITION_PROPERTY_STRING);
}
}
//+------------------------------------------------------------------+//| Prints the history deal properties to the Experts tab. |//+------------------------------------------------------------------+void PrintDeal(constulong deal_ticket)
{
if(HistoryDealSelect(deal_ticket))
{
PROPERTIES2(HistoryDealGetInteger,deal_ticket,ENUM_DEAL_PROPERTY_INTEGER);
PROPERTIES2(HistoryDealGetDouble,deal_ticket,ENUM_DEAL_PROPERTY_DOUBLE);
PROPERTIES2(HistoryDealGetString,deal_ticket,ENUM_DEAL_PROPERTY_STRING);
}
}
Ордера:
//+------------------------------------------------------------------+//| Prints the order properties to the Experts tab. |//+------------------------------------------------------------------+void PrintOrder(constulong order_ticket)
{
if(OrderSelect(order_ticket))
{
PROPERTIES1(OrderGetInteger,ENUM_ORDER_PROPERTY_INTEGER);
PROPERTIES1(OrderGetDouble,ENUM_ORDER_PROPERTY_DOUBLE);
PROPERTIES1(OrderGetString,ENUM_ORDER_PROPERTY_STRING);
}
}
//+------------------------------------------------------------------+//| Prints the history order properties to the Experts tab. |//+------------------------------------------------------------------+void PrintHistoryOrder(constulong order_ticket)
{
if(HistoryOrderSelect(order_ticket))
{
PROPERTIES2(HistoryOrderGetInteger,order_ticket,ENUM_ORDER_PROPERTY_INTEGER);
PROPERTIES2(HistoryOrderGetDouble,order_ticket,ENUM_ORDER_PROPERTY_DOUBLE);
PROPERTIES2(HistoryOrderGetString,order_ticket,ENUM_ORDER_PROPERTY_STRING);
}
}
//+------------------------------------------------------------------+//| Prints the history deal properties to the Experts tab. |//+------------------------------------------------------------------+void PrintDeal(constulong deal_ticket)
{
if(HistoryDealSelect(deal_ticket))
{
PROPERTIES2(HistoryDealGetInteger,deal_ticket,ENUM_DEAL_PROPERTY_INTEGER);
PROPERTIES2(HistoryDealGetDouble,deal_ticket,ENUM_DEAL_PROPERTY_DOUBLE);
PROPERTIES2(HistoryDealGetString,deal_ticket,ENUM_DEAL_PROPERTY_STRING);
}
}
//+------------------------------------------------------------------+//| Prints the history order properties to the Experts tab. |//+------------------------------------------------------------------+void PrintHistoryOrder(constulong order_ticket)
{
if(HistoryOrderSelect(order_ticket))
{
PROPERTIES2(HistoryOrderGetInteger,order_ticket,ENUM_ORDER_PROPERTY_INTEGER);
PROPERTIES2(HistoryOrderGetDouble,order_ticket,ENUM_ORDER_PROPERTY_DOUBLE);
PROPERTIES2(HistoryOrderGetString,order_ticket,ENUM_ORDER_PROPERTY_STRING);
}
}
Максимум, что можно вставить в функцию, но не рекомендовал бы так делать.
if (HistoryDealGetInteger(Ticket, DEAL_TICKET) != Ticket)HistoryDealSelect(Ticket);
Пример порочности.
voidOnStart()
{
if (HistorySelect(0, INT_MAX))
{
constint Total = HistoryDealsTotal();
for (int i = MathMax(Total - 5, 0); i < Total; i++)
PrintDeal(HistoryDealGetTicket(i));
}
}
// Все свойства сделки в строку. string DealToString( const long Ticket )
С и без HistoryDealSelect( Ticket ) разные результаты, проверил.
С и без HistoryDealSelect( Ticket ) разные результаты, проверил.
Помещение сделки в доступную таблицу истории и распечатывание свойств сделки - функционалы, которые не пересекаются.
Помещение сделки в доступную таблицу истории и распечатывание свойств сделки - функционалы, которые не пересекаются.
Запускаю скрипт без HistoryDealSelect()
Добавляю HistoryDealSelect() и запускаю скрипт
Запускаю скрипт без HistoryDealSelect()
Добавляю HistoryDealSelect() и запускаю скрипт
Худшее, что можно сделать в функции распечатки сделки, это поместить в нее HistoryDealSelect.
Худшее, что можно сделать в функции распечатки сделки, это поместить в нее HistoryDealSelect.
А что вы предлагаете?
Довольствоваться в распечатке нулями?
В таком виде скрипт распечатывает нули
Если раскомментировать HistoryDealSelect, то распечатывает все поля правильно.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
Aleksandr Slavskii, 2025.02.13 13:18
В таком виде скрипт распечатывает нули
Если раскомментировать HistoryDealSelect, то распечатывает все поля правильно.
Разве публиковался такой скрипт? Попробуйте подправить DealToString, обсудим. А то мне непонятно совсем, о чем идет речь.
Разве публиковался такой скрипт? Попробуйте подправить DealToString, обсудим. А то мне непонятно совсем, о чем идет речь.
Ладно. Не публиковался.
Публиковался другой.
Ну мыж не лохи какие то, по аналогии делать умеем. А тут подстава такая нарисовалась, по аналогии не работает. Не хорошо.
А если серьёзно, то я не понимаю как правильно использовать ваш код для того, чтоб распечатать все поля сделки.
На примере конкретной задачи. Допустим мы в советнике сохранили тикет сделки и через какое то время, нам нужно распечатать, всё , что связано с этой сделкой.
HistoryDealSelect сама напрашивается для этого, а вы говорите, что так делать моветон. А как тогда будет не моветон?как тогда будет не моветон?
Как в скрипте выше.
Максимум, что можно вставить в функцию, но не рекомендовал бы так делать.
Иногда необходимо просмотреть все свойства символа, графика, позиции, ордера, исторической сделки/ордера и т.д.
Существует множество значений свойств, которые можно добавлять, удалять и т. д.
Вот моя попытка использовать эти 2 маленьких макроса:
Получение тонны информации из платформы:
Информация о терминале:
Информация о графике:
Информация о символах:
Позиции и сделки:
Ордера:
Печать перечислений:
Тестовый скрипт:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
amrali, 2025.02.14 05:37
Сделали ровно то, о чем предупреждал.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2025.02.13 13:08
Худшее, что можно сделать в функции распечатки сделки, это поместить в нее HistoryDealSelect.
Даже так делать не стали.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2025.02.13 14:35
Максимум, что можно вставить в функцию, но не рекомендовал бы так делать.
Пример порочности.
Архитектура.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2025.02.13 10:23
Помещение сделки в доступную таблицу истории и распечатывание свойств сделки - функционалы, которые не пересекаются.