
Как создать торговый журнал с помощью MetaTrader и Google Sheets
Содержание
- Концепция
- Введение
- Доступные решения
- Что такое электронная таблица Google
- Интерфейс прикладной программы Google spreadsheet (электронная таблица Google)
- Создание новой таблицы Google Sheet
- Создание проекта с использованием Google Apps Script
- Запуск функции настройки
- Публикация проекта в виде веб-приложения
- Как разместить (записать) данные в электронные таблицы Google
- Как читать электронные таблицы Google и получать к ним доступ с помощью метода HTTP
- Реализация и обновление инструментов для нашего торгового журнала с помощью MetaTrader
- Создание советника для публикации данных
- Получение списка текущих ордеров и позиций
- Отправка данных списка ордеров в Google Sheet
- Простой анализ нашего списка сделок
- Заключение
Концепция
Сегодня в мире трейдинга очень важно уменьшить количество ошибок и увеличить процент выигрышей. Каждому трейдеру необходим торговый журнал, чтобы улучшить эффективность своей стратегии. Но эта работа требует много времени и точности. Представьте, что это происходит автоматически.
Введение
Система торговых журналов Google Sheets (или «Google Таблицы») служит незаменимым ресурсом для трейдеров всех уровней, облегчающим организованное отслеживание их торговой деятельности. Если вы хотите добиться успеха в качестве дневного трейдера, ведение торгового журнала очень значимо. Невозможно улучшить то, чего не измерить. Система позволяет пользователям придерживаться структурированного подхода к своим сделкам, предлагая информацию, имеющую решающее значение для оценки и повышения эффективности работы. Доступность и простота использования данной системы повышаются благодаря функциям совместной работы Google Sheets, позволяющим трейдерам делиться своими журналами или запрашивать отзывы коллег. Используя данную систему, трейдеры могут развивать дисциплину, отслеживать свои психологические факторы и, в конечном счете, повышать свои шансы на успех на финансовых рынках.
В настоящей статье мы разрабатываем персонализированную платформу, позволяющую трейдерам систематически фиксировать и отслеживать свои сделки. Она включает в себя настраиваемые поля для выполнения анализа стратегий и результатов, а также встроенные функции для автоматизации расчетов, уменьшения количества ошибок и экономии времени.
Мы расскажем, как автоматически отправлять пользовательские данные по протоколу HTTP POST в Google Sheet. Мы также узнаем, как можно прочитать или получить их с помощью HTTP-запроса в MetaTrader.
Доступные решения
Для реализации торгового журнала нам необходимо перенести наши торговые данные в базу данных для последующего анализа. С другой стороны, нам нужно иметь доступ к этой базе данных, загружать информацию и использовать её. Эта база данных может быть в любой форме, например, файл Excel, файл в формате CSV, сервер MySQL или Microsoft SQL, файл в формате JSON или даже любой обычный текстовый файл, где нужные данные сохраняются построчно. В зависимости от того, к какому типу относится ваша база данных, дизайн и разработка вашей системы различаются.
У нас есть несколько типов решений.
- Google Sheets: Ведение торгового журнала можно упростить с помощью Google Sheets. Это простой в использовании интерфейс для мониторинга важных показателей, таких как сделки, точки входа и выхода, прибыли и убытки, а также торговые заметки. Используя общедоступный торговый журнал Google Sheet, трейдеры могут систематизировать свои сделки и собирать статистику, чтобы извлечь уроки из своего опыта. Кроме того, Google Sheets позволяет настраивать журнал таким образом, чтобы трейдеры могли адаптировать его к своим конкретным стратегиям.
- Торговые журналы с использованием Python и интерфейса прикладной программы: Для трейдеров, желающих иметь более сложное решение, автоматизация торгового журнала с использованием Python и приложения Google Sheets может значительно упростить ввод и анализ данных. Такая автоматизация позволяет обновлять данные в режиме реального времени и снижает вероятность человеческой ошибки. Извлекая данные с торговых платформ и автоматически заполняя Google Sheet, трейдеры могут больше сосредоточиться на анализе, а не на ручном вводе данных. Это решение особенно эффективно для тех, кто часто торгует и нуждается в точном и своевременном анализе результатов.
- Онлайн торговые журналы: Различные онлайн торговые журналы сочетают простоту использования и доступность веб-приложений с функциями, позволящими трейдерам регистрировать в логе свои сделки без необходимости вручную управлять электронной таблицей. Однако, за подписку взимается плата. Эти платформы часто оснащены встроенными аналитическими инструментами, способными помочь трейдерам выявлять паттерны в их торговом поведении, потенциально приводя к принятию более обоснованных решений.
Мы выбираем Google Sheets в качестве нашей базы данных на основе Excel по двум ключевым причинам: Во-первых, это приложение является простым и легкодоступным для понимания. Во-вторых, Google Sheets по своей сути является онлайн-базой данных, доступ к которой можно получить из любого места и с любого компьютера, просто перейдя по ссылке. Чтобы сделать данные доступными онлайн, нет необходимости создавать дополнительную инфраструктуру.
Что такое Google spreadsheet (электронная таблица Google)
Google spreadsheet - это бесплатный веб-редактор Excel от Google, позволяющий пользователям создавать электронные таблицы, редактировать их и управлять ими. Подобно Microsoft Excel, он позволяет пользователям упорядочивать данные в ячейках и таблицах, а также выполнять математические, статистические и аналитические операции с сотнями баров и анализировать диаграммы.
Основными функциями и преимуществами использования Google Sheets являются:
- Файлы автоматически сохраняются на Google Диске, что делает их доступными с любого устройства, подключенного к Интернету.
- Множество пользователей могут работать с одним и тем же файлом одновременно и мгновенно видеть изменения друг друга.
- Установка программного обеспечения не требуется; для этого требуется только браузер и учетная запись в Google.
- Пользователи могут импортировать и экспортировать данные в таких форматах, как Excel, CSV и PDF.
- Редактор поддерживает широкий спектр функций для анализа данных, аналогичных Excel.
- Google sheets поддерживает скрипты. Функция автоматизации также доступна с помощью API-решений.
Google Sheets отлично подходит для совместной работы в режиме онлайн и легкого доступа к данным или обмена ими из любой точки мира. Поэтому он может быть отличным инструментом для работы с торговыми журналами.
Интерфейс прикладной программы Google spreadsheet (электронная таблица Google)
Интерфейс прикладной программы Google Sheets - это интерфейс RESTful, позволяющий считывать и изменять данные электронной таблицы. Наиболее распространенные способы использования этого API включают в себя следующие задачи:
- Создание электронных таблиц
- Чтение и запись значений ячеек электронной таблицы
- Обновление форматирования электронной таблицы
- Управление связанными таблицами
Использование API для Google Sheets требует выполнения сложных действий и наличия учетной записи Google Developer Account стоимостью 300 долларов США.
Но на этом мы не заканчиваем, мы предоставляем вам простое и бесплатное решение. Давайте разберемся шаг за шагом:
Создание новой таблицы Google Sheet
- Для начала откройте Google Sheets и создайте новую пустую электронную таблицу. Если у вас еще нет аккаунта в Google, вам понадобится зарегистрировать новый, чтобы получить доступ к этой услуге. Эта электронная таблица будет служить основным хранилищем всех данных, с которыми мы будем работать, что позволит нам легко отправлять и извлекать информацию для нашего торгового журнала.
- Как только электронная таблица будет открыта, вам нужно будет настроить первую строку, добавив заголовки, соответствующие ключевым точкам данных, которые мы будем использовать. В первой строке введите следующие заголовки, по одному для каждого столбца:
- ticket: Тикет. Здесь будет сохранен уникальный идентификатор для каждой сделки.
- order: Ордер. В этом столбце будет отслеживаться, является ли сделка ордером на покупку или продажу.
- symbol: Символ, мы запишем торговый инструмент, такой как валютные пары, например, EURUSD или GBPJPY.
- openprice: Здесь будет храниться цена, по которой открыта сделка.
- sl: Соответствует значению стоп-лосса, установленному для сделки
- tp:Соответствует значению тейк-профита, установленному для сделки
- close: В этом столбце будет указано, была сделка закрыта или нет.
- lot: Здесь вы зафиксируете размер лота, который представляет собой объем сделки.
- opentime: В этом столбце будет указано точное время открытия сделки.
Создание с использованием Google Apps Script
Чтобы добавить функциональность в Google Sheet, следующим шагом будет создание Google Apps Script. Google Apps Script позволяет писать пользовательский код, который автоматизирует задачи и подключает сервисы Google, делая его идеальным инструментом для привязки вашей электронной таблицы к внешним платформам.
Для этого:
- В своих таблицах Google Sheets нажмите на меню “Extensions” вверху.
- В выпадающем меню выберите “Apps Script”. Это действие откроет новую вкладку, которая приведет вас к интерфейсу Google Apps Script, где можно писать и редактировать код для автоматизации взаимодействия с вашей таблицей.
- После открытия редактора Apps Script вы увидите пустой редактор скриптов. Рекомендуется дать вашему проекту осмысленное название, чтобы его было легко идентифицировать в будущем.
- Можно назвать его как-нибудь типа “мой первый журнал” или “моя функция списка сделок”, как вам больше нравится.
- После открытия редактора Google Apps Script и названия вашего проекта, следующим шагом будет изменение скрипта путем удаления отображаемого по умолчанию кода. По умолчанию Google Apps Script включает в себя простой шаблон функции с именем “myFunction”, который нам не понадобится для нашего проекта.
Итак, удалите эту функцию по умолчанию, затем скопируйте и вставьте приведенную ниже функцию и замените функцию по умолчанию вашим пользовательским скриптом, приведенным ниже:
// Original code from https://github.com/jamiewilson/form-to-google-sheets const sheetName = 'Sheet1' const scriptProp = PropertiesService.getScriptProperties(); function initialSetup() { const activeSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); scriptProp.setProperty('key', activeSpreadsheet.getId()); } function doPost (e) { const lock = LockService.getScriptLock(); lock.tryLock(10000); try { const doc = SpreadsheetApp.openById(scriptProp.getProperty('key')); const sheet = doc.getSheetByName(sheetName); const headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]; const nextRow = sheet.getLastRow() + 1; const newRow = headers.map(function(header) { return header === 'Date' ? newDate() : e.parameter[header]; }) sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow]); return ContentService .createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow })) .setMimeType(ContentService.MimeType.JSON); } catch (e) { return ContentService .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e })) .setMimeType(ContentService.MimeType.JSON); } finally { lock.releaseLock(); }}
Спасибо Джейми Уилсону (Jamie Wilson) за то, что мы использовали его код (form-to-google-sheets) для нашего проекта
Теперь перед переходом к следующему шагу сохраните проект. Файл (File) > иконка Сохранить (Save)
Данная функция является частью редактора Google Apps Script, который подключает Google Form или внешний запрос HTTP POST к Google Sheet, позволяя динамически сохранять данные в таблице.
Ниже приведена разбивка компонентов функции:
sheetName: это глобальная переменная, которая ссылается на нашу новую электронную таблицу, созданную ранее. Имя таблицы по умолчанию - “sheet1” .
scriptProp: Используется для сохранения свойств, относящихся к конкретному сценарию, через службу PropertiesService в Google Apps Script, обеспечивая постоянное хранение таких значений, как идентификатор электронной таблицы.
initialSetup: С помощью этой функции мы извлекаем текущую активную электронную таблицу Google Spreadsheet, используя SpreadsheetApp.getActiveSpreadsheet(), затем сохраняем уникальный идентификатор электронной таблицы в свойствах скрипта, используя scriptProp.setProperty('key', activeSpreadsheet.getId()). Это позволяет другим частям скрипта позже получить доступ к электронной таблице по идентификатору.
doPost, - наша основная функция, которая обрабатывает входящие HTTP POST-запросы, сопоставляя полученные данные с таблицей Google Sheet. Сначала она получает блокировку, чтобы предотвратить проблемы с одновременной записью, затем извлекает целевую электронную таблицу по сохраненному идентификатору и идентифицирует корректную таблицу. Функция считывает заголовки из первой строки, чтобы сопоставить входящие данные с соответствующими столбцами, добавляет данные в следующую доступную строку и обрабатывает заголовок “Date (Дата)”, автоматически вставляя текущую дату. Она возвращает сообщение об успешном выполнении в формате JSON, если операция завершена, или сообщение об ошибке, если возникают какие-либо проблемы, и, наконец, снимает блокировку.
Запуск функции настройки
Поскольку этот скрипт не проверен Google, прежде чем вы сможете продолжить он выдаст предупреждение. Это стандартная процедура для непроверенных скриптов.
Для надлежащего исполнения этой функции и настройки Google Apps Script, выполните следующие действия:
- Нажмите на значок запуска Run рядом со значком сохранения Save.
- Появится модальное окно с надписью “Требуется авторизация (Authorization required)”. Нажмите на “Просмотреть разрешения (Review permissions)”, чтобы перейти к следующему экрану, где нужно будет авторизовать скрипт для доступа к вашей учетной записи в Google.
- Выберите учетную запись Google, которую вы хотите использовать с этим скриптом. Это учетная запись, которая предоставит необходимые разрешения.
- На следующем экране можно видеть сообщение о том, что “Google не проверил это приложение (Google hasn’t verified this app)”. Это обычное предупреждение для скриптов, не прошедших процедуру верификации в Google. Чтобы продолжить, нажмите на кнопку “Дополнительно (Advanced)”.
- После нажатия кнопки Advanced вы увидите опцию ”Перейти к проекту без названия (небезопасно) (Go to Untitled project (unsafe)". Это сообщение указывает на то, что, хотя скрипт не проверен, вы по-прежнему разрешаете ему доступ к своей учетной записи в Google. Для продолжения нажмите на эту ссылку.
- Наконец, вам будет предложено предоставить разрешения для скрипта. Просмотрите запрашиваемые разрешения и нажмите кнопку “Разрешить (Allow)”, чтобы разрешить скрипту взаимодействовать с вашим Google Sheet и другими сервисами Google.
После предоставления скрипту необходимых разрешений вы увидите лог выполнения приказа в консоли редактора скриптов, указывающий на то, что скрипт был авторизован для запуска. Теперь скрипт готов, но чтобы автоматизировать его выполнение с помощью HTTP POST-запросов, необходимо настроить триггер.
Для этого:
- Для открытия интерфейса управления триггером, на странице редактора Google Apps Script, на левой боковой панели, нажмите “Триггеры” (Triggers). Данный раздел позволяет настроить, когда и как должен выполняться ваш скрипт.
- На странице триггеров нажмите на кнопку “Добавить триггер” (Add Trigger). Эта кнопка обычно обозначается значком “плюс” (+) или явно обозначается как "Добавить триггер» (Add Trigger).
- Появится новое диалоговое окно, в котором можно настроить параметры вашего триггера. В ответ на HTTP POST-запрос, для активации вашей функции (do Post) необходимо настроить триггер.
- В качестве источника события выберите “Из веб-приложения” (From the web app) или “Веб-приложение” (Web app) (точный вариант может варьироваться в зависимости от обновлений интерфейса Google Apps Script).
- Из выпадающего меню выберите функцию, которую вы хотите запустить. В данном случае выберите doPost.
- Выберите, какое развертывание следует выполнить: Head
- Выберите источник события: From spreadsheet
- Установите тип события на “При отправке формы” (On form submit). Такая конфигурация позволяет запускать ваш скрипт в ответ на HTTP POST-запрос, отправленный на URL веб-приложения.
Затем нажмите СОХРАНИТЬ (SAVE). Если для этого требуются разрешения, вы должны принять их в своей учетной записи в Google.
Публикация проекта в виде веб-приложения
Теперь нам нужно опубликовать проект, нажав синюю кнопку "Развернуть" (Deploy) на странице приложения и выбрав "Новое развертывание" (New Deployment) из выпадающего списка.
Затем нажмите на значок “Выбрать тип” (Select type) и выберите "Веб-приложение» (Web app).
В появившейся форме выберите следующие опции:
- Описание: Это может быть все, что угодно. Просто сделайте его дескриптивным.
- Web app → Исполнить как: Я
- Web app → Кто имеет доступ: Любое лицо
После этого нажмите «Развернуть» (Deploy).
Важно: На следующей появившейся странице скопируйте URL веб-приложения. Мы используем эту ссылку в нашем проекте. Ваша ссылка будет выглядеть примерно так:
Ссылка на проект: https://script.google.com/macros/s/AfycbxWxYnDPsdvsvsdvdv236545OfgVnadvkvsASDCV6541scsSDHNfnqPeVkyH5A-r5eDhg/exec
Как разместить (записать) данные в электронные таблицы Google
HTTP POST это метод, используемый протоколом HTTP для отправки данных от клиента серверу. Обычно он используется при отправке данных в форме на веб-сайтах. Вы видите их много в Интернете, точно так же, как форму входа в систему на веб-сайте MQL.
Данные передаются в теле запроса, в отличие от метода GET, где данные передаются по URL-адресу. При использовании метода post данные не отображаются в URL-адресе, что делает его немного более безопасным, а размер отправляемых данных не ограничен и позволяет отправлять большие файлы или данные.
Просто для тестирования нашей функции sheet script мы создаем простую HTML-форму, которая используется для сбора тестовых данных и отправки их на сервер для обработки. Для метода отправки форм должно быть установлено значение POST.
Приведенная ниже базовая HTML-форма содержит:
Action (действие): должно быть установлено ссылкой на проект (Из предыдущих шагов по выполнению публикации)
Method (метод): Это метод размещения формы, который может быть использован в методе GET или POST.
При написании скрипта нашего приложения в Google sheet с помощью метода post, мы используем post для отправки данных в Google.
input (ввод): включены все типы данных, которые мы хотим отправить.
Вот окончательная HTML-форма:
<!DOCTYPE html> <htmllang="en"> <head> <metacharset="UTF-8"> </head> <body> <form method="post" action="https://script.google.com/macros/s/AfycbxWxYnDPsdvsvsdvdv236545OfgVnadvkvsASDCV6541scsSDHNfnqPeVkyH5A-r5eDhg/exec"> <input type="number" size="20" name="ticket" placeholder="ticket"> <input type="text" size="20" name="order" placeholder="order"> <input type="text" size="20" name="symbol" placeholder="symbol"><br> <input type="number" step="0.00001" size="20" name="openprice" placeholder="openprice"> <input type="number" step="0.00001" size="20" name="sl" placeholder="stoploss"> <input type="number" step="0.00001" size="20" name="tp" placeholder="takeprofit"><br> <input type="number" step="0.00001" size="20" name="close" placeholder="close price"> <input type="number" step="0.01" size="20" name="lot" placeholder="volume"> <input type="datetime-local" size="20" name="opentime" placeholder="opentime"> <input type="submit" value="post"> </form> </body> </html>
Скопируйте и вставьте этот текст в локальный текстовый файл и переименуйте формат файла в HTML-файл. Следующим образом: “newfile.html”
Также замените адрес действия формы на адрес ссылки на ваш проект электронной таблицы.
Теперь нам легко удалось отправить нужные данные в Google sheet.
Заполните форму, нажмите "Опубликовать" и дождитесь обновления вашей электронной таблицы Google.
Если этот шаг пройден, перейдем к следующему, в противном случае внимательнее прочтите описанные выше действия. Перепроверьте столбцы вашей электронной таблицы и сравните их с именем, введенным в вашу html-форму.
Приведенная выше форма является всего лишь тестом отправки данных с помощью HTML POST. В противном случае, в оставшейся части этой статьи мы будем автоматически отправлять данные о транзакциях с помощью функции MetaTrader WebRequest.
Как читать электронные таблицы Google и получать к ним доступ с помощью метода HTTP
Чтобы считывать данные из электронной таблицы с помощью метода HTTP, необходимо установить разрешение на чтение в своей таблице.
Откройте Google sheet, найдите свою созданную ранее таблицу, и откройте её.
На странице с таблицей в правом верхнем углу нажмите "Поделиться" и предоставьте общий доступ всем, у кого есть ссылка, а также назначьте роль просматривающему.
Затем нажмите на ссылку Копировать (Copy), чтобы использовать ее в качестве ссылки для доступа к таблице. Ссылка для доступа выглядит следующим образом:
https://docs.google.com/spreadsheets/d/1rYNuscaYWtRu_65W-fPnascNTYHwcU-3fWiNQ4asTBHQo/edit
Выделенный жирным шрифтом текст - это ваш идентификатор таблицы
Нам нужен этот идентификатор, чтобы прочитать таблицу в формате JSON.
Ссылка для доступа: https://docs.google.com/spreadsheets/d/{YOUR_SHEET_ID}/gviz/tq?tqx=out:json&tq&gid='+gid
{YOUR_SHEET_ID} - идентификатор вашей электронной таблицы, который можно найти в URL-адресе вашей таблицы.
Скопируйте идентификатор из URL-адреса таблицы и замените {YOUR_SHEET_ID} на Ссылку доступа. Ссылка доступа будет выглядеть следующим образом:
Когда вы используете эту ссылку в своем браузере, полная информация о вашей таблице загружается в формате файла JSON.
Вот результат:
google.visualization.Query.setResponse( { "version": "0.6", "reqId": "0", "status": "ok", "sig": "529900317", "table": { "cols": [ { "id": "A", "label": "ticket", "type": "number", "pattern": "General" }, { "id": "B", "label": "order", "type": "string" }, { "id": "C", "label": "symbol", "type": "string" }, { "id": "D", "label": "openprice", "type": "number", "pattern": "General" }], "rows": [ { "c": [ { "v": 5.64123564E8, "f": "564123564" }, { "v": "buy" }, { "v": "EURUSD" }, { "v": 1.2215, "f": "1.2215" }, { "v": 1.21, "f": "1.21" }, { "v": 1.23, "f": "1.23" }, { "v": 0.0, "f": "0" }, { "v": 0.01, "f": "0.01" }, { "v": "Date(2024,8,11,18,27,0)", "f": "2024-09-11 18:27" }, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { "v": null }] }, { "c": [ { "v": 123123.0, "f": "123123" }, { "v": "sell" }, { "v": "USDJPY" }, { "v": 147.22, "f": "147.22" }, { "v": 147.44, "f": "147.44" }, { "v": 146.0, "f": "146" }, { "v": 0.0, "f": "0" }, { "v": 0.02, "f": "0.02" }, { "v": "Date(2024,8,4,20,43,0)", "f": "2024-09-04 20:43" }, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, { "v": null }] }], "parsedNumHeaders": 1 } });
Он содержит все названия столбцов, номера и значения. Все приведенные выше данные относятся только к 2 строкам сведений о позиции.
Мы используем этот JSON-файл для чтения таблицы в нашем советнике.
Давайте перейдем к самой интересной части истории - автоматической реализации всего, о чем мы говорили, в платформе Metatrader
Реализация и обновление инструментов для нашего торгового журнала с помощью MetaTrader
Для реализации торгового журнала Google Sheet с помощью MetaTrader, в процессе участвуют следующие этапы.
Во-первых, нам нужно создать Google Sheet для сохранения торговых данных и управления ими, включая сведения о позициях или комментарии к позициям. Мы уже делали это ранее.
Затем используем Google Apps Script, чтобы таблица могла взаимодействовать с внешними системами посредством HTTP-запросов. И это мы уже делали ранее.
Теперь в MetaTrader мы напишем пользовательский советник, который отправляет торговые данные (такие как символ, объем и тип ордера) в Google Sheet, используя функцию WebRequest и протокол HTTP POST. Таблица действует как облачная база данных и позволяет нам отслеживать, хранить и обмениваться сделками в режиме реального времени на разных счетах и в разных местах.
Создание советника для публикации данных
Нам нужен советник для отправки информации о позициях и ордерах в Google sheet.Итак, нам надо записать главную часть в наш код.
- Функция, выполняющая эту задачу, проверяет открытые позиции и отложенные ордера на счете в MetaTrader. Мы называем её “OrderList”.
- Функция с задачей отправки данных “OrderList” в нашу таблицу Google посредством функции WebRequest. Мы называем её “UpdateDatabase”.
Получение списка текущих ордеров и позиций
Наша функция “OrderList” может иметь следующую структуру:
void OrderList { for(int conter = PositionsTotal() - 1; conter >= 0; conter -= 1) { const ulong ticket = PositionGetTicket(conter); if(ticket == 0 || !PositionSelectByTicket(ticket)) continue; string symbol = PositionGetString(POSITION_SYMBOL); int order_type = PositionGetInteger(POSITION_TYPE); double volume = PositionGetDouble(POSITION_VOLUME); double open_price = PositionGetDouble(POSITION_PRICE_OPEN); datetime open_time = PositionGetInteger(POSITION_TIME); double stop_loss = PositionGetDouble(POSITION_SL); double take_profit = PositionGetDouble(POSITION_TP); // Send trade details via WebRequest UpdateDatabase(symbol, order_type, volume, open_price, stop_loss, take_profit, ticket, open_time); } }
а для MQL4 код мог бы иметь следующий вид:
void OrderList { // Loop through all open trades for(int conter = OrdersTotal() - 1; conter >= 0; conter -= 1) { if(OrderSelect(conter, SELECT_BY_POS, MODE_TRADES)) { // Collect trade data int ticket = OrderTicket(); string symbol = OrderSymbol(); int order_type = OrderType(); double volume = OrderLots(); double open_price = OrderOpenPrice(); datetime open_time = OrderOpenTime(); double stop_loss = OrderStopLoss(); double take_profit = OrderTakeProfit(); // Send trade details via WebRequest UpdateDatabase(symbol, order_type, volume, open_price, stop_loss, take_profit, ticket, opentime); } } }
Этот код функции содержит цикл, начинающийся с 0 до общего количества открытых ордеров OrdersTotal() или PositionsTotal().
Каждый цикл выбирает позицию или ордера из списка ордеров MetaTrader, а затем выбирает их с помощью функции OrderSelect.
Затем мы считываем нужную информацию с помощью PositionGetString, PositionGetDouble и PositionGetInteger.
Все подробности, которые нужны в отношении других данных, можно найти здесь Торговые функции на MQL4 и Торговые функции на MQL5.
Отправка данных списка ордеров в Google Sheet
После получения информации обо всех ордерах из функции предварительного просмотра “OrderList”, нам понадобится другая функция под названием “UpdateDatabase” , чтобы перенести данные OrderList в нашу таблицу.
Информация о позиции, такая как символ, тип ордера, объем, цена открытия, стоп-лосс, тейк-профит и номер тикета в качестве вводных данных функции, затем преобразуется в отформатированную строку. Затем эти данные отправляются с помощью HTTP POST-запроса посредством функции WebRequest(). Если запрос выполнен успешно, она подтверждает, что торговые данные отправлены; если нет, то выводится сообщение об ошибке.
void SendTradeData(string orderSymbol, int orderType, double orderVolume, double openPrice, double stopLoss, double takeProfit, ulong orderTicket, datetime openTime) { // Database url. Replace with your own url string url = "https://script.google.com/macros/s/AfycbxWxYnDPsdvsvsdvdv236545OfgVnadvkvsASDCV6541scsSDHNfnqPeVkyH5A-r5eDhg/exec"; int digit = (int)SymbolInfoInteger(orderSymbol,SYMBOL_DIGITS); string datastring = "? +"&ticket="+string(orderTicket) +"&order="+string(orderType) +"&symbol="+string(orderSymbol) +"&openprice="+DoubleToString(openPrice,digit) +"&sl="+DoubleToString(stopLoss,digit) +"&tp="+DoubleToString(takeProfit,digit) +"&close=0" +"&lot="+DoubleToString(orderVolume,2) +"&opentime="+(string)openTime; int res; // To receive the operation execution result char data[]; // Data array to send POST requests char result[]; //--- Create the body of the POST request for authorization ArrayResize(data,StringToCharArray(datastring,data,0,WHOLE_ARRAY,CP_UTF8)-1); ResetLastError(); res=WebRequest("POST", url, NULL, 0, data, result, str); string responsestring = CharArrayToString(result, 0, 0, CP_UTF8); Print(responsestring); if(res == -1) Print("Error in WebRequest: ", GetLastError()); else Print("Trade data sent: ", data); }
В данной функции мы получаем данные об ордерах или позициях из функции “OrderList”, а затем подготавливаем их к стандартному методу публикации.
URL-адрес является общедоступным URL-адресом нашей таблицы .
Затем создаем строковую переменную “datastring” в формате метода GET.
С помощью функции StringToCharArray мы сохраняем строку в массиве с таким именем data.
Функция WebRequest запускается в следующей строке с помощью метода POST, “url”, нашего массива “data” и строки ответа, хранящейся в переменной “result”.
Затем преобразуем массив ответа в строку “responsestring” для вывода в логах вкладки MetaTrader Expert.
Простой анализ нашего списка сделок
Каждый раз при открытии и оформлении ордера, ваша таблица будет обновляться, и можно анализировать все данные с помощью диаграммы Google sheet analytics.
Подсчитывайте общее количество позиций на покупку, общее количество продаж, общее количество лотов ордеров, общее количество выигрышных или убыточных позиций, средний выигрыш, средний убыток или все, что может прийти вам в голову.
Мы создали шаблон для вашего журнала, и зайти на него можно по этой ссылке. Проверьте формулу столбцов, чтобы узнать, как мы рассчитываем и анализируем подробную информацию из необработанного списка позиций.
https://docs.google.com/spreadsheets/d/1rYcRJKzVWtRu_65W-fPnQgODSzTU-3fWiNQHZz3P2Qo/edit?usp=sharing
Заключение
В настоящей статье нами подробно описан процесс создания торгового журнала с помощью Google Sheets и мы связали его с MetaTrader для автоматического отслеживания данных. Мы рассмотрели настройку Google Sheet, добавление заголовков и использование Google Apps Script для отправки торговых данных с помощью HTTP POST-запросов. Такая система экономит время и уменьшает количество ошибок, упрощая отслеживание сделок в режиме реального времени.
Мы также узнали, как создать советника в MetaTrader, который будет отправлять информацию о сделках непосредственно в Google Sheets, что позволит проводить анализ в режиме реального времени. Благодаря этой простой настройке у вас теперь есть эффективный способ организовать и улучшить свои торговые показатели, не прибегая к сложным инструментам.
Мы подготовили для вас необходимые коды для двух версий MetaTrader 4 и 5.
Если у вас есть какие-либо вопросы или идеи, оставляйте свои комментарии.
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/15811





- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, я очень неопытен во всем этом, поэтому заранее прошу прощения.
Я не могу заставить его работать.
Вот шаги, которые я предпринял.
- Я создал копию вашего журнала в google sheets.
- Я скачал и запустил предоставленный вами скрипт mt5.
- Я вставил ссылку на свой журнал в google sheet в скрипт.
Никаких сделок в моем журнале не появилось.
Что я делаю не так?
Спасибо!
Здравствуйте, я очень неопытен во всем этом, поэтому заранее прошу прощения.
Я не могу заставить его работать.
Вот шаги, которые я предпринял.
- Я создал копию вашего журнала в google sheets.
- Я скачал и запустил предоставленный вами скрипт mt5.
- Я вставил ссылку на свой журнал в google sheet в скрипт.
Никакие сделки не появляются в моем журнале.
Что я делаю не так?
Спасибо!
Коды Google Sheet и программы, которая находится в Metatrader, чувствительны к малейшим изменениям. Необходимо соблюдать все заглавные и строчные буквы.
В предыдущем комментарии размещен код, относящийся к Apps Script. Используйте его внимательно.
Этот код: https: //github.com/jamiewilson/form-to-google-sheets
Выполните шаги "Создание нового листа Google" и "Как разместить (записать) данные в электронных таблицах Google" еще раз. Если вы не справились с этими шагами, вы не сможете перейти к следующим шагам.
Весь код и МОЙ ЖУРНАЛ являются образцом. Вы должны выполнить все шаги самостоятельно.
Коды Google Sheet и программы, входящей в состав Metatrader, чувствительны к малейшим изменениям. Необходимо соблюдать все заглавные и строчные буквы.
В предыдущем комментарии размещен код, относящийся к Apps Script. Используйте его осторожно.
Этот код: https://github.com/jamiewilson/form-to-google-sheets
Выполните шаги "Создание нового листа Google" и "Как разместить (записать) данные в электронных таблицах Google" еще раз. Если вы не справились с этими шагами, вы не сможете перейти к следующим шагам.
Весь код и МОЙ ЖУРНАЛ являются образцом. Вы должны выполнить все шаги самостоятельно.
Здравствуйте, Сара,
Наконец-то у меня появилось время разобраться в этом вопросе.
Несколько раз я пытался заставить его работать, следуя инструкциям очень тщательно, но я все еще не получаю никаких сделок, регистрируемых на листе Google из данных MT5.
App Scritp работает, когда я ввожу данные вручную в html. Код Mt5 (который я скачал отсюда) не дает мне ни ошибок, ни предупреждений - я аккуратно вставил в него URL своего веб-приложения.
Chatgpt посоветовал добавить URL моего App Script в советнике"Allow WebRequest for listed URL." Но это не помогло.
Я заметил, что проблема в том, что когда я применяю советник к графику, он выглядит активным в правом верхнем углу, но если я посмотрю на эксперта в нижнем окне, он НЕ говорит "Expert Advisor Initialized" (как это обычно бывает с другими советниками).
Есть ли что-нибудь еще, что я могу попробовать? Я бы очень хотел использовать это.
Большое спасибо
EDIT:
После множества настроек с помощью AI, а также добавления других параметров, мне удалось заставить его работать! ДА! Мне это нравится. Спасибо.
EDIT:
После множества настроек с помощью AI, а также добавления других параметров, мне удалось заставить его работать! ДА! Мне это нравится. Спасибо.
Я счастлив и рад, что эта статья оказалась для вас полезной.
Ваши старания достойны похвалы. Ведь в этой работе было действительно много деталей и нюансов.
Удачи.