Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 223
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день. Пожалуйста помогите начинающему трейдеру в поиске подходящего советника для автоматизированной торговли, который способен открывать локированные ордера в валютных парах с возможностью произвольной установки тейк-профитов. Спасибо вам.
Как вариант: объявите во всех из них метод Type в котором возвращайте идентификатор типа.
Хех, если бы можно было править исходники... Не надо все так упрощать. А все-таки - есть ли на mql5 узнать имя класса???
Хех, если бы можно было править исходники... Не надо все так упрощать. А все-таки - есть ли на mql5 узнать имя класса???
Смотрите в сторону шаблонов. Этот код вернет имя класса или примитивного типа.
#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnStart()
{
//---
CTrade trade;
double d_value=M_PI;
int i_value=INT_MAX;
Print("d_value: type=",GetTypeName(d_value), ", value=", d_value);
Print("i_value: type=",GetTypeName(i_value), ", value=", i_value);
Print("trade: type=",GetTypeName(trade));
//---
}
//+------------------------------------------------------------------+
//| Возвращает в строковом виде тип |
//+------------------------------------------------------------------+
template<typename T>
string GetTypeName(const T &t)
{
//--- вернем тип в виде строки
return(typename(T));
//---
}
Смотрите в сторону шаблонов. Этот код вернет имя класса или примитивного типа.
#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnStart()
{
//---
CTrade trade;
double d_value=M_PI;
int i_value=INT_MAX;
Print("d_value: type=",GetTypeName(d_value), ", value=", d_value);
Print("i_value: type=",GetTypeName(i_value), ", value=", i_value);
Print("trade: type=",GetTypeName(trade));
//---
}
//+------------------------------------------------------------------+
//| Возвращает в строковом виде тип |
//+------------------------------------------------------------------+
template<typename T>
string GetTypeName(const T &t)
{
//--- вернем тип в виде строки
return(typename(T));
//---
}
Во! Ужу что-то! Но с new не работает - в коде пример, чего мне нужно - может кто подскажет какие способы?
Во! Ужу что-то! Но с new не работает - в коде пример, чего мне нужно - может кто подскажет какие способы?
Кто-нибудь может мне объяснить почему приведенный код не работает в тестере, в то время как в реал-тайм он работает!!? Конкретно интересует, почему в тестере после HistorySelect(0, TimeCurrent()) не доступны свойства HistoryOrderGetInteger...
Скриншот в тестере стратегий:
Скриншот в реал-тайм на демо:
p.s. Что интересно, первый ордер в тестере обрабатывается корректно, а остальные уже нет. И еще, если расскоментировать HistroryOrderSelect(ticketOrder) то в реал-тайм начнет вываливаться соообщение что ордер не был выбран, а в тестере стратегий наоборот, все начнет работать, за исключением первого ордера.
И у меня какая-то проблема с HistorySelect(). Открываю скриптом позицию отправкой маркет-ордера, и если сделка открылась, тут же смотрю количество сделок в истории с момента запуска скрипта, причём проверяю его 10 раз с интервалом в секунду. Должна быть, понятное дело, одна сделка. Вот скрипт:
А вот результат в Альфа-форекс:
Сделка реально совершена, а в истории её нет даже через 10 секунд. Что это? Баг МТ? Глюк Альфы? Какая-то фича, которую я не знаю? У Альпари этот же скрипт работает нормально, только изредка на первом (нулевом) шаге проскакивает ноль (ну, это понятно - не успела ещё обновиться история), все остальные шаги - единица. Но через десять-то секунд почему нет сделки в истории?
И у меня какая-то проблема с HistorySelect(). Открываю скриптом позицию отправкой маркет-ордера, и если сделка открылась, тут же смотрю количество сделок в истории с момента запуска скрипта, причём проверяю его 10 раз с интервалом в секунду. Должна быть, понятное дело, одна сделка. Вот скрипт:
А вот результат у Альфа-брокера:
Сделка реально совершена, а в истории её нет даже через 10 секунд. Что это? Баг МТ? Глюк Альфы? Какая-то фича, которую я не знаю? У Альпари этот же скрипт работает нормально, только изредка на первом (нулевом) шаге проскакивает ноль (ну, это понятно - не успела ещё обновиться история), все остальные шаги - единица. Но через десять-то секунд почему нет сделки в истории?
Напрягает строка
datetime dtStartTime = TimeCurrent();
Вы уверены что dtStartTime и TimeCurrent() не одно и тоже число к моменту for? Возможно округление в одну секунду выставляет совершенную сделку за пределы dtStartTime.
Напрягает строка
datetime dtStartTime = TimeCurrent();
Вы уверены что dtStartTime и TimeCurrent() не одно и тоже число к моменту for? Возможно округление в одну секунду выставляет совершенную сделку за пределы dtStartTime.
А даже если одно, разве МТ не должен выдать историю за эту секунду? Т.е. разве он не выдаёт историю в указанных границах, ВКЛЮЧАЯ сами границы?
Но в любом случае, я пробовал писать и dtStartTime = TimeCurrent() - 1, и dtStartTime = TimeCurrent() - 10. Не помогает.