Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Перегрузка функций
Написано, казалось бы, много. Но непонятно, как самостоятельно создать перегруженную функцию. Необходимо, например, создать перегруженную функцию со своими типами данных.
Например, создаем структуру:
struct timeseries
{
datetime time;
double high;
double low;
};
А в чём проблема? Просто побробуйте написать свою функцию CopyRates со своим собственным набором параметров, отличающимся от уже существующих.
Но я бы не рекомендовал Вам использование имён предопределённых системных функций, во избежание трудноуловимых багов.
А в чём проблема? Просто побробуйте написать свою функцию CopyRates со своим собственным набором параметров, отличающимся от уже существующих.
Да не проблема. Получается примерно такое:
struct timeseries
{
datetime time;
double high;
double low;
};
timeseries ts[];
ArrayResize(ts,hQuantityBar);
double hHA[];
double hLA[];
datetime hTA[];
int i;
CopyHigh(Symbol(),PERIOD_M1,hTimeBar1,hQuantityBar,hHA);
CopyLow(Symbol(),PERIOD_M1,hTimeBar1,hQuantityBar,hLA);
CopyTime(Symbol(),PERIOD_M1,hTimeBar1,hQuantityBar,hTA);
for (i=0;i<hQuantityBar;i++)
{
ts[i].high=hHA[i];
ts[i].low=hLA[i];
ts[i].time=hTA[i];
}
Функция CopyRates производит копирование за один проход.
А в приведенном коде имеем три прохода для копирования трех таймсерий в промежуточные массивы.
Плюс один проход при копировании из промежуточных массивов в нужную структуру.
Итого - полученная функция работает, как минимум, в 4 раза медленнее плюс требуются дополнительные массивы с соответствующим отведением памяти под эти массивы. Такая перегрузка не устраивает.
Можно копировать вместо трех массивов в промежуточный массив типа MqlRates. Но опять же имеем дело с промежуточным массивом.
========
Еще здесь необходимо задействовать функцию SeriesInfoInteger. Но эта функция выдает лонги, которые не преобразовываются во время. Поэтому не стал применять функцию SeriesInfoInteger в приведенном коде, как недоработанную.... И, как результат, получили нерабочий код. Без SeriesInfoInteger грамотно (без ошибки) не скопируешь, а SeriesInfoInteger не работает ...
Справка обновлена:
Явно не хватает, либо не нашел, возвращение обьма сделки когда
инстант (возможно и маркет) переходит на исполнение по запросу.
Анализируйте код ответа сервера - "Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера", и смотрите объем у возвращенной сделки "Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса "
Описание полей
Поле
Описание
retcode
Код возврата торгового сервера
deal
Тикет сделки, если она совершена. Сообщается при торговой операции TRADE_ACTION_MARKET
order
Тикет ордера, если он выставлен. Сообщается при торговой операции TRADE_ACTION_PENDING
volume
Объем сделки, подтверждённый брокером. Зависит от типа ордера по исполнению
price
Цена в сделке, подтверждённая брокером. Зависит от поля deviation в торговом запросе и/или от типа торговой операции
bid
Текущая рыночная цена предложения (цены реквоты)
ask
Текущая рыночная цена спроса (цены реквоты)
comment
Комментарий брокера к операции (по умолчанию заполняется расшифровкой)
reserved[128]
Зарезервировано для будущего использования
Анализируйте код ответа сервера - "Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера", и смотрите объем у возвращенной сделки "Стандартные константы, перечисления и структуры / Структуры данных / Структура результата торгового запроса "
Вы несколько меня не поняли...
Мне важно знать среди прочего, на каком обьёме начнется запрос, например 10 лот и выше.
Эта инфа выставляется сервером, а значится можно её знать наравне с мини. или максилотом.
Вот тут, три варианта функции под одним именем - совершенно органично и понятно.Меня тоже поначалу это смутило, но только поначалу...
На самом деле всё проще простого. Весь смысл как использовать функцию.
Если функция должна что изменить, то достаточно знать от неё выполнено или нет - булл.
А если должна вернуть результат, то и возвращает по типу значения...
Вот зачем у SeriesInfoInteger есть часть Integer? на самом деле возвращается или long или bool.... Где здесь ясность и понятность...
А там еще два параметра, все-таки, должны возвращаться как datetime, а не long.