
Использование JSON Data API в MQL-проектах
Введение и предыстория
Сочетание внешних данных может улучшить процесс принятия решений в алготорговле. API позволяют передавать данные между различными системами и помогают трейдерам получать доступ к различным источникам данных, например рыночным данным в реальном времени от других брокеров и банков, к экономическим индикаторам, а не только экономическим календарям, к анализу новостей и социальных настроений, онлайн-инструментам искусственного интеллекта, онлайн-системам прогнозирования или к чему угодно, что только можно вообразить и что доступно в API-службах. В этой статье мы покажем, как использовать этот инструмент наилучшим образом.
Использование данных API в советниках (EA) может дать новое и более глубокое понимание рынка трейдинга, которое будет способствовать принятию обоснованных решений, созданию более динамичных торговых стратегий и более эффективному управлению рисками. С помощью данных API трейдеры могут повысить точность торговых сигналов, применяя передовые технические индикаторы и сложные графические инструменты. Подобная интеграция расширяет возможности таких платформ, как MetaTrader, и обеспечивает доступ к таким ценным средствам рыночной аналитики, как обработка текстов на естественном языке (NLP) для анализа рыночных настроений, и к фундаментальным данным и новостям.
Знакомство с Ziwox API
Ziwox — система анализа данных на рынке Форекс, содержащая бесплатные API-сервисы. API обеспечивает трейдеров подробной информацией о рынке, включая цены, технические индикаторы, анализ настроений и фундаментальные данные. Он поддерживает основные и второстепенные валютные пары и обеспечивает важные показатели, такие как фундаментальный уклон, прогнозы на базе ИИ, статистика розничных трейдеров, отчеты COT, технические поддержка и сопротивление, рыночные настроение ("склонность к риску", "неприятие риска"), доходность облигаций и индекс VIX. Этот содержательный набор данных позволяет проводить многосторонний анализ рынка, сочетая технические, фундаментальные и аналитические данные для создания революционных инструментов.
Здесь интересно, что наряду с ценовыми и техническими данными мы получим доступ к данным, сгенерированным искусственным интеллектом или реальными аналитиками. Некоторые из них включали в себя: фундаментальный анализ валютных пар, проводимый группой аналитиков, результаты работы системы обработки естественного языка (NLP) как настроения на рынке новостей Форекс и прогноз цен, сделанный ИИ.
API прост в применении: для генерации его ключа и доступа к данным в текстовом или JSON-формате достаточно просто зарегистрироваться. Такая доступность наряду с большим охватом данных делает его неоценимым инструментом повышения качества торговых стратегий и разработки пользовательских индикаторов или автоматизированных торговых систем.
Узнаем немного больше о том, что такое API.
API — механизмы, позволяющие двум программным компонентам взаимодействовать с помощью набора определений и протоколов. Например, программный комплекс метеослужбы содержит ежедневные данные о погоде. Приложение "Погода" на телефоне "общается" с этой системой через API и показывает на экране ежедневные новости о погоде.
API — аббревиатура от Application Programming Interface (интерфейс прикладного программирования). Интерфейс можно рассматривать как договор обслуживания между двумя приложениями. Этот договор определяет способы их взаимодействия с помощью запросов и ответов. В их API-документации есть информация о том, как разработчики структурируют эти запросы и ответы.
Архитектуру API обычно описывают с позиций "клиент — сервер". Программу, отправляющую запрос, называют клиентом, а отправляющую ответ — сервером. Так, в примере с погодой база данных — это сервер, а мобильное приложение — клиент.
Форматы ответов API:
Есть разные форматы ответов или обмена данными API. Формат может меняться в зависимости от цели создания API и того, с какими еще Приложениями он связан.Эти ответы могут быть в формате стандартов JSON, HTML, TEXT, XML или CSV.
Краткое знакомство с этой стандартной моделью:
1. JSON: JSON — легкий, понятный человеку формат обмена данных, благодаря простоте и гибкости используемый в ответах API. Он представляет данные в виде пар "ключ-значение", что облегчает их анализ и обработку на разных языках программирования.
Пример ответа в формате JSON:
"id": 5687,
"source": "oanda",
"symbol": "EURUSD",
"price": "1.08562",
"high": "1.09211",
"low": "1.08154"
}
2. XML: XML (eXtensible Markup Language, расширяемый язык разметки) — еще один широко распространенный формат представления структурированных данных в ответах API. В отличие от JSON, XML для определения иерархических структур данных использует теги, обеспечивая более точное, но структурированное представление. Это похоже на теги HTML в веб-дизайне и веб-структурах. Хотя формат JSON предпочтительнее из-за его простоты и удобочитаемости, XML сохраняет актуальность в некоторых областях, например в корпоративных системах и при традиционных интеграциях.
Пример XML в API новостей Forex Factory:
<title>German Trade Balance</title>
<country>EUR</country>
<![CDATA[ 07-07-2024 ]]> </date>
<![CDATA[ 8:30am ]]>
</time>
<forecast><![CDATA[ 19.9B ]]></forecast>
<previous><![CDATA[ 22.1B ]]></previous>
<url>
<![CDATA[ https://www.forexfactory.com/calendar/125-eur-german-trade-balance ]]>
</url>
3. Другие форматы: Наряду с JSON и XML, API могут использовать другие форматы ответов, например неформатированный текст, HTM, буферы протоколов или файл CSV, в зависимости от предметно-ориентированных требований и соглашений. У каждого формата есть свои преимущества и сферы применения, от эффективности и производительности до удобочитаемости и адаптивности.
Формат JSON приобрел популярность в веб-разработке благодаря своей простоте, удобочитаемости и легкости в использовании. К счастью, рассматриваемый сервис тоже использует для обмена данными эту модель.
Настройка окружения и разработка
Чтобы настроить окружение на MQL5 для использования интерфейсов API в формате JSON, нужно выполнить несколько шагов.
MQL5 — язык программирования для создания торговых роботов, технических индикаторов, скриптов и библиотек функций для торговой платформы MetaTrader 5.
Вот общее руководство по настройке окружения для работы с интерфейсами API в формате JSON на MQL5:
- Понимание основ MQL5. Убедитесь, что хорошо понимаете основы языка программирования MQL5, а также базовые концепции трейдинга и финансовых рынков. Ознакомьтесь с Документацией MQL4 и Српавочником MQL5,чтобы освоить синтаксис и функции языка.
- Выберите библиотеку JSON. MQL5 не имеет встроенной поддержки парсинга JSON, поэтому придется использовать стороннюю библиотеку. Эти библиотеки можно найти на таких форумах, как MQL5 Community или GitHub. JSON Serialization и JSON Parser.
- Скачайте и установите библиотеку JSON. Загрузите выбранную библиотеку JSON и следуйте предоставленным библиотекой инструкциям по установке. Обычно это предполагает размещение файла библиотеки (mqh или mq5) в папке Include установки MetaTrader.
- Добавьте библиотеку в свой код. С помощью директивы #include включите библиотеку JSON в начало своего MQL-скрипта или советника (Expert Advisor):
- Выполните HTTP-запросы. Для взаимодействия с API в JSON понадобится сделать HTTP-запросы. Популярные варианты: WinHTTP или WebRequest. Если вам нужен другой тип использования HTTP, загрузите и включите библиотеку HTTP в соответствии со своими потребностями.
- Сохраните ответ HTTP в файл. Поскольку большинство таких API ограничены по количеству запросов и это ограничение может вас беспокоить, лучше сохранять запрошенные данные в файл и использовать наш сохраненный файл вместо неоднократных ненужных запросов.
- Выполните анализ (парсинг) ответов JSON. Получив ответ от API, воспользуйтесь библиотекой JSON для парсинга данных JSON. Конкретный синтаксис будет зависеть от используемой библиотеки.
- Комбинирование. После классификации данных JSON можно комбинировать нужные данные со своей программой в соответствии с их моделью, стратегией или типом.
//Use this type of file include if the file is in MQL include follder #include <JAson.mqh> // Use this type of file include If this file is next to your EA file/follder #include "JAson.mqh"
Инструкция для кода функций API
Язык MQL5 предлагает функцию WebRequest для HTTP-запросов, позволяя взаимодействовать с API.
Подробнее о документации Webrequest > Webrequest и Обмен данными HTTP
Ниже — пример MQL-кода для запроса данных JSON из адреса API с использованием метода GET:
// Required variables string cookie=NULL, headers="", apikey="your api key", value1="value 1", value2="value 2"; char post[],result[]; int res; string URL = "https://www.example.com/API?apikey="+apikey+"&data1=value1&data2="+value2; // Rest API address ResetLastError(); // Reset ast error // HTTP request via MQL Webrequest, GET method with apikey, value1, and value2 and 2000 millisecond timeout res=WebRequest("GET", URL, cookie, NULL, 2000, post, 0, result, headers); if(res==-1) // WebRequest error handling { int error = GetLastError(); if(error==4060) Print("Webrequest Error ",error); else if(error==5203) Print("HTTP request failed!"); else Print("Unknow HTTP request error("+string(error)+")! "); LastHTTPError=error; } else if (res==200) // The HTTP 200 status response code indicates that the request has succeeded { Print("HTTP request successful!"); // Use CharArrayToString to convert HTTP result array to a string string HTTP_Result = CharArrayToString(result, 0, 0, CP_UTF8); Print(HTTP_Result); }
Этот код отправляет запрос GET на указанный URL-адрес API, демонстрируя простоту интеграции вызовов API в MQL4.
Пример применения. Успешный советник на MQL4 с доступом к данным API
Как использовать API данных валютных рынков Ziwox для создания системы автоматической торговли с помощью фундаментальных данных и данных прогнозов ИИ в реальном времени
В этой статье мы рассмотрим способы использования API данных валютных рынков Ziwox для разработки инструментов на основе фундаментальных данных и данных в реальном времени на языке MetaQuotes Language (MQL). Об их API много информации, но мы выбрали для своего проекта Прогноз ИИ.
Согласно Ziwox, система прогнозирования на базе ИИ в их терминале основана на агрегации таких данных, как новости, сведения из экономического календаря, процентные ставки и их изменения, денежная и экономическая политика центральных банков, рыночные настроения, устойчивости валют на рынке, данные о вовлеченности трейдеров и информация о розничных трейдерах. В результате происходит анализ всего рынка, и этот прогноз можно использовать как ценные данные.
Рассмотрим процессы получения данных API, сохранения данных JSON в файл, парсинга ответов JSON и использования этой информации для создания автоматического советника.
Наш план: создать советник, использовать простую стратегию на основе скользящих средних в качестве технического сигнала и торговать, если прогноз ИИ находится в нашем направлении как ИИ-фильтр.
Сделаем все, что в наших силах.
Шаг 1. Регистрация и генерация ключа API
Чтобы приступить к использованию Ziwox Forex Data API, выполните следующие действия:
1. Зарегистрируйтесь в терминале Ziwox ЗДЕСЬ
2. Заполните форму своими данными, ознакомьтесь с условиями и политикой, примите их, нажмите на “Я не робот” и затем на “Создать новую учетную запись”.
3. На ваш почтовый ящик отправлено письмо для подтверждения. Подтвердите свой электронный адрес.
3. Войдите в свою учетную запись здесь, перейдите на страницу профиля и вкладку API здесь и сгенерируйте свой ключ API, кликнув на зеленой кнопке Generate
4. Теперь, сгенерировав ключ API, вы получаете доступ к данным API Ziwox. Скопируйте этот сгенерированный код API для использования в нашем проекте.
Шаг 2. Понимание структуры API
Структура ссылки API следующая:
https://ziwox.com/terminal/services/API/V1/fulldata.php?expn=ziwoxuser&apikey={API_KEY}&apitype={REQUEST_TYPE}&pair={PAIR}
- {API_KEY} — ваш уникальный ключ API из последнего шага
- {REQUEST_TYPE} — формат ответа, JSON или текстовый.
- {PAIR} — желаемая валютная пара в стандартном формате, без префикса или суффикса, например EURUSD, USDJPY, GBPUSD, XAUUSD, WTI…
Шаг 3. Проверка структуры вашего API
Теперь нам нужно проверить структуру ссылок API и запросить у Ziwox API образец. Просто используйте ссылку API из шага 2, отредактируйте параметры, указав свои, откройте браузер, введите ссылку API в адресной строке и нажмите на ввод.
При правильном редактировании ссылки API в ответе HTTP увидим следующее:
Для неправильного ключа API вы получите следующий ответ об ошибке:
{
"status": "error",
"desc": "invalid api key"
}
или, если вы неправильно введете имя актива, можно увидеть такой ответ:
{
"status": "error",
"desc": "invalid asset name!!"
}
Шаг 4. Реализовать функцию HTTP запроса API
При успешном выполнении шага 3 мы готовы реализовать функцию для автоматизации этой части. Проверьте этот код:
datetime LastWebRequest = 0; // use this datetime var for limit failed request API bool GetAPI(string symbolname, string apikey, string filename) { Print("Get API Update"); bool NeedToUpdate = false; // Check if the API data file available if(FileGetInteger(filename,FILE_EXISTS,true)>=0) { // Check the latest update time from file modify date time if(TimeLocal()-(datetime)FileGetInteger(filename,FILE_MODIFY_DATE,true)>900) // update data every 15 min becasue of API call rate limitation NeedToUpdate = true; } else NeedToUpdate = true; if(NeedToUpdate && TimeLocal()-LastWebRequest>300) // retry failed API request every 5 min to avoid firewall IP block { string cookie=NULL,headers; char post[],result[]; int res; string URL = "https://www.ziwox.com/terminal/services/API/V1/fulldata.php?expn=ziwoxuser&apikey="+apikey+"&apitype=json&pair="+symbolname; ResetLastError(); int timeout=5000; res=WebRequest("GET", URL, cookie, NULL, timeout, post, 0, result, headers); if(res==-1) { LastWebRequest = TimeLocal(); int error = GetLastError(); if(error==4060) Print("API data Webrequest Error ",error, " Check your webrequest on Metatrader Expert option."); else if(error==5203) Print("HTTP request for "+symbolname+" Data failed!"); else Print("Unknow HTTP request error("+string(error)+")! "+symbolname+" Data"); return(false); } else if(res==200) { LastWebRequest = TimeLocal(); string HTTPString = CharArrayToString(result, 0, 0, CP_UTF8); Print("HTTP request for "+symbolname+" Data successful!"); Print(HTTPString); if (StringFind(HTTPString,"invalid api key",0)!=-1) { Alert("invalid api key"); return(false); } // Store the API data into a common folder file int filehandle=FileOpen(filename,FILE_READ|FILE_SHARE_READ|FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN|FILE_COMMON); if(filehandle!=INVALID_HANDLE) { FileWriteArray(filehandle,result,0,ArraySize(result)); FileClose(filehandle); } } } return(true); }
В качестве вводных данных от вас эта функция принимает ключ аутентификации API (apikey), название актива (symbolname) и имя файла (filename). Для подготовки ссылки запроса API она встраивает "apikey" и "symbolname" в URL-адрес.
Затем она использует функцию Webrequest для выполнения HTTP-запроса, примерно как на предыдущем шаге, и, наконец, получает ответ от сервера и помещает соответствующую информацию ф файл с именем "filename".
Вызовем функцию API следующим образом:
string APIfilename = symbolname+"_API_Data.json"; // API store file name string APIKey = "76thfd67a6f867df7"; // Our unic API Key, change it with your API Key string SymbolRequest = "EURUSD"; // Symbol request, without prefix or suffix string APIJSON[]; bool APIGET = GetAPI(SymbolRequest, APIKey, APIfilename);
Шаг 5. Парсинг данных JSON
Как вы помните из шага 3, полученные от API данные содержат массив данных. Полную характеристику этих данных можно видеть в таблице ниже.
Имя объекта JSON | Тип данных | Описание |
---|---|---|
Символ | string | Возвращает то же имя актива или символа |
Цена Last | буфера | Цена Last актива |
цифры | буфера | Цифры стоимости актива |
База | string | Базовое название пары |
Котировка | string | Котировочное название пары |
Базовый фундаментальный сдвиг | string | Фундаментальный сдвиг или фундаментальный прогноз базовой валюты. Он может быть бычьим или медвежьим |
Базовая фундаментальная мощность | string | Базовая фундаментальная мощность сдвига. Может быть слабой (Week), умеренной (Moderate) и сильной (Strong) |
Фундаментальный сдвиг котировки | string | Фундаментальный сдвиг или фундаментальный прогноз валюты котировки. Может быть бычьим или медвежьим |
Фундаментальная мощность котировки | string | Базовая фундаментальная мощность сдвига котировки. Может быть слабой (Week), умеренной (Moderate) и сильной (Strong) |
Фундаментальный сдвиг | string | Фундаментальный сдвиг актива или долгосрочный фундаментальный прогноз активов. Бычий или медвежий |
Фундаментальная мощность | string | Фундаментальная мощность актива. Слабая (Weak), умеренная (Moderate) или сильная (Strong) |
Фундаментальный стимул | string | То же, что и фундаментальный сдвиг актива. Это число, если оно равно 50, тренд нейтральный, выше 50 — бычий, а ниже 50 — медвежий |
Бычий прогноз ИИ | Проценты | Пррогноз бычьего движения стоимости актива. Чем больше число, тем более бычий тренд |
Медвежий прогноз ИИ | Проценты | Прогноз медвежьего движения стоимости актива. Чем больше число, тем более медвежий тренд |
Розничное соотношение Long | Проценты | Процент розничных трейдеров, торгующих Long |
Розничный лот Long | буфера | Лот Long у розничных трейдеров (объем ордеров) |
Розничные длинные позиции | буфера | Количество позиций Long у розничных трейдеров |
Розничное соотношение Short | Проценты | Процент розничных трейдеров, торгующих Short |
Розничный лот Short | буфера | Лот Short у розничных трейдеров (объем ордеров) |
Розничные короткие позиции | буфера | Количество позиций Short у розничных трейдеров |
Базовые COT NET | буфера | Чистая позиция COT базовой валюты |
Изменение базовой COT | буфера | Изменения (еженедельные) чистой позиции COT базовой валюты |
COT NET котировки | буфера | Чистая позиция COT валюты котировки |
Изменение COT котировки | буфера | Изменения (еженедельные) чистой позиции COT валюты котировки |
Коэффициент COT chng | буфера | Коэффициент изменения чистых позиций крупных спекулянтов. Положительное число = настроения Long, отрицательное число = настроения Short |
Настроения в оценке рисков | string | Настроения рынка в оценке рисков: склонность к риску (Risk-ON), неприятие риска (Risk-OFF) или индифференцированная оценка (MIX) |
Тренд D1 | string | Технические данные, дневной тренд, тренд покупки или продажи |
D1 RSI | буфера | Данные индикатора, дневное значение индикатора RSI |
D1 Stoch | буфера | Данные индикатора, дневное значение индикатора Stochastic |
cci | числа | Значения индикатора CCI и |
сигнал cci | string | Сигнал индикатора CCI |
поддержки | числа | Уровни поддержки актива |
сопротивление | числа | Уровни сопротивления актива |
пивот | числа | Точка или уровни разворота актива |
Значение VIX | буфера | Значение индекса волатильности, VIX |
Направление VIX | буфера | Направление настроений VIX: вверх = страх и рискованный рынок, вниз = жадный рынок |
Стимул VIX к покупке | буфера | Положительное число = жадный рынок |
Стимул VIX к продаже | буфера | Отрицательное число = страх и рискованный рынок |
Базовая облигация | буфера | Значение доходности облигации базовой валюты |
Изм. базовой облигации | буфера | Изменение доходности облигации базовой валюты |
Облигация котировки | буфера | Значение доходности облигации валюты котировки |
Изм. облигации котировки | буфера | Изменение доходности облигации в валюте котировки |
US10Y | буфера | Значение доходности 10-летних облигаций США |
Изм. US10Y | буфера | Изменение значения H1 US10Y |
Стимул доходности | буфера | Положительное число в пользу базовой валюты, отрицательное в пользу валюты котировки |
Разрешить торговлю | булевы | Предложение Ziwox: торговать или лучше прекратить торговлю |
Причина остановки | Строка | Если предлагается не торговать, то причину можно увидеть здесь. |
riskriversal | буфера | Значение разворота риска для этого актива. Определить значение PUT/CALL |
cesi | буфера | Значение CESI |
yielddiff | буфера | Доходность базовой валюты - Доходность валюты котировки |
banksposition | буфера | Соотношение позиций банковских учреждений |
macrofundamental | буфера | Макроэкономическое значение: положительное число означает фактор бычьего тренда для актива, а отрицательное — медвежьего |
longtermsentiment | буфера | Долгосрочные настроения в отношении актива, основанные на экономике, политике и т. д. |
seasonal | Проценты | Возможность роста или снижения актива в соответствии с сезонными данными |
В этом примере мы хотим использовать медвежий или бычий прогноз ИИ. Теперь для разработки этой функции прочтем данные, сохраненные в файле (шаг 4) библиотекой JSON, и извлечем то, что нужно.
Функция будет примерно такой:
#include "JAson.mqh" // include the JSON librery in our project CJAVal JsonValue; void JsonDataParse(string filename, string &_APIJSON[]) { bool UpdateData = false; for (int arraIn=0; arraIn<ArraySize(APIJSON); arraIn++) APIJSON[arraIn]=""; if(FileGetInteger(filename,FILE_EXISTS,true)>=0) { int FileHandle =FileOpen(filename,FILE_READ|FILE_SHARE_READ|FILE_WRITE|FILE_SHARE_WRITE|FILE_BIN|FILE_COMMON); char jsonarray[]; FileReadArray(FileHandle,jsonarray); FileClose(FileHandle); JsonValue.Clear(); JsonValue.Deserialize(CharArrayToString(jsonarray, 0, 0, CP_UTF8)); _APIJSON[0] = JsonValue[0]["Symbol"].ToStr(); _APIJSON[1] = JsonValue[0]["Fundamental Bias"].ToStr(); _APIJSON[2] = JsonValue[0]["Fundamental Power"].ToStr(); _APIJSON[3] = JsonValue[0]["AI Bullish Forecast"].ToStr(); _APIJSON[4] = JsonValue[0]["AI Bearish Forecast"].ToStr(); _APIJSON[5] = JsonValue[0]["Retail Long Ratio"].ToStr(); _APIJSON[6] = JsonValue[0]["Retail Short Ratio"].ToStr(); _APIJSON[7] = JsonValue[0]["Retail Short Lot"].ToStr(); _APIJSON[8] = JsonValue[0]["Retail Short pos"].ToStr(); _APIJSON[9] = JsonValue[0]["Base COT NET"].ToStr(); _APIJSON[10] = JsonValue[0]["Base COT change"].ToStr(); _APIJSON[11] = JsonValue[0]["Quote COT NET"].ToStr(); _APIJSON[12] = JsonValue[0]["Quote COT change"].ToStr(); _APIJSON[13] = JsonValue[0]["COT chng Ratio"].ToStr(); _APIJSON[14] = JsonValue[0]["Risk Sentiment"].ToStr(); } }
И вызовем функцию JSON примерно так:
string APIfilename = symbolname+"_API_Data.json"; // API store file name string API_DATA[]; // define an array variable to store API details JsonDataParse( APIfilename,API_DATA);
Шаг 6. Создание простой стратегии пересечения скользящих средних
Используя извлеченные данные, сохраненные в переменной “APIJSON”, теперь можно создавать стратегии автотрейдинга и комбинировать нашу стратегию с системой прогнозирования на основе ИИ. Вот базовый пример использования данных в советнике:
Можете выбрать любую стратегию по своему вкусу. Но в этой статье мы попытаемся выбрать простую, потому что наша цель в данном случае — направить и обучить вас способам использования такого инструмента в собственных проектах, чтобы сделать их на шаг лучше.
Стратегия пересечения скользящих средних — популярный метод, который трейдеры используют для определения потенциальных сигналов о покупке и продаже.
Эта стратегия использует два скользящих средних. Краткосрочное и долгосрочное для определения рыночного тренда.
Когда краткосрочное скользящее среднее пересекает снизу вверх долгосрочное, это — сигнал к покупке, а когда пересекает сверху вниз — к продаже.
Займемся этим:
shortMA = iMA(Symbol(), 0, shortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0); longMA = iMA(Symbol(), 0, longMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0); // Check for crossover signals if ( int(APIJSON[3])>=60 ) // if bullish forecast is higher than 60% if (shortMA > longMA) // BUY trend { if (OrdersTotal() == 0) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy Order", 0, 0, Green); if (ticket < 0) Print("Error opening buy order: ", GetLastError()); } } if ( int(APIJSON[4])>=60 ) // if bearish forecast is higher than 60% if (shortMA < longMA) // Sell trend { if (OrdersTotal() == 0) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell Order", 0, 0, Red); if (ticket < 0) Print("Error opening sell order: ", GetLastError()); } }
Шаг 7. Использование данных JSON для фильтрации сигналов
Для улучшения стратегии пересечения скользящих средних используем данные JSON, а для фильтрации сигналов — коэффициент прогнозирования ИИ из API Ziwox.
Например, если пересечение скользящих средних показывает тренд к покупке, а прогноз ИИ превышает 50%, что указывает на бычье (восходящее) движение, будет неплохо войти в позицию покупки. Напротив, если технический анализ (MA) дает сигнал на продажу, продаем только в том случае, если аналитические и прогнозные данные совпадают по направлению с сигналом продажи. Таким образом можно снизить риск входа и повысить вероятность успешной торговли
Опираясь на организованные на шаге 4 данные JSON, прогноз ИИ, процент быков находится в 3-м (третьем) элементе нашего массива, а медвежий прогноз — в четвертом элементе.
Код может выглядеть так:
void OnTick() { if (!APIOK) return; double shortMA, longMA; long ticket = -1; if(IsNewCandle()) { shortMA = iMA(Symbol(), 0, shortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0); longMA = iMA(Symbol(), 0, longMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0); // Check for crossover signals if ( int(APIJSON[3])>=60 ) // if bullish forecast is higher than 60% if (shortMA > longMA) // BUY trend { if (OrdersTotal() == 0) { ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, 3, 0, 0, "Buy Order", 0, 0, Green); if (ticket < 0) Print("Error opening buy order: ", GetLastError()); } } if ( int(APIJSON[4])>=60 ) // if bearish forecast is higher than 60% if (shortMA < longMA) // Sell trend { if (OrdersTotal() == 0) { ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, 3, 0, 0, "Sell Order", 0, 0, Red); if (ticket < 0) Print("Error opening sell order: ", GetLastError()); } } } }
Заключение
Интеграция данных API с MQL4 позволяет трейдерам создавать более адаптивные и управляемые данными советники. Используя информацию из внешних источников в режиме реального времени, трейдеры могут совершенствовать свои стратегии и принимать более обоснованные торговые решения в постоянно меняющихся условиях рынка. Можно получить доступ к данным, выходящим за рамки необработанных рыночных цен. Такой подход позволяет сочетать технический и фундаментальный анализ, повышая эффективность торговых стратегий.
Ниже — окончательный код, готовый к загрузке.
Буду рад ответить на вопросы, предложения и критику.
Всего наилучшего и удачной торговли.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/14108





- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
При необходимости можно использовать библиотеку JAson.mqh, которая находится в оригинальном коде нашего компаньона.
Как ужасно работает гугл-переводчик.
Без библиотеки JAson, конечно, не будет работать.
Библиотека не в его коде, а здесь, и автор это указал.
Да, я полностью это понимаю. Кроме того, мы обязаны использовать этот стандарт, поскольку почти все поставщики финансовых данных используют этот метод.
Здравствуйте, вот оно, то, о чем я просил, я разместил в сообществе mql5 =.
Версия для MQL5 METATRADER 5 Я внес изменения в код, чтобы он работал в Metatrader 5. Также были внесены изменения в кодировку для улучшения условий в текущей коммерческой ситуации. Все изменения были направлены на адаптацию кода к Metatrader 5. Это функционально. Просто скачайте этот файл и запустите его. При необходимости можно использовать библиотеку JAson.mqh, которая находится в оригинальном коде нашего компаньона. Меня зовут Ней Борхес. Я из Бразилии, штат Гояс, город Калдас-Новас, посреди лесов Бразилии. Было очень трудно учиться в одиночку, без чьей-либо помощи, но здесь, в сообществе, я многому научился. Спасибо.
Версия для MQL5 METATRADER 5 Я внес изменения в код, чтобы он работал в Metatrader 5. Также были внесены изменения в кодировку для улучшения условий в текущей коммерческой ситуации. Все изменения были направлены на адаптацию кода к Metatrader 5. Это функционально. Просто скачайте этот файл и запустите его. При необходимости можно использовать библиотеку JAson.mqh, которая находится в оригинальном коде нашего компаньона. Меня зовут Ней Борхес. Я из Бразилии, штат Гояс, город Калдас-Новас, посреди лесов Бразилии. Было очень трудно учиться в одиночку, без чьей-либо помощи, но здесь, в сообществе, я многому научился. Спасибо.
Бразилия - Гояс - Калдас-Новас - Ней Борхес
Fiz algumas correçoes ao codigo para funcionar no MQL5 gostaria que por gentilesa verificasse e retornar, obrigado - Sara Sabaghi
Fiz algumas correçoes ao codigo para funcionar no MQL5 gostaria que por gentilesa verificasse e retornar, obrigado - Sara Sabaghi
Привет, чувак
Спасибо, что поделился своим кодом. Да, я протестировал его. Он работает нормально
Перешли на бинарник. Размер теперь тех же данных 1.2 Mb. Парсинг в нужные массивы структур теперь занимает 5 миллисекунд.
Что-то многовато у Вас. Здесь 12 мс, но данных 80 Mb.
Что-то многовато у Вас. Здесь 12 мс, но данных 80 Mb.