Ошибки, баги, вопросы - страница 3588

 
Igor168 #:

Могли бы вы привести пример такого шлабаума для мультивалютного эксперта? 
Я пробовал, но вышло не очень. Объясню в чем у меня была загвоздка. Всего 9 пар. На текущем баре из 9 пар, есть три сигнала. Один сигнал эксперт отправит, следующие уже нет так как шлагбаум закрыт. На следующем баре, когда шлабаум снова открыт он отправит еще один сигнал. Остальные он не отправит. А мне нужно создать эксперта, который проанализировал все указанные ему инструменты, отправил по ним сигнал. Без повтора одного и того же сигнала и если на следующих барах появятся еще сигналы, то он отправит оповещения по этим сигналам 

Дождаться нового бара на всех парах, а потом проверить на них сигнал.

//+------------------------------------------------------------------+
bool NewBarBasket()
  {
   static datetime nextTime = 0;
   string Symb[3] = {"EURUSD", "GBPUSD", "AUDUSD"};
   MqlTick tick;
   int res = 0;
   for(int i = 0; i < 3; i++)
      if(SymbolInfoTick(Symb[i], tick))
         if(tick.ask != 0 && tick.bid != 0)
            if(tick.time >= nextTime)
               res++;

   if(res == 3)
     {
      int perSec = PeriodSeconds(PERIOD_CURRENT);
      nextTime = tick.time - tick.time % perSec + perSec;
      return true;
     }
   return false;
  }
//+------------------------------------------------------------------+
 
fxsaber #:
Файл MetaTrader 5\logs\metaeditor.log в режиме дозаписи, поэтому может занимать сотни мегабайтов с действиями, датируемыми много лет назад.

Всегда интересовала как работает эта дозапись, вы не в курсе?

1. Нужно ли открывать файл для дозаписи то есть открывать(загружать в память) все эти сотни мегабайтов? или файл не открывается и идёт запись последней строки

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

Интересно с точки зрения оптимизации и еще размера записей на ssd.

3 Больше интересует это в отношении стандартных функций MQL5 по записи в csv файл.

 
Aleksei Skrypnev #:

Всегда интересовала как работает эта дозапись, вы не в курсе?

1. Нужно ли открывать файл для дозаписи то есть открывать(загружать в память) все эти сотни мегабайтов? или файл не открывается и идёт запись последней строки

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

Интересно с точки зрения оптимизации и еще размера записей на ssd.

3 Больше интересует это в отношении стандартных функций MQL5 по записи в csv файл.

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


Открываем файл с FILE_READ|FILE_WRITE (обычно, не помешает ещё и FILE_SHARE_READ), перематываем в конец FileSeek(file,0,SEEK_END) и пишем.

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

 
JRandomTrader #:

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


Открываем файл с FILE_READ|FILE_WRITE (обычно, не помешает ещё и FILE_SHARE_READ), перематываем в конец FileSeek(file,0,SEEK_END) и пишем.

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

Я тоже предполагаю что сохраняется не весь файл при перезаписи.-использовал  FileSeek(file,0,SEEK_END) , FILE_SHARE_READ  не использовал.

 Просто отслеживал программой показывающей нагрузку на диск по кб/. файл в сотни мб там не записывался судя по скорости и объёму данных записи на диск.

 
Aleksei Skrypnev #:

Я предполагаю что сохраняется не весь файл при перезаписи. Просто отслеживал программой показывающей нагрузку на диск по кб/. файл в сотни мб там не записывался судя по скорости и объёму данных записи на диск.

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

 
Aleksandr Slavskii #:

Дождаться нового бара на всех парах, а потом проверить на них сигнал.

Теперь сигналы отправляет, повторения тоже нет, но теперь из 50+ валютных пар отправляет сигнал только по одной паре. 

if(NewBarBasket()==true){   
   if(//code search signals)
   {
   Print("bar buy! " + SymbolName(i,true) + " " + truncPrds(_Period)  +  " low = "+DoubleToString(low,5) + " high = " + DoubleToString(high,5));
   }

Есть еще какой-то способ реализации данного советника?
Напоминаю, что есть суть отправить сигнал по всем валютным инструментам из обзора рынка без повтора самого сигнала. 
Заранее спасибо!

 
Igor168 #:

Теперь сигналы отправляет, повторения тоже нет, но теперь из 50+ валютных пар отправляет сигнал только по одной паре. 

Есть еще какой-то способ реализации данного советника?
Напоминаю, что есть суть отправить сигнал по всем валютным инструментам из обзора рынка без повтора самого сигнала. 
Заранее спасибо!

//+------------------------------------------------------------------+
string Symb[3] = {"EURUSD", "GBPUSD", "AUDUSD"};
//+------------------------------------------------------------------+
if(NewBarBasket() == true)
   for(int i = 0; i < (int)Symb.Size(); i++)
      if(/*code search signals*/)
         Print("bar buy! " + Symb(i)  + " " + truncPrds(_Period)  +  " low = " + DoubleToString(low, 5) + " high = " + DoubleToString(high, 5));
//+------------------------------------------------------------------+


ЗЫ. Про все пары из обзора рынка, первый раз написано. В предыдущих постах задача ставилась по другому.

ЗЫЫ Для всех символов,  предложенный вариант не подходит.
 
Приведите пример trailing stop для MetaTrader 5.
 
Alexander Bykov #:
Приведите пример trailing stop для MetaTrader 5.
В статьях поищите
 
Aleksandr Slavskii #:


ЗЫ. Про все пары из обзора рынка, первый раз написано. В предыдущих постах задача ставилась по другому.

ЗЫЫ Для всех символов,  предложенный вариант не подходит.

Используя данный код, эксперт за одну миллисекунду отправляет сразу три сигнала по одной из указанных в коде валютных пар