Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1571

 
Vitaly Muzichenko #:

Как узнать значение массива со структуры?

написать свой int ArrayMininum(aIND &[])

или даже 

template <typename T> int ArrayMiniumu(T const&[],int (*Comapartor)(const T&,const T&))

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

 
Artyom Trishkin #:

Почему в структуре не массивы?

Чтобы иметь связь между ячейками массивов

Можно записать так, но это не совсем читабельно в использовании

double Ind[][3];
// Ind[][0] инд 1
// Ind[][1] инд 2
// Ind[][2] инд 3

P.S. Переделал, теоретически логическую цепочку в дальнейшем сохраню

struct aIND {
  double RSI[];
  double CCI[];
  double MACD[];
};
aIND Ind;

--

СПАСИБО!

 
Здравствуйте! Создаю эксперта, который отправляет сигналы. Поиск торговой ситуации прописан в функции OnTick . Для того, чтобы сигналы не повторялись я использовал следующую проверку:
   datetime Curr_bar = iTime(SymbolName(i,true),periods[x],0);     
   static datetime SignalTime = Curr_bar;   

if(//code search signal && SignalTime != Curr_bar){
Print("Signal buy");
SignalTime = Curr_bar;
}
Недавно данная проверка перестала работать. Стали появляться сбои(повтор сигналов в огромном количестве) 
Позже у другого программиста подсмотрел код с немного другой проверкой:
   int currBars = iBars(SymbolName(i,true),periods[x]);
   static int prevBars = currBars;
   if (prevBars == currBars) return;
   prevBars = currBars;
Проблема осталась та же. Есть ли возможность какими-то другими способами сделать эту проверку?
Суть проверки заключается в том, чтобы эксперт один раз проанализировал ситуацию - отправил сигнал в фнукцию Print или Alert и более ее не трогал 


Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий . Функции для обработки этих событий должны быть определены в программе...
 
Igor168 #:
Здравствуйте! Создаю эксперта, который отправляет сигналы. Поиск торговой ситуации прописан в функции OnTick . Для того, чтобы сигналы не повторялись я использовал следующую проверку:
Недавно данная проверка перестала работать. Стали появляться сбои(повтор сигналов в огромном количестве) 
Позже у другого программиста подсмотрел код с немного другой проверкой:
Проблема осталась та же. Есть ли возможность какими-то другими способами сделать эту проверку?
Суть проверки заключается в том, чтобы эксперт один раз проанализировал ситуацию - отправил сигнал в фнукцию Print или Alert и более ее не трогал 
//+------------------------------------------------------------------+
void  OnTick()
  {
   if(NewBar())
      Print("NewBar");
  }
//+------------------------------------------------------------------+
bool NewBar()
  {
   static datetime nextTime = 0;
   if(nextTime <= TimeCurrent())
     {
      int perSec = PeriodSeconds(PERIOD_CURRENT);
      nextTime = TimeCurrent() - TimeCurrent() % perSec + perSec;
      return true;
     }
   return false;
  }
//+------------------------------------------------------------------+

Попробуйте так.

 
Aleksandr Slavskii #:

Попробуйте так.

Думаю нужно дополнить. 

Указанный NewBar() будет корректно работать только при вызове из OnTick(), в случае вызова из других функций OnTimer(), OnChartEvent() возможны ошибки.

При вызове не из OnTick() вместо TimeCurrent() лучше использовать время последнего тика проверяемого символа.

 
Aleksandr Slavskii #:

Думаю нужно дополнить. 

Указанный NewBar() будет корректно работать только при вызове из OnTick(), в случае вызова из других функций OnTimer(), OnChartEvent() возможны ошибки.

При вызове не из OnTick() вместо TimeCurrent() лучше использовать время последнего тика проверяемого символа.

Понял. Благодарю за ответ

 
Высылаю вам своего бота, написанного на MQL5, вместе с индикатором(HEKENSSS), но бот не открывает позиции из-за ошибки 4756. Бот пытается открыть позиции в нужный момент, но возникает эта ошибка. Когда я открываю позицию вручную, все работает нормально, и другие боты работают как положено, только этот не работает.
Файлы:
bot.mq5  10 kb
HEKENSSS.mq5  15 kb
 

Хочу читать файл с логами терминала. Лежит он в logs\18112024.log в корне терминала выше папки MQL5.

Сделал символьную ссылку, чтобы не заморачиваться с доступом к файлам вне песочницы. С помощью mklink

Т.е мне нужен файл Files\Logs\20241118.log сегодняшнего дня.

Не могу его открыть :

 int filehandle=FileOpen("Logs\\"+"20241118.log",FILE_READ|FILE_SHARE_READ|FILE_TXT);

Хотя файл вчерашнего дня открывается :

 int filehandle=FileOpen("Logs\\"+"20241117.log",FILE_READ|FILE_SHARE_READ|FILE_TXT);

Может, что с флагами намудрил ? Как открыть файл сегодняшнего дня в который терминал пишет логи ?

 

Хорошая мысля, приходит опосля. Открыл

 int filehandle=FileOpen("Logs\\"+FileNameLog,FILE_READ|FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_TXT);
 
Добрый день

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

Скажите, пожалуйста, возможно ли запустить этот процесс где-нибудь на серверах, арендуемых через интернет?


Заранее благодарен за любой совет.

С наилучшими пожеланиями, Александр