Июн 23

Разработка программ на заказ для торговли на Forex

Несколько слов о разработке мной заказных программ для торговли на Форекс за деньги и бесплатно. Бесплатный исходник торгового робота для всех желающих.
Итак, информация о стоимости разработки программ для торговли на Форекс (советники, индикаторы, скрипты и пр. на MQL4 и MQL5 (платформа MT4 и MT5, соответственно). Обычно индикатор пишу $30-60, советник $100-250. Если не срочно, то пишу и просто так, но тогда ждать, возможно, придется несколько недель или меньше в зависимости от того, насколько много у меня текущих коммерческих заказов. По бесплатным заказам или заказам с низкой стоимостью (т.е. те, на которые небольшую цену ставит сам заказчик) – начинаю первыми делать те, за которые будет хоть какая-то оплата, а потом совсем бесплатные….
Далее в посте еще три пункта: полезная ссылка на страницу ресурса в сети Интернет, где рассматриваются три программы, позволяющих изменять голос в популярной компьютерной игре. Второй пункт – список ошибок обработки ордеров и не только их в программе для терминала МТ4. Последний пункт – информация об исходнике моей программы, открывающей сетку ордеров в обе стороны (советник для терминала МТ4) и о том, как эту программу получить.
Двигаемся в порядке перечисленных пунктов.
Полагаю, что ссылка изменить голос в Counter Strike (КС) будет полезна для игроков популярной игры Counter Strike, также называемой сокращенно КС. Рассмотрено три разных программы, позволяющих модифицировать свой голос в этой популярной онлайн-игре…
Второй пункт привел не только для читателей блога, но и как шпаргалку для себя, так как не все номера ошибок помню, хотя разрабатываю программы для метатерминала (МТ4) не первый год. Наиболее часто встречаемые коды ошибок, возвращаемые торговым сервером или клиентским терминалом, а так же коды ошибок выполнения MQL4 программы.
Код последней произошедшей ошибки можно получить, используя функцию, возвращающую коды ошибок, GetLastError(). Например, k= GetLastError(); if (k==140) {Print(“Разрешена только покупка”); …}
Коды ошибок (значение [номер] и описание), возвращаемые торговым сервером или клиентским терминалом:


0 Нет ошибки
1 Нет ошибки, но результат неизвестен
2 Общая ошибка
3 Неправильные параметры
4 Торговый сервер занят
5 Старая версия клиентского терминала
6 Нет связи с торговым сервером
7 Недостаточно прав
8 Слишком частые запросы
9 Недопустимая операция нарушающая функционирование сервера
64 Счет заблокирован
65 Неправильный номер счета
128 Истек срок ожидания совершения сделки
129 Неправильная цена
130 Неправильные стопы
131 Неправильный объем
132 Рынок закрыт
133 Торговля запрещена
134 Недостаточно денег для совершения операции
135 Цена изменилась
136 Нет цен
137 Брокер занят
138 Новые цены
139 Ордер заблокирован и уже обрабатывается
140 Разрешена только покупка
141 Слишком много запросов
145 Модификация запрещена, так как ордер слишком близок к рынку
146 Подсистема торговли занята
147 Использование даты истечения ордера запрещено брокером
148 Количество открытых и отложенных ордеров достигло предела, установленного брокером.

Коды ошибок (значение [номер] и описание), выполнения MQL4 программы:

4000 Нет ошибки
4001 Неправильный указатель функции
4002 Индекс массива — вне диапазона
4003 Нет памяти для стека функций
4004 Переполнение стека после рекурсивного вызова
4005 На стеке нет памяти для передачи параметров
4006 Нет памяти для строкового параметра
4007 Нет памяти для временной строки
4008 Неинициализированная строка
4009 Неинициализированная строка в массиве
4010 Нет памяти для строкового массива
4011 Слишком длинная строка
4012 Остаток от деления на ноль
4013 Деление на ноль
4014 Неизвестная команда
4015 Неправильный переход
4016 Неинициализированный массив
4017 Вызовы DLL не разрешены
4018 Невозможно загрузить библиотеку
4019 Невозможно вызвать функцию
4020 Вызовы внешних библиотечных функций не разрешены
4021 Недостаточно памяти для строки, возвращаемой из функции
4022 Система занята
4050 Неправильное количество параметров функции
4051 Недопустимое значение параметра функции
4052 Внутренняя ошибка строковой функции
4053 Ошибка массива
4054 Неправильное использование массива-таймсерии
4055 Ошибка пользовательского индикатора
4056 Массивы несовместимы
4057 Ошибка обработки глобальныех переменных
4058 Глобальная переменная не обнаружена
4059 Функция не разрешена в тестовом режиме
4060 Функция не подтверждена
4061 Ошибка отправки почты
4062 Ожидается параметр типа string
4063 Ожидается параметр типа integer
4064 Ожидается параметр типа double
4065 В качестве параметра ожидается массив
4066 Запрошенные исторические данные в состоянии обновления
4067 Ошибка при выполнении торговой операции
4099 Конец файла
4100 Ошибка при работе с файлом
4101 Неправильное имя файла
4102 Слишком много открытых файлов
4103 Невозможно открыть файл
4104 Несовместимый режим доступа к файлу
4105 Ни один ордер не выбран
4106 Неизвестный символ
4107 Неправильный параметр цены для торговой функции
4108 Неверный номер тикета
4109 Торговля не разрешена
4110 Длинные позиции не разрешены
4111 Короткие позиции не разрешены
4200 Объект уже существует
4201 Запрошено неизвестное свойство объекта
4202 Объект не существует
4203 Неизвестный тип объекта
4204 Нет имени объекта
4205 Ошибка координат объекта
4206 Не найдено указанное подокно
4207 Ошибка при работе с объектом

Коды ошибок (константа, код, описание), возвращаемые торговым сервером (информация из справочной системы MT4):


ERR_NO_ERROR 0 Торговая операция прошла успешно.
ERR_NO_RESULT 1 OrderModify пытается изменить уже установленные значения такими же значениями. Необходимо изменить одно или несколько значений и повторить попытку.
ERR_COMMON_ERROR 2 Общая ошибка. Прекратить все попытки торговых операций до выяснения обстоятельств. Возможно перезагрузить операционную систему и клиентский терминал.
ERR_INVALID_TRADE_PARAMETERS 3 В торговую функцию переданы неправильные параметры, например, неправильный символ, неопознанная торговая операция, отрицательное допустимое отклонение цены, несуществующий номер тикета и т.п. Необходимо изменить логику программы.
ERR_SERVER_BUSY 4 Торговый сервер занят. Можно повторить попытку через достаточно большой промежуток времени (от нескольких минут).
ERR_OLD_VERSION 5 Старая версия клиентского терминала. Необходимо установить последнюю версию клиентского терминала.
ERR_NO_CONNECTION 6 Нет связи с торговым сервером. Необходимо убедиться, что связь не нарушена (например, при помощи функции IsConnected) и через небольшой промежуток времени (от 5 секунд) повторить попытку.
ERR_TOO_FREQUENT_REQUESTS 8 Слишком частые запросы. Необходимо уменьшить частоту запросов, изменить логику программы.
ERR_ACCOUNT_DISABLED 64 Счет заблокирован. Необходимо прекратить все попытки торговых операций.
ERR_INVALID_ACCOUNT 65 Неправильный номер счета. Необходимо прекратить все попытки торговых операций.
ERR_TRADE_TIMEOUT 128 Истек срок ожидания совершения сделки. Прежде, чем производить повторную попытку (не менее, чем через 1 минуту), необходимо убедиться, что торговая операция действительно не прошла (новая позиция не была открыта, либо существующий ордер не был изменён или удалён, либо существующая позиция не была закрыта)
ERR_INVALID_PRICE 129 Неправильная цена bid или ask, возможно, ненормализованная цена. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.
ERR_INVALID_STOPS 130 Слишком близкие стопы или неправильно рассчитанные или ненормализованные цены в стопах (или в цене открытия отложенного ордера). Попытку можно повторять только в том случае, если ошибка произошла из-за устаревания цены. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.
ERR_INVALID_TRADE_VOLUME 131 Неправильный объем, ошибка в грануляции объема. Необходимо прекратить все попытки торговых операций и изменить логику программы.
ERR_MARKET_CLOSED 132 Рынок закрыт. Можно повторить попытку через достаточно большой промежуток времени (от нескольких минут).
ERR_TRADE_DISABLED 133 Торговля запрещена. Необходимо прекратить все попытки торговых операций.
ERR_NOT_ENOUGH_MONEY 134 Недостаточно денег для совершения операции. Повторять сделку с теми же параметрами нельзя. Попытку можно повторить после задержки от 5 секунд, уменьшив объем, но надо быть уверенным в достаточности средств для совершения операции.
ERR_PRICE_CHANGED 135 Цена изменилась. Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку.
ERR_OFF_QUOTES 136 Нет цен. Брокер по какой-то причине (например, в начале сессии цен нет, неподтвержденные цены, быстрый рынок) не дал цен или отказал. Необходимо после задержки от 5 секунд обновить данные при помощи функции RefreshRates и повторить попытку.
ERR_REQUOTE 138 Запрошенная цена устарела, либо перепутаны bid и ask. Можно без задержки обновить данные при помощи функции RefreshRates и повторить попытку. Если ошибка не исчезает, необходимо прекратить все попытки торговых операций и изменить логику программы.
ERR_ORDER_LOCKED 139 Ордер заблокирован и уже обрабатывается. Необходимо прекратить все попытки торговых операций и изменить логику программы.
ERR_LONG_POSITIONS_ONLY_ALLOWED 140 Разрешена только покупка. Повторять операцию SELL нельзя.
ERR_TOO_MANY_REQUESTS 141 Слишком много запросов. Необходимо уменьшить частоту запросов, изменить логику программы.
142 Ордер поставлен в очередь. Это не ошибка, а один из кодов взаимодействия между клиентским терминалом и торговым сервером. Этот код может быть получен в редком случае, когда во время выполнения торговой операции произошёл обрыв и последующее восстановление связи. Необходимо обрабатывать так же как и ошибку 128.
143 Ордер принят дилером к исполнению. Один из кодов взаимодействия между клиентским терминалом и торговым сервером. Может возникнуть по той же причине, что и код 142. Необходимо обрабатывать так же как и ошибку 128.
144 Ордер аннулирован самим клиентом при ручном подтверждении сделки. Один из кодов взаимодействия между клиентским терминалом и торговым сервером.
ERR_TRADE_MODIFY_DENIED 145 Модификация запрещена, так как ордер слишком близок к рынку и заблокирован из-за возможного скорого исполнения. Можно не ранее, чем через 15 секунд, обновить данные при помощи функции RefreshRates и повторить попытку.
ERR_TRADE_CONTEXT_BUSY 146 Подсистема торговли занята. Повторить попытку только после того, как функция IsTradeContextBusy вернет FALSE.
ERR_TRADE_EXPIRATION_DENIED 147 Использование даты истечения ордера запрещено брокером. Операцию можно повторить только в том случае, если обнулить параметр expiration.
ERR_TRADE_TOO_MANY_ORDERS 148 Количество открытых и отложенных ордеров достигло предела, установленного брокером. Новые открытые позиции и отложенные ордера возможны только после закрытия или удаления существующих позиций или ордеров.
ERR_TRADE_HEDGE_PROHIBITED 149 Попытка открыть противоположную позицию к уже существующей в случае, если хеджирование запрещено. Сначала необходимо закрыть существующую противоположную позицию, либо отказаться от всех попыток таких торговых операций, либо изменить логику программы.
ERR_TRADE_PROHIBITED_BY_FIFO 150 Попытка закрыть позицию по инструменту в противоречии с правилом FIFO. Сначала необходимо закрыть более ранние существующие позиции по данному инструменту, либо отказаться от всех попыток таких торговых операций, либо изменить логику программы.

Информация по третьему пункту. Версия Fx-Grid 1.00-free (свободно распространяемая от 23 июня 2013 г). Распространяется в виде исходного текста, модификация и изменения. разрешены. Можно использовать весь код или его фрагменты для разработки собственных программ. Вместо большого СПАСИБО лучше маленькая благодарность, но в виде реальной суммы, перечисленной на любые реквизиты списка:
http://www.mctrewards.ru/platezhnye-rekvizity
Использование реквизитов Яндекс.Деньги предпочтительно.
Программа может выставлять сетку ордеров в две стороны (выше и ниже) от заданного значения уровня. Число ордеров задается. Можно только на продажу, покупку или сразу и на продажу и на покупку.
Фрагмент программы с информацией о задаваемых переменных:

extern int KOD = ‘A’; // A – ордера на покупку и на продажу; S – только на продажу; B – только на покупку
extern double Lot = 0.1; // Значение лота
extern double SL=0; // Значение стоп-лосс и шаг сетки
extern double TP=15; // Значение тайк-профит
extern int MN = 54321; // Идентификационный номер (magic number)
extern int R=15; // Число пар ордеров выставляемых выше и ниже стартового уровня
extern double step=15; // Шаг выставления ордеров
extern double uroven = 1.3325; // Стартовый уровень
extern double delta = 2; // Для того, чтобы ордер на покупку и продажу открылись одновременно
extern double pogr = 3; // Погрешность оценки уже выставленного ордера в процессе выставления нового ордера
// например, нужно было выставить ордер на уровень 1.3150 и отложенный ордер был выставлен, но реально ордер был открыт
// ДЦ на 1.3152. При осуществления контроля проверяем не точно есть или нет ордер на 1.3150, выставленный советником, а есть ли
// ордер открытый в интервале 1.3150-pogr<=Order<=1.3150+pogr, т.е. в интервале [1.3147,1,3153], если такой ордер стоит, то
// новый не выставляем. pogr = 0 – ставить строго по равно, без учета отклонений.
// для счетов с фиксированным спредом величина задает величину спреда
double punkt; // коррекция размера пункта для пятизначных и трехзначных счетов.
double u_max, u_min; // максимальный и минимальный уровень
double t_uroven ; // уровень текущий на продажу, уровень на покупку uroven + delta;

Исходник программы высылается по запросу. Пишите…


На этом на сегодня все. Успехов, удачи, всех благ.
И.В.

Поделитесь статьей со своими друзьями
Общайтесь со мной:
comments: Closed

Comments are closed.