Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2030

 
Mikhail Tkachev #:

А с первоначальны циклом никак не вывернуть ?

Почему ты цикл взял из ВВ, почему не взять из машки? Есть для этого причины?
 
f1nik #:
Здравствуйте. Скажите пожалуйста, как прочитать ячейку Excel, которая обновляется по DDE?  Прочитать просто ячейку из сохраненного файла получается, если читать ячейку с данными  DDE возвращается 0. Как я понял из поиска, перед чтением надо  инициализировать DDE, но те примеры которые я видел не работают либо я не правильно их адаптировал. Хотел читать данные из QUIK а через лист Excel по DDE. Можно ли через COM читать уже открытый лист? Читал с помощью библиотеки  Koldun Zloy  https://www.mql5.com/ru/code/28283

Вот что получаю от Excel. MT4 пока стоит, потому что могу от него получить данные в воскресенье.


Я обновил библиотеку. Добавил функцию для подключения к уже открытому документу.

Функцию DDEInitiate() вызывать не нужно. Она не для этого.

#include <ComObject.mqh>
static ComObject* Excel = NULL; 

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
#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();
   }
}
 
Koldun Zloy Огромное спасибо.
 
Tretyakov Rostyslav #:
Почему ты цикл взял из ВВ, почему не взять из машки? Есть для этого причины?

Я пробежался по всем штатным индикаторам, везде цикл с инкрементом, с предварительной командой ArraySetAsSeries(... ,false) для буферов;
Видимо, ArrayCopy() работает не так, как в хелпе - "Для серийных массивов правильно переопределяется стартовая позиция ..."

Вот цикл из штатной машки (Custom Moving Averages.mq4), как и в Bands...

//+------------------------------------------------------------------+
//|   simple moving average                                          |
//+------------------------------------------------------------------+
void CalculateSimpleMA(int rates_total,int prev_calculated,const double &price[])
  {
   int i,limit;
//--- first calculation or number of bars was changed
   if(prev_calculated==0)
   
     {
      limit=InpMAPeriod;
      //--- calculate first visible value
      double firstValue=0;
      for(i=0; i<limit; i++)
         firstValue+=price[i];
      firstValue/=InpMAPeriod;
      ExtLineBuffer[limit-1]=firstValue;
     }
   else
      limit=prev_calculated-1;
//--- main loop
   for(i=limit; i<rates_total && !IsStopped(); i++)
      ExtLineBuffer[i]=ExtLineBuffer[i-1]+(price[i]-price[i-InpMAPeriod])/InpMAPeriod;
 
Mikhail Tkachev #:

Я пробежался по всем штатным индикаторам, везде цикл с инкрементом, с предварительной командой ArraySetAsSeries(... ,false) для буферов;
Видимо, ArrayCopy() работает не так, как в хелпе - "Для серийных массивов правильно переопределяется стартовая позиция ..."

Вот цикл из штатной машки (Custom Moving Averages.mq4), как и в Bands...

Вот два варианта, запусти профилировщик и сравни

Файлы:
 
Tretyakov Rostyslav #:

Вот два варианта, запусти профилировщик и сравни

Окно Indicator2.mq4  пустое)   



 
Mikhail Tkachev #:

Окно Indicator2.mq4  пустое)   



   Что в журнале пишет?

 
Tretyakov Rostyslav #:

   Что в журнале пишет?

2022.08.30 14:17:50.026 Custom indicator _Debug\Indicator2_1 EURUSD,H4: loaded successfully

З.Ы. Удалил и еще раз перетащил на график, в окне индикатора появились данные... Чудеса)

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


Файлы:
 
Tretyakov Rostyslav #:

   Что в журнале пишет?

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


 
Mikhail Tkachev #:

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


Нажми на графике обновить
Причина обращения: