Есть индикатор. Он заполняет вот такую структуру:
Надо этот массив перенести в советник. Как? - Буфферы индикатора поддерживают только double
Я в начале хотел сразу класс сделать (чтобы там методы типа "GetTrendPoints() etc) . Но тут уж такой затык что объекты и указатели в эсперт передавать тоже нельзя. Так что уже хоят бы данные как нибудь перекачать
штатный способ передачи данных от советника - заполнение индикторных массивов(буферов).
(сразу кривое, но рабочее решение: Да они double но с акуратностью можно считать что просто скаляр 64 бита. Можно распарсить вашу структуру на кусочки по 64 бита и положить туда. На стороне советника собрать обратно.)
Каким образом эта структура соотносится с буферами индикатора ? что конкретно он отображает, что получается в окне данных по Ctrl+D. Лучше правильно и логично вести буферы
если нормальный способ не подходит - то на выбор файлы, sql, ресурсы и плюс синхронизация через глоб.переменные. Индикатор куда-то там сохраняет, сигнализирует через глоб.перемнную, советник читает
--
а вообще - когда обе части ваши, с уникальным взаимодействием и только друг с другом, то зачем оформлять одну из них как индикатор ? ну пусть будет класс...
штатный способ передачи данных от советника - заполнение индикторных массивов(буферов).
(сразу кривое, но рабочее решение: Да они double но с акуратностью можно считать что просто скаляр 64 бита. Можно распарсить вашу структуру на кусочки по 64 бита и положить туда. На стороне советника собрать обратно.)
Каким образом эта структура соотносится с буферами индикатора ? что конкретно он отображает, что получается в окне данных по Ctrl+D. Лучше правильно и логично вести буферы
если нормальный способ не подходит - то на выбор файлы, sql, ресурсы и плюс синхронизация через глоб.переменные. Индикатор куда-то там сохраняет, сигнализирует через глоб.перемнную, советник читает
--
а вообще - когда обе части ваши, с уникальным взаимодействием и только друг с другом, то зачем оформлять одну из них как индикатор ? ну пусть будет класс...
А как конкретно это сделать? Я что-то смутно думаю будет использовать оператор union , но тут надо чтобы эти куски вместе аккуратно ложились и в правильном порядку ( чтот смутно припоминаю про обратный порядок байтов в слове) В общем логика для меня туманна - я не делал такого.
Почему как индикатор? - ну так сложилось. Сейчас это уже очень навороченный идикатор с кучей кода и комплексной логикой, и кстати, одних буфферов там 80. Визуализация индикатора необходима для собственно отладки и осмысления логики. Переделывать как класс - может быть когда нибудь потом. Но при этом не хочу ещё больше усложнять то что и так сложно добавив ещё и ООП. Эта структура один из элементов (но важный)
Эксперт тоже не самй простой - использует несколько таймфреймов
Через буффер перегнать бы идеально - уже эскперт работает с нескольими буфферами (но понятно double)
p.s. Сделал в лоб по тупому. Не элегантно но надо же работает!
bool structToDouble(StateInfo &state,int i, double &arr[]) { arr[i]=(double)state.timeStart; arr[i+1]=(double)state.timeEnd; arr[i+2]=(double)state.BarsCount; arr[i+3]=(double)state.StateHigh; arr[i+4]=(double)state.StateLow; arr[i+5]=(double)state.StateBreak; return true; }
А как конкретно это сделать? Я что-то смутно думаю будет использовать оператор union , но тут надо чтобы эти куски вместе аккуратно ложились и в правильном порядку ( чтот смутно припоминаю про обратный порядок байтов в слове) В общем логика для меня туманна - я не делал такого.
Почему как индикатор? - ну так сложилось. Сейчас это уже очень навороченный идикатор с кучей кода и комплексной логикой, и кстати, одних буфферов там 80. Визуализация индикатора необходима для собственно отладки и осмысления логики. Переделывать как класс - может быть когда нибудь потом. Но при этом не хочу ещё больше усложнять то что и так сложно добавив ещё и ООП. Эта структура один из элементов (но важный)
Эксперт тоже не самй простой - использует несколько таймфреймов
Через буффер перегнать бы идеально - уже эскперт работает с нескольими буфферами (но понятно double)
p.s. Сделал в лоб по тупому. Не элегантно но надо же работает!
union X{ StateInfo a; double b[sizeof(StateInfo)/sizeof(double)+(sizeof(StateInfo)%sizeof(double)==0?0:1)]; };
Вот так красивее. Соответственно, сколько массив double получился, столько буферов и используем, их из union заполняем, в роботе читаем буфера в этот же union и имеем готовую структуру. Если префиксом en обозначен enum, то 7 буферов дополнительно на эту структуру надо.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть индикатор. Он заполняет вот такую структуру:
Надо этот массив перенести в советник. Как? - Буфферы индикатора поддерживают только double
Я в начале хотел сразу класс сделать (чтобы там методы типа "GetTrendPoints() etc) . Но тут уж такой затык что объекты и указатели в эсперт передавать тоже нельзя. Так что уже хоят бы данные как нибудь перекачать