Гугл таблицы. (Google Tables)

 

Крепкого здоровья и радостей в жизни, уважаемые форумчане!

Хочу обратится к опытным программистам на MQL4 за помощью.

Я решил написать библиотеку, которая будет имитировать неттинг в МТ4. Цель простая - экономия на спредах и свопах. Но столкнулся с сложностью, которую не знаю как преодолеть. Поскольку я хочу чтобы она работала во всех возможных (даже очень маловероятных) условиях, нужно, чтобы записи о виртуальных позициях сохранялись в пространстве, доступном с любого устройства. И сохранялись быстро, наверняка, и без пересечений. Чтобы советник, запущенный на офисном компе мог быть перезапущен на впс без танцев с бубном, и сам узнал свои виртуальные открытые позиции и ордера.

Для этих целей мне показалось логично использовать доступные онлайн сервисы. И первым делом я вспомнил о гугл таблицах.

Сам вопрос - есть ли у кого-то опыт связи MQL-программ и онлайн-сервисов, которые можно использовать для обмена данными между терминалами? Какие еще есть или могут быть созданы решения, которые удовлетворят критериям 1. Физическая запись виртуальных торговых операций, для исключения потерь. 2. Доступность с любого устройства. 3. Исключение пересечений при записи из двух или нескольких программ. 4. Легкость настройки для пользователя программ или библиотеки. Без необходимости создания своих серверов.

 
Artem Virsky:

Крепкого здоровья и радостей в жизни, уважаемые форумчане!

Хочу обратится к опытным программистам на MQL4 за помощью.

Я решил написать библиотеку, которая будет имитировать неттинг в МТ4. Цель простая - экономия на спредах и свопах. Но столкнулся с сложностью, которую не знаю как преодолеть. Поскольку я хочу чтобы она работала во всех возможных (даже очень маловероятных) условиях, нужно, чтобы записи о виртуальных позициях сохранялись в пространстве, доступном с любого устройства. И сохранялись быстро, наверняка, и без пересечений. Чтобы советник, запущенный на офисном компе мог быть перезапущен на впс без танцев с бубном, и сам узнал свои виртуальные открытые позиции и ордера.

Для этих целей мне показалось логично использовать доступные онлайн сервисы. И первым делом я вспомнил о гугл таблицах.

Сам вопрос - есть ли у кого-то опыт связи MQL-программ и онлайн-сервисов, которые можно использовать для обмена данными между терминалами? Какие еще есть или могут быть созданы решения, которые удовлетворят критериям 1. Физическая запись виртуальных торговых операций, для исключения потерь. 2. Доступность с любого устройства. 3. Исключение пересечений при записи из двух или нескольких программ. 4. Легкость настройки для пользователя программ или библиотеки. Без необходимости создания своих серверов.


Сейчас сам этим занимаюсь, можно скомпоноваться. Вот почитайте для начала https://habrahabr.ru/post/305378/

Генерируем красивую Google-таблицу из своей программы (используя Google Sheets API v4)
Генерируем красивую Google-таблицу из своей программы (используя Google Sheets API v4)
  • habrahabr.ru
Пусть нам нужно создать программой на языке Python вот такую таблицу: Особенности этой таблицы: задана ширина столбцов; верхняя ячейка является объединением A1:E1; в некоторых ячейках настроены: формат отображения, размер шрифта, жирность, выравнивание текста и цвет фона; значения в последнем столбике вычислены формулой (например, в E4...
 

Чего куда сохранять и зачем? Какие тут могут быть еще решение? Решение одно - есть открытые ордера, этого достаточно, что бы посчитать совокупный объем и нулевой уровень цены.

 

По пункту 3

"3. Исключение пересечений при записи из двух или нескольких программ."

есть прием вести БД, записи в которой имеют идентификатор (почти первичный ключ) - целое число (хватит и до 2 миллиардов), выдаваемое каждому пользователю автоматически генератором случайных чисел при добавлении записи. Как-то так, помнится, делали минские разработчики, доложившие свой подход в 1995 на конференции Microsoft Developers Conference в Обнинске. Все удивлялись, как это не будет совпадений, однако работало.

А вообще одновременная правка данных двумя и более приложениями очень сложная задача. Вспомните, ведь критические секции, мьютексы и др. средства помощи разработчику в разграничении доступа к данным опираются на функции ядра типа InterlockedIncrement, на время исполнения которых (процессоры Inlel и AMD) апппаратно блокируется шина памяти. Нешуточное дело. Строго говоря, у задачи нет решения, можно лишь снизить вероятность коллизий. Как, например,  было иногда в ж/д кассах - Вам предлагают билет, но пока кассир нажимает кнопку, этого билета уже нет.

Так ли уж нужно, чтобы одновременно на одном счете торговали разные люди? Один-то человек, наверное, не будет одновременно торговать с двух устройств, выберет одно из них. Скажу еще о промежуточном варианте -  разделить доступ между пользователями жестко, чтобы исключить одновременную правку одних и тех же данных. Например, один имеет права на работу с одной группой валютных пар, другой с другой группой. Тогда по п.1 и п.2

"1. Физическая запись виртуальных торговых операций, для исключения потерь. 2. Доступность с любого устройства."

Вам подошел бы обычный FTP-сервер. Берете с него на устройство свою БД либо разрешенный ее раздел, правите, кладете снова на FTP-сервер.

 
Vladimir:

 "

Вам подошел бы обычный FTP-сервер. Берете с него на устройство свою БД либо разрешенный ее раздел, правите, кладете снова на FTP-сервер.

В том-то и дело,  что хочется просто. Без серверов. А по совместном доступу с разграничением - в гугл таблицах это уже реализовано. Когда один пользователь поставил указатель  на ячейку, то другой пользователь в эту ячейку писать не может. Но может писать  в другую. 
 
И по разделение валютных пар тоже не годится. Суть идеи в том, что бы, например,  5 советников запущенных на впс, один на домашнем или офисном компе + позиции открытые трейдером в ручную суммировались в одну. Так, что бы каждый советник знал свои виртуальные позиции, с виртуальными сл и тп. И менял общую позицию, когда идёт их сработка. Если открывает, например, 5 лотов в бай, а суммарно остальными советниками на этот момент открыто 4 в селе, то результат 1 лот в бай. Но при этом каждый сов свои позиции знает. 
 
Alexey Volchanskiy:

Сейчас сам этим занимаюсь, можно скомпоноваться. Вот почитайте для начала https://habrahabr.ru/post/305378/

Спасибо за наводку. То что нужно. Скооперироваться можно. Я вернусь к этой теме через пару недель, свяжусь с Вами. 
 
Artem Virsky:

///Чтобы советник, запущенный на офисном компе мог быть перезапущен на впс без танцев с бубном, и сам узнал свои виртуальные открытые позиции и ордера.///


Еще раз для тех, кто в танке. Это можно сделать вообще без танцев с бубнами.

 
Dmitry Fedoseev:

Еще раз для тех, кто в танке. Это можно сделать вообще без танцев с бубнами.

Подробнее,  пожалуйста. 
 
Artem Virsky:
Подробнее,  пожалуйста. 

Все ордера в терминале, каждый советник их метит магиком. Поэтому никаких проблем для советника, что бы посчитать свою совокупную позицию, что собрать список всех магиков и для каждого из них посчитать свою совокупную позицию, что бы просто посчитать совокупную позицию по всем ордерам.

 
Artem Virsky:
Подробнее,  пожалуйста. 

Вся информация есть в истории счета. По ней можно восстановить структуру текущей совокупной позиции. Единственная проблема, что при увеличении истории будет возрастать вычислительная нагрузка на разбор истории. Но это только при первом подключении с конкретного экземпляра терминала к счету - далее можно кешировать результаты по текущую дату в локальных файлах.

Причина обращения: