f1nik #: Здравствуйте. Скажите пожалуйста, как прочитать ячейку Excel, которая обновляется по DDE? Прочитать просто ячейку из сохраненного файла получается, если читать ячейку с данными DDE возвращается 0. Как я понял из поиска, перед чтением надо инициализировать DDE, но те примеры которые я видел не работают либо я не правильно их адаптировал. Хотел читать данные из QUIK а через лист Excel по DDE. Можно ли через COM читать уже открытый лист? Читал с помощью библиотеки Koldun Zloyhttps://www.mql5.com/ru/code/28283
Вот что получаю от Excel. MT4 пока стоит, потому что могу от него получить данные в воскресенье.
Я обновил библиотеку. Добавил функцию для подключения к уже открытому документу.
Функцию DDEInitiate() вызывать не нужно. Она не для этого.
#include <ComObject.mqh>
static ComObject* Excel = NULL;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
#ifdef _WIN64
if( !_IsX64 ){
Alert( "The program only works in a 64-bit terminal!" );
return;
}
#else
if( _IsX64 ){
Alert( "The program only works in a 32-bit terminal!" );
return;
}
#endif
HRESULT result = CoInitialize( 0 );
if( result == S_OK ){
Excel = ComObject::GetObject( "Excel.Application" );
if( Excel ){
ComObject Workbooks = Excel.GetProperty( "Workbooks" );
ComObject Workbook = Workbooks.GetProperty( "Item", Variant( "book.xls" ) );
if( Workbook.isValid() ){
ComObject Worksheet = Workbook.GetProperty( "ActiveSheet" );
ComObject FRange = Worksheet.GetProperty( "Range", Variant( "D15" ) );
Variant Value = FRange.GetProperty( "Value");
Alert ( "Cell ", Value.toDouble() );
}
delete Excel;
}
else {
Print( "Excel не обнаружен" );
}
CoUninitialize();
}
}
Tretyakov Rostyslav #: Почему ты цикл взял из ВВ, почему не взять из машки? Есть для этого причины?
Я пробежался по всем штатным индикаторам, везде цикл с инкрементом, с предварительной командой ArraySetAsSeries(... ,false) для буферов; Видимо, ArrayCopy() работает не так, как в хелпе - "Для серийных массивов правильно переопределяется стартовая позиция ..."
Вот цикл из штатной машки (Custom Moving Averages.mq4), как и в Bands...
//+------------------------------------------------------------------+//| simple moving average |//+------------------------------------------------------------------+void CalculateSimpleMA(int rates_total,int prev_calculated,constdouble &price[])
{
int i,limit;
//--- first calculation or number of bars was changedif(prev_calculated==0)
{
limit=InpMAPeriod;
//--- calculate first visible valuedouble firstValue=0;
for(i=0; i<limit; i++)
firstValue+=price[i];
firstValue/=InpMAPeriod;
ExtLineBuffer[limit-1]=firstValue;
}
else
limit=prev_calculated-1;
//--- main loopfor(i=limit; i<rates_total && !IsStopped(); i++)
ExtLineBuffer[i]=ExtLineBuffer[i-1]+(price[i]-price[i-InpMAPeriod])/InpMAPeriod;
Я пробежался по всем штатным индикаторам, везде цикл с инкрементом, с предварительной командой ArraySetAsSeries(... ,false) для буферов; Видимо, ArrayCopy() работает не так, как в хелпе - "Для серийных массивов правильно переопределяется стартовая позиция ..."
Вот цикл из штатной машки (Custom Moving Averages.mq4), как и в Bands...
З.Ы. Удалил и еще раз перетащил на график, в окне индикатора появились данные... Чудеса)
З.З.Ы. Еще чудесней, скомпилировал еще раз файл (без изменений текста), в окне опять стало пусто М.б. это из-за того, что у меня терминал отключен от сервера, не люблю, когда котировки иногда сами собой изменяются, долго копаюсь, пока пойму в чем причина отличий в тестировании, от вчерашнего например, при тех же самых входных параметрах
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
А с первоначальны циклом никак не вывернуть ?
Здравствуйте. Скажите пожалуйста, как прочитать ячейку Excel, которая обновляется по DDE? Прочитать просто ячейку из сохраненного файла получается, если читать ячейку с данными DDE возвращается 0. Как я понял из поиска, перед чтением надо инициализировать DDE, но те примеры которые я видел не работают либо я не правильно их адаптировал. Хотел читать данные из QUIK а через лист Excel по DDE. Можно ли через COM читать уже открытый лист? Читал с помощью библиотеки Koldun Zloy https://www.mql5.com/ru/code/28283
Вот что получаю от Excel. MT4 пока стоит, потому что могу от него получить данные в воскресенье.
Я обновил библиотеку. Добавил функцию для подключения к уже открытому документу.
Функцию DDEInitiate() вызывать не нужно. Она не для этого.
Почему ты цикл взял из ВВ, почему не взять из машки? Есть для этого причины?
Я пробежался по всем штатным индикаторам, везде цикл с инкрементом, с предварительной командой ArraySetAsSeries(... ,false) для буферов;
Видимо, ArrayCopy() работает не так, как в хелпе - "Для серийных массивов правильно переопределяется стартовая позиция ..."
Вот цикл из штатной машки (Custom Moving Averages.mq4), как и в Bands...
Я пробежался по всем штатным индикаторам, везде цикл с инкрементом, с предварительной командой ArraySetAsSeries(... ,false) для буферов;
Видимо, ArrayCopy() работает не так, как в хелпе - "Для серийных массивов правильно переопределяется стартовая позиция ..."
Вот цикл из штатной машки (Custom Moving Averages.mq4), как и в Bands...
Вот два варианта, запусти профилировщик и сравни
Вот два варианта, запусти профилировщик и сравни
Окно Indicator2.mq4 пустое)
Окно Indicator2.mq4 пустое)
Что в журнале пишет?
Что в журнале пишет?
2022.08.30 14:17:50.026 Custom indicator _Debug\Indicator2_1 EURUSD,H4: loaded successfully
З.Ы. Удалил и еще раз перетащил на график, в окне индикатора появились данные... Чудеса)
З.З.Ы. Еще чудесней, скомпилировал еще раз файл (без изменений текста), в окне опять стало пусто
М.б. это из-за того, что у меня терминал отключен от сервера, не люблю, когда котировки иногда сами собой изменяются, долго копаюсь, пока пойму в чем причина отличий в тестировании, от вчерашнего например, при тех же самых входных параметрах
Что в журнале пишет?
Опять что-то появилось в окне индикатора. Видно, что буфер среднего заполнен пустыми значениями (шкала справа)

Опять что-то появилось в окне индикатора. Видно, что буфер среднего заполнен пустыми значениями (шкала справа)