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

 
Alexey Viktorov #:

Интересно. Буду ждать…

Вот эксперт. Он создает базу (если уже нет) и раз в секунду пишет в нее текущее время.
В коде нет ни одного Print().
Запустил на 10 парах, пошли ошибки:

CS      2       11:44:36.561    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:27.018    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:28.026    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:49.177    Test_DB (TRXUSD,M10)    database error, database is locked
CS      2       11:55:51.183    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:53.182    Test_DB (TRXUSD,M10)    database error, database is locked

Что бы получить ошибку надо закрыть и заново запустить MT5 тогда все эксперты начинают работать синхронно.

Хорошо бы:
1. Понять как избавиться от вывода этой ошибки.
2. Придумать шаблонный механизм который бы ставил в очередь в случае недоступности базы.

п.2 я решил тем, что добавил Sleep() с рандомным временем, но это похоже на костыль.

UPDATE: перезалил фаил, первый был с ошибкой

Файлы:
Test_DB_1.mq5  3 kb
 
Evgeny Dyuka #:

Вот эксперт. Он создает базу (если уже нет) и раз в секунду пишет в нее текущее время.
В коде нет ни одного Print().
Запустил на 10 парах, пошли ошибки:

Что бы получить ошибку надо закрыть и заново запустить MT5 тогда все эксперты начинают работать синхронно.

Хорошо бы:
1. Понять как избавиться от вывода этой ошибки.
2. Придумать шаблонный механизм который бы ставил в очередь в случае недоступности базы.

п.2 я решил тем, что добавил Sleep() с рандомным временем, но это похоже на костыль.

UPDATE: перезалил фаил, первый был с ошибкой

Увы, моих знаний не хватает. Хватило только на то, чтобы понять, что ошибка печатается 

      DatabaseExecute(db, sql);

Возможность проверить доступность перед созданием запроса, увы отсутствует.

Базу открывает, а запрос создать нет возможности.

 
Не открываются ордера на сервере, стопов и тейков нет, режимы алго включены и команда на установку проходит, а журналы молчат CTrade class . В тестере работает на реальной торговле молчок. Что проверить? 
 
mwwm #:
Не открываются ордера на сервере, стопов и тейков нет, режимы алго включены и команда на установку проходит, а журналы молчат CTrade class . В тестере работает на реальной торговле молчок. Что проверить? 

журнал терминала

 
Vladimir Deryagin #:

журнал терминала

Догадался включил логи, не может лот рассчитать. Не понимаю почему на реале не хочет считать?

void OpenBuy(const int index,double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);
   double long_lot=0.0;
   if(InpLotOrRisk==risk)
     {
      long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", OK: ","sl=",DoubleToString(sl,m_symbol.Digits()),
               ", CheckOpenLong: ",DoubleToString(long_lot,2),
               ", Balance: ",    DoubleToString(m_account.Balance(),2),
               ", Equity: ",     DoubleToString(m_account.Equity(),2),
               ", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
      if(long_lot==0.0)
        {
         ArrayRemove(SPosition,index,1);
         if(InpPrintLog)
            Print(__FILE__," ",__FUNCTION__,", ERROR: ","CMoneyFixedMargin.CheckOpenLong returned the value of 0.0");
         return;
        }
     }
 
mwwm #:

Догадался включил логи, не может лот рассчитать. Не понимаю почему на реале не хочет считать?

Логов нет, поэтому догадок может быть в разы больше.

Как вариант, при торговле кроссами если в обзоре рынка не выбрана пара с валютой депозита, торговать не будет.

Например торгуем EURJPY, валюта депозита USD, в обзоре рынка должны присутствовать EURUSD  и  USDJPY.

 
Aleksandr Slavskii #:

Логов нет, поэтому догадок может быть в разы больше.

Как вариант, при торговле кроссами если в обзоре рынка не выбрана пара с валютой депозита, торговать не будет.

Например торгуем EURJPY, валюта депозита USD, в обзоре рынка должны присутствовать EURUSD  и  USDJPY.

Счёт в USD pro cent, торговля XAUUSD 

 

Всем привет. Подскажите новичку, кого не затруднит.  Не могу отрисовать одну стрелку на первом баре с помощью буферов в MQL5

В MQL4 делаю так:

Объявляю глобальную переменную double XX[];

в init пишу:

   SetIndexBuffer(0,XX);

   SetIndexStyle(0,DRAW_ARROW);

   SetIndexArrow(0,108);

в Oncalculate пишу:

XX[1]=High[1]; получаю нарисованную стрелку над свечой 1. и все

По аналогии делаю в MQL5:

Объявляю глобальную переменную double XX[];

в init пишу:

SetIndexBuffer(0,XX,INDICATOR_DATA);

PlotIndexSetInteger(0,PLOT_ARROW,108);

в Oncalculate пишу:

XX[1]=high[1]; - не рисует

XX[1]=iHigh(Symbol(),PERIOD_CURRENT,1); - тоже не рисует

Естественно даже вв шапке указано:

#property indicator_buffers 1

#property indicator_plots   1

#property indicator_type1   DRAW_ARROW

#property indicator_color1  clrGreen

#property indicator_width1  1

Что я делаю не так, подскажите пожалуйста !!!

 
Vyacheslav Pronenko #:

XX[1]=high[1]; - не рисует

Что я делаю не так, подскажите пожалуйста !!!

А если так:

XX[rates_total-1]=high[rates_total-1];

или так:

ArraySetAsSeries(XX,true);
ArraySetAsSeries(high,true);
XX[1]=high[1];
 
Aleksandr Slavskii #:

А если так:

или так:

Спасибо, действительно в On Calculate - это работает.

XX[rates_total-1]=high[rates_total-1];

А как быть если тот же самый момент, только надо реализовать в отдельной функции?

Т.е.

void funkc_()

{

XX[rates_total-1]=high[rates_total-1];

Здесь то доступа к RATES_TOTAL и HIGH нету ? И как быть в этой ситуации ?

}

Вообще MQL5 реально сложнее и не понятнее чем MQL4, естественно "для меня"

Причина обращения: