В КБ как-нибудь запишу. Собственно вот класс для этого. А в индикатор нужно только добавить две строчки:
Создать перед OnInit экземпляр этого класса, привязав ваш массив структур, который нужно передавать между ТФ. Если это не первая инициализация, то массив структур будет заполнен данными предыдущего ТФ.
в OnDeinit сохранить ваш массив через единственный метод в этом классе.
В КБ как-нибудь запишу. Собственно вот класс для этого. А в индикатор нужно только добавить две строчки:
Создать перед OnInit экземпляр этого класса, привязав ваш массив структур, который нужно передавать между ТФ. Если это не первая инициализация, то массив структур будет заполнен данными предыдущего ТФ.
в OnDeinit сохранить ваш массив через единственный метод в этом классе.
ЗЫ Использовать глобальные переменные терминала для передачи параметров между ТФ считаю очень кривым решением.
fxsaber: На первый взгляд, реализация конвертации T[]<->uint[] неоптимальна.
писал давно этот код. Может быть. Хотя вроде там особо оптимизировать нечего. Может только в мелочах. Во всяком случае этот класс в работе можно опробовать в моем последнем бесплатном продукте в Маркете.
Буду благодарен, если предложите более оптимальную реализацию.
// Пример обмена любыми данными (включая строковые массивы).#include <fxsaber\TradeTransactions\ResourceData.mqh> // https://www.mql5.com/ru/code/22166#define PRINT(A) Print(#A + " = " + (string)(A));
voidOnStart()
{
// Произвольные данные для примераstring Str[] = {"123", "Hello World!"};
double Num = 5;
MqlTick Tick = {0};
Tick.bid = 1.23456;
const RESOURCEDATA<uint> Resource; // Ресурс для обмена данными
CONTAINER<uint> Container; // Создаем контейнер - все будет храниться в массиве простого типа (в примере выбран uint)// Заполняем контейнер разными данными
Container[0] = Str;
Container[1] = Num;
Container[2] = Tick;
// Распечатаем типы хранимых в контейнере данныхfor (int i = 0; i < Container.GetAmount(); i++)
PRINT(Container[i].GetType())
Resource = Container.Data; // Отправили данные на обмен
CONTAINER<uint> Container2; // Сюда будем получать данные
Resource.Get(Container2.Data); // Получили данные// Получим данные в исходном видеstring Str2[];
Container[0].Get(Str2); // Получили массивArrayPrint(Str2);
PRINT(Container[1].Get<double>()) // Получили число
PRINT(Container[2].Get<MqlTick>().bid) // Получили структуру
}
Не, к сожалению, голословно. В Ваши библы не полезу. Пробовал уже разбираться в Вашем коде и понял, что я еще до него не дорос. :))
Во всяком случае если раскрыть все инклудники, то Ваш код будет более длинный в исходном коде и исполняемом.
Также пару раз обжигался, когда использовал ваши библы, а потом долго выяснял источник тормозов, пока их не снес. После этого зарекся.
Главная сложность использования Вашего кода, который состоит из множества инклудников, - высокая сложность дебага, когда на каждом шаге новый класс, дефайн или макрос. И жалко времени для теста, так как понимаю, что вряд ли возможно значительно убыстрить мой алгоритм. Единственно, какой вижу сейчас у себя косяк - это то, что использую циклы в некоторых местах вместо CopyArray. После этого исправления мои код будет почти идеальным с точки зрения производительности и читаемости.
Единственно, какой вижу сейчас у себя косяк - это то, что использую циклы в некоторых местах вместо CopyArray. После этого исправления мои код будет почти идеальным с точки зрения производительности и читаемости.
Если напишите замер производительности, будет интересно сравнить.
Странно что теперь никто не пишет про "костыли", "изобретение велосипеда", "сложности переноса данных на другой терминал", "задача должна решаться средствами MQL "... Получается что решения от метаквотов - это костыли и моветон)
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Лично я использую ресурсы через union.
А можно подробнее. Спасибо.
А можно подробнее. Спасибо.
В КБ как-нибудь запишу.
Собственно вот класс для этого.
А в индикатор нужно только добавить две строчки:
- Создать перед OnInit экземпляр этого класса, привязав ваш массив структур, который нужно передавать между ТФ. Если это не первая инициализация, то массив структур будет заполнен данными предыдущего ТФ.
- в OnDeinit сохранить ваш массив через единственный метод в этом классе.
ЗЫ Использовать глобальные переменные терминала для передачи параметров между ТФ считаю очень кривым решением.В КБ как-нибудь запишу.
Собственно вот класс для этого.
А в индикатор нужно только добавить две строчки:
- Создать перед OnInit экземпляр этого класса, привязав ваш массив структур, который нужно передавать между ТФ. Если это не первая инициализация, то массив структур будет заполнен данными предыдущего ТФ.
- в OnDeinit сохранить ваш массив через единственный метод в этом классе.
ЗЫ Использовать глобальные переменные терминала для передачи параметров между ТФ считаю очень кривым решением.Спасибо, все по делу.
Собственно вот класс для этого.
На первый взгляд, реализация конвертации T[]<->uint[] неоптимальна.
писал давно этот код. Может быть.
Хотя вроде там особо оптимизировать нечего. Может только в мелочах.
Во всяком случае этот класс в работе можно опробовать в моем последнем бесплатном продукте в Маркете.
Буду благодарен, если предложите более оптимальную реализацию.
Буду благодарен, если предложите более оптимальную реализацию.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: TradeTransactions
fxsaber, 2019.03.15 07:36
Как перениести глобальную переменную, структуру, объект в индикаторе при переходе на другой таймфрейм? Гуглил не нашел.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: TradeTransactions
fxsaber, 2018.12.17 23:48
Можно обмениваться чем угодно через Ресурсы.
Не, к сожалению, голословно. В Ваши библы не полезу.
Пробовал уже разбираться в Вашем коде и понял, что я еще до него не дорос. :))
Во всяком случае если раскрыть все инклудники, то Ваш код будет более длинный в исходном коде и исполняемом.
Также пару раз обжигался, когда использовал ваши библы, а потом долго выяснял источник тормозов, пока их не снес. После этого зарекся.
Главная сложность использования Вашего кода, который состоит из множества инклудников, - высокая сложность дебага, когда на каждом шаге новый класс, дефайн или макрос.
И жалко времени для теста, так как понимаю, что вряд ли возможно значительно убыстрить мой алгоритм.
Единственно, какой вижу сейчас у себя косяк - это то, что использую циклы в некоторых местах вместо CopyArray. После этого исправления мои код будет почти идеальным с точки зрения производительности и читаемости.
Единственно, какой вижу сейчас у себя косяк - это то, что использую циклы в некоторых местах вместо CopyArray. После этого исправления мои код будет почти идеальным с точки зрения производительности и читаемости.
Если напишите замер производительности, будет интересно сравнить.
:)
Странно что теперь никто не пишет про "костыли", "изобретение велосипеда", "сложности переноса данных на другой терминал", "задача должна решаться средствами MQL "...
Получается что решения от метаквотов - это костыли и моветон)