Скачать MetaTrader 5

Excel vs MT

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Торгуй с помощью MetaTarder 5. Скачай прямо сейчас!
Debugger
2501
Debugger 2011.11.15 16:10 

Всем доброго времени суток!
Надоело мне заниматься кодингом, решил облегчить себе жизнь используя Эксель и его возможности, но столкнулся с проблемой:

Через DDE передаются только OHLC D1. Можно ли через DDE передавать котировки каких-то других периодов и баров отличных от нулевого?
Заранее благодарен.

trol222
1435
trol222 2011.11.16 04:52  
Debugger:

Всем доброго времени суток!
Надоело мне заниматься кодингом, решил облегчить себе жизнь используя Эксель и его возможности, но столкнулся с проблемой:

Через DDE передаются только OHLC D1. Можно ли через DDE передавать котировки каких-то других периодов и баров отличных от нулевого?
Заранее благодарен.


Полностью поддерживаю . высказал свое мнение на этой странице https://forum.mql4.com/ru/44307/page2

(Но програмистам такое просто не выгодно..... ктож тогда кучу раззнообразных скриптов для проверки идей заказывать будет.)

Там в моем посте есть 2 ссылки посмотрите может из них выйдет что путное ....

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

Mislaid
622
Mislaid 2011.11.16 06:48  

Что же так наезжать на программистов.

Существует простой способ загрузки данных в Excel: пишете индикатор, который может ничего не рисовать, а только собирает в массив информацию (любую, по вашему усмотрению) и, с определенной периодичностью, пишет ее в текстовый файл. Секретов здесь всего два:

после операции записи файл нужно обязательно закрыть;

массив должен иметь фиксированную размерность.

Второе условие важно, чтобы в Excel не падали формулы при обновлении данных. Ниже пример процедуры, которая записывает в текстовый файл следующую информацию:

1я строка: число строк массива

последующие строки: время и элементы массивов b0[] - b7[] (разделитель ";")

void WriteToFile()
{
   string FileName, TimeString;
   FileName = "8currencyIndexClear" + Period();
   
   int i, FileHandle, ChrtBars;
   ChrtBars = ChartBars;
   FileHandle = FileOpen(FileName, FILE_CSV | FILE_WRITE, ";");
   FileWrite(FileHandle, ChrtBars);
   for (i = 0; i < ChrtBars; i++)
   {
      TimeString =  TimeToStr( Time[i], TIME_DATE|TIME_MINUTES);
      FileWrite(FileHandle, TimeString, b0[i], b1[i], b2[i], b3[i], b4[i], b5[i], b6[i], b7[i]);
   }

   FileClose( FileHandle);
}
Выходной файл будет расположен в каталоге: ...\experts\files\

Загружаем файл в Excel на примере 2003 офиса:

Данные -> Импорт внешних данных -> Импортировать данные

В адресной строке выбираем папку \files\, ставим тип файлов: "Все файлы (*.*)", выбираем файл -> Открыть -> далее

Ставим птичку, что разделителем является ";" -> далее -> Нажимаем "Подробнее", выбираем в качестве разделителя целой и дробной части точку -> ОК -> Готово -> ОК.

Файл загружен, форматируем данные. При обновлении данных форматы будут сохраняться. Можно работать. Удобно импортируемые данные держать на отдельном листе.

Обновление информации:

Курсор должен находиться на любом из полей загруженной таблицы. Данные -> Обновить данные

Чтобы каждый раз не спрашивали имя обновляемого файла, делаем следующее:

Данные -> Импорт внешних данных -> Свойства диапазона данных. Убираем птичку "Запрашивать имя файла при обновлении" ОК

Удобно значок "Обновить данные" кинуть на панель инструментов :

Вид -> Панели инструментов -> Настройка. Выбираем закладку "Команды", в левом окне становимся на строку "Данные", в правом окне ищем строку "Обновить данные" и перетаскиваем значок на панель инструментов

trol222
1435
trol222 2011.11.16 07:53  
Mislaid:

Что же так наезжать на программистов.

Существует простой способ загрузки данных в Excel: пишете индикатор, который может ничего не рисовать, а только собирает в массив информацию (любую, по вашему усмотрению) и, с определенной периодичностью, пишет ее в текстовый файл. Секретов здесь всего два:

после операции записи файл нужно обязательно закрыть;

массив должен иметь фиксированную размерность.

Второе условие важно, чтобы в Excel не падали формулы при обновлении данных. Ниже пример процедуры, которая записывает в текстовый файл следующую информацию:

1я строка: число строк массива

последующие строки: время и элементы массивов b0[] - b7[] (разделитель ";")

Выходной файл будет расположен в каталоге: ...\experts\files\

Загружаем файл в Excel на примере 2003 офиса:

Данные -> Импорт внешних данных -> Импортировать данные

В адресной строке выбираем папку \files\, ставим тип файлов: "Все файлы (*.*)", выбираем файл -> Открыть -> далее

Ставим птичку, что разделителем является ";" -> далее -> Нажимаем "Подробнее", выбираем в качестве разделителя целой и дробной части точку -> ОК -> Готово -> ОК.

Файл загружен, форматируем данные. При обновлении данных форматы будут сохраняться. Можно работать. Удобно импортируемые данные держать на отдельном листе.

Обновление информации:

Курсор должен находиться на любом из полей загруженной таблицы. Данные -> Обновить данные

Чтобы каждый раз не спрашивали имя обновляемого файла, делаем следующее:

Данные -> Импорт внешних данных -> Свойства диапазона данных. Убираем птичку "Запрашивать имя файла при обновлении" ОК

Удобно значок "Обновить данные" кинуть на панель инструментов :

Вид -> Панели инструментов -> Настройка. Выбираем закладку "Команды", в левом окне становимся на строку "Данные", в правом окне ищем строку "Обновить данные" и перетаскиваем значок на панель инструментов


в кодбазе есть такое - лоудер https://www.mql5.com/ru/code/8102, и действия ваши понятны, но. Если так идти то для каждого инструмента и нужного тф данные будут писатся в отдельный файл экселя ив закрытом состоянии обновлятся (на заданную глубину баров)периодически через заданный промежуток времени. А итоговый файл экселя- где делаются расчеты берет данные из ... \experts\files\, т.е. ссылается на данные ячеек которые обновляемых периодически . и в итоге чтобы обновить данные в итоговом файле нужно открыть и закрыть все записываемые файлы экселя в каталоге ... \experts\files\,а их не мало (как и инструментов в терминале). Вот и получается что нужен либо макрос который будет периодически сам как бы в фоновом режиме открывать и закрывать все имеющиеся файлы экселя в каталоге ... \experts\files\ после чего и произойдет обновление итоговового файла, либо както в том эксперте сделать так чтобы данные писались не в отдельный файл экселя для каждого инструмента, а в один файл экселя но на отдельный лист по каждому инструменту.
Mislaid
622
Mislaid 2011.11.16 08:07  
trol222:

в кодбазе есть такое - лоудер https://www.mql5.com/ru/code/8102, и действия ваши понятны, но. Если так идти то для каждого инструмента и нужного тф данные будут писатся в отдельный файл экселя ив закрытом состоянии обновлятся (на заданную глубину баров)периодически через заданный промежуток времени. А итоговый файл экселя- где делаются расчеты берет данные из ... \experts\files\, т.е. ссылается на данные ячеек которые обновляемых периодически . и в итоге чтобы обновить данные в итоговом файле нужно открыть и закрыть все записываемые файлы экселя в каталоге ... \experts\files\,а их не мало (как и инструментов в терминале). Вот и получается что нужен либо макрос который будет периодически сам как бы в фоновом режиме открывать и закрывать все имеющиеся файлы экселя в каталоге ... \experts\files\, либо както в том эксперте сделать так чтобы данные писались не в отдельный файл экселя для каждого инструмента, а в один файл экселя но на отдельный лист по каждому инструменту.


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

Обновление данных для листа "С":

......

Sheets("C").Select
Selection.QueryTable.Refresh BackgroundQuery:=False

И так перечислите в одном макросе все листы. Запустили макрос и одним нажатием кнопки обновили все данные.

Если вы используете эксель для предварительных исследований, то в периодическом обновлении потребности не должно быть. Только по запросу.

Да, и файлы экселя можно хранить в любом месте

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

Да, и индикатор пишет в текстовый файл, а не в файл Excel. Описанной выше процедурой настраиваете импорт текстовых файлов на отдельные листы

Debugger
2501
Debugger 2011.11.16 08:34  

Долго размышлял сегодня над вариантами и пришел пока к единственному:

1. либо через разделяемую память с фиксированными характеристиками буфера

2. через OLE.

Других мыслей не пришло.

Использовать промежуточные файлы конечно можно но слишком проблематично.

trol222
1435
trol222 2011.11.16 08:44  
Mislaid:


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

Обновление данных для листа "С":

......

Sheets("C").Select
Selection.QueryTable.Refresh BackgroundQuery:=False

И так перечислите в одном макросе все листы. Запустили макрос и одним нажатием кнопки обновили все данные.

Если вы используете эксель для предварительных исследований, то в периодическом обновлении потребности не должно быть. Только по запросу.


Опишу подробнее проблему. имеется вот этот советник https://www.mql5.com/ru/code/8102. он работает как скрипт который периодически скидывает данные в каталог ... \experts\files\ и они обновляются

на рабочем столе другой файл экселя с расчетами где в ячейках прописано путь что ячейка а1 равна ячейке скажем а1 из ерокад, ячейка б1 равна ячейке а1 из евродоллар и т.д.

и когда скрипт обновляет все файлы из каталога ... \experts\files\ (при этом открыт только файл итоговый с рабочего стола), то обновление нет в итоговом файле, а чтобы было обновление итоговового файла нужно каждый раз заново открывать и закрывать все файлы из каталога ... \experts\files\

Debugger
2501
Debugger 2011.11.16 08:58  

ну правильно, тебе по таймеру нужно считывать эти твои файлы с данными

этот путь мне представляется не очень перспективным с точки зрения синхронизации потоков данных

trol222
1435
trol222 2011.11.16 09:03  
Debugger:

ну правильно, тебе по таймеру нужно считывать эти твои файлы с данными

этот путь мне представляется не очень перспективным с точки зрения синхронизации потоков данных


да с синхронизацией тоже проблемы на минутных барах + еще дыры в истории надо обходить предварительно- прописывать предидущее значение если была дыра.
Mislaid
622
Mislaid 2011.11.16 14:21  
trol222:


Опишу подробнее проблему. имеется вот этот советник https://www.mql5.com/ru/code/8102. он работает как скрипт который периодически скидывает данные в каталог ... \experts\files\ и они обновляются

на рабочем столе другой файл экселя с расчетами где в ячейках прописано путь что ячейка а1 равна ячейке скажем а1 из ерокад, ячейка б1 равна ячейке а1 из евродоллар и т.д.

и когда скрипт обновляет все файлы из каталога ... \experts\files\ (при этом открыт только файл итоговый с рабочего стола), то обновление нет в итоговом файле, а чтобы было обновление итоговового файла нужно каждый раз заново открывать и закрывать все файлы из каталога ... \experts\files\


Ну, так я и предлагаю: завести одну книгу Excel. Для каждой пары отвести лист, настроить загрузку данных. С синхронизацией данных не будет проблем, если написать индюк, запускаемый на одном инструменте, передать ему список инструментов. При отсутствии данных он записывает последнюю известную цену на тот момент времени. А вот если индикаторы будут на разных чартах, проблема синхронизации на минутках в период низкой активности может совсем оказаться неразрешимой.

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

trol222
1435
trol222 2011.11.16 15:58  

Я и говорю вместо того чтобы давно уже сделать хорошие продукты в нескольких направлениях связи (мт и эксель, мт и маткад, мт и статистика или типа того)

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

Но ксожалению в кодбазе будет только куча однотипных бесполезных и узколобых индюков.

У меня щас файл экселя с расчетами весит уже 100 Мб и через день другой будет весить 150-200 и это только для 3-х дневной минутной истории по 11 инструментам . представьте что инструментов будет 30 и более - весить файл не один гиг будет....а переносить расчеты на mql для меня самоубийство - я состарюсь быстрей, сначала надо все устаканить, потом сократить лишние расчеты и оптимизировать, потом можно уже о коде думать.... и то mql из принципа не изучаю почитав некоторых авторитетных для меня людей .... если и переносить код то в сишарпе буду ... и лучше его попозже (когда сформирую расчеты доканца) буду учить чем MQL.

Что тут еще сказат очень и очень жаль что нет таких грамотных и полезных скриптов в свободном доступе -связывающих мт и другие проги, созданные для расчетов.....вот и приходится клянчить там да сям чтобы хоть приблеженно сделать чтото подобное.... прм крик души.... хоть отдельную ветку заводи, только толку не будет- всеравно задавят пока сам не сделаешь....

Может кто и создаст такое и если нежалко выложит (хотя что жалеть то, идеи то торговые тут не причем).

Кабы был спецом то выложил бы такое, но увы изначально пошел по другому пути....

1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий