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

 

Пытаюсь работать со встроенным календарем. А что есть сурс? Почему данные отличаются, например сравнивая с investing.com.

Вот скачал в файл встроенные новости (время сервера GMT+2):

2018.01.11 15:30        EUR     ECB Monetary Policy Meeting Accounts    CALENDAR_IMPORTANCE_MODERATE
2018.01.11 16:30        USD     PPI m/m CALENDAR_IMPORTANCE_MODERATE
2018.01.11 16:30        USD     Core PPI m/m    CALENDAR_IMPORTANCE_LOW
2018.01.11 16:30        USD     PPI y/y CALENDAR_IMPORTANCE_LOW
2018.01.11 16:30        USD     Core PPI y/y    CALENDAR_IMPORTANCE_LOW
2018.01.11 16:30        CAD     New Housing Price Index m/m     CALENDAR_IMPORTANCE_MODERATE
2018.01.11 16:30        USD     Continuing Jobless Claims       CALENDAR_IMPORTANCE_LOW
2018.01.11 16:30        USD     Initial Jobless Claims  CALENDAR_IMPORTANCE_MODERATE
2018.01.11 16:30        USD     Initial Jobless Claims 4-Week Average   CALENDAR_IMPORTANCE_LOW
2018.01.11 17:00        MXN     Industrial Production n.s.a. y/y        CALENDAR_IMPORTANCE_LOW
2018.01.11 17:00        MXN     Consumer Confidence Index       CALENDAR_IMPORTANCE_LOW
2018.01.11 17:00        MXN     Consumer Confidence Index n.s.a.        CALENDAR_IMPORTANCE_LOW

А вот с investing.com за ту же дату скриншот:


Разница в Importance. Важная новость на investing.com может быть Moderate в MQL5 календаре.

Разницу времени в час (на investing.com также запрошено с GMT+2) я отношу к переходу DST.

 

Здравствуйте.

Никто не подскажет, как перерисовать индикатор из функции OnChartEvent()? Я в этой функции меняю значение буфера индикатора, но на графике индикатор не меняется. ChartRedraw() не помогает.

На графике индикатор меняется только при запуске OnCalculate(). Можно ли как-нибудь перерисовать индикатор без запуска OnCalculate()? Ну или как-нибудь принудительно запустить OnCalculate()?

 
MQL_User:

Здравствуйте.

Никто не подскажет, как перерисовать индикатор из функции OnChartEvent()? Я в этой функции меняю значение буфера индикатора, но на графике индикатор не меняется. ChartRedraw() не помогает.

На графике индикатор меняется только при запуске OnCalculate(). Можно ли как-нибудь перерисовать индикатор без запуска OnCalculate()? Ну или как-нибудь принудительно запустить OnCalculate()?

интересный вопрос, хотел давно еще перерисовать индикатор в этом событие, посмотреть как они будут схожи на графике

пока все еще приходится использовать это событие в мультивалютнике, разработчики нормальный мультирежим видимо до MQL6 отложили

---

еще вопрос. разработчики как всегда дали большое поле для размышления

один и тот же индикатор можно построить двумя способами:

1 plot и 1 цветной буфер, или тот же индикатор c 2 plot буферами - один наверх со своим цветом, а второй вниз тоже со своим цветом, это вариант уже без колор буфера.

какой из них быстрее или правильней будет? Хотелось бы ответ специалиста

---

казалось бы, что с 1 plot + 1 color buffer можно смотреть 0 - тренд вверх и 1 вниз, а если нужно значение, то с plot можно взять. все раздельно и понятно, но

у второго варианта 2 plot буфера -  и в нем сразу в первом EMPTY_VALUE, и во втором значение и соответственно тренд (цвет)

---

MQL4 полностью пропустил, если второй вариант это наследие как раз его, есть ли очевидные плюсы использования 1-способа? (т.е. выбросить второй вариант сразу)

двум хорошим специалистам задал вопрос, не смогли ответить.

 
Fast235:

интересный вопрос, хотел давно еще перерисовать индикатор в этом событие, посмотреть как они будут схожи на графике

пока все еще приходится использовать это событие в мультивалютнике, разработчики нормальный мультирежим видимо до MQL6 отложили

---

еще вопрос. разработчики как всегда дали большое поле для размышления

один и тот же индикатор можно построить двумя способами:

1 plot и 1 цветной буфер, или тот же индикатор c 2 plot буферами - один наверх со своим цветом, а второй вниз тоже со своим цветом, это вариант уже без колор буфера.

какой из них быстрее или правильней будет? Хотелось бы ответ специалиста

---

казалось бы, что с 1 plot + 1 color buffer можно смотреть 0 - тренд вверх и 1 вниз, а если нужно значение, то с plot можно взять. все раздельно и понятно, но

у второго варианта 2 plot буфера -  и в нем сразу в первом EMPTY_VALUE, и во втором значение и соответственно тренд (цвет)

---

MQL4 полностью пропустил, если второй вариант это наследие как раз его, есть ли очевидные плюсы использования 1-способа? (т.е. выбросить второй вариант сразу)

двум хорошим специалистам задал вопрос, не смогли ответить.

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

 
MQL_User:

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

Это не для индикаторов, а для отображения внесённых изменений в свойства графических объектов.

Вам нужно отправить в индикатор тик - тогда индикатор перерисуется. Ну.., т.е., сделает то, что должен сделать на новом тике.

А чтобы отправить новый тик, нужно либо его дождаться, что не вариант, либо обновить график ПКМ --> Обновить, что тоже не вариант, либо использовать функцию ChartSetSymbolPeriod() с такими параметрами для текущего графика:

ChartSetSymbolPeriod(0,NULL,PERIOD_CURRENT);
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
Документация по MQL5: Операции с графиками / ChartSetSymbolPeriod
  • www.mql5.com
Меняет значения символа и периода указанного графика. Функция работает асинхронно, то есть отдает команду и не ждет окончания ее выполнения. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд. Возвращает true в случае удачного помещения команды в очередь графика, иначе false. Чтобы...
 


здравствуйте, помогите разобраться, написал скрипт который открывает лимитный ордер но по рыночной цене. Всё работает, решил изменить, чтобы выставлял лимит ниже\выше рынка, ничего не получается, хотя код возврата торг. сервера 10009, а GetLastError() возвращает 0. Код:

void OnStart()
 {MqlTradeRequest request={0};
  MqlTradeResult  result={0};
 double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
 double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
 int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);  
 double p=NormalizeDouble(ChartPriceOnDropped(),digits); 
 if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
 {p=NormalizeDouble(ChartPriceOnDropped()*0.1,digits)/0.1;
 } 
 int V=75;
           if (p<Ask)
            {
             request.action   =TRADE_ACTION_PENDING;                     // тип торговой операции
             request.symbol   =Symbol();                              // символ
             request.volume   =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
             SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE)));  
             if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) 
             { request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
             }                             
             request.type     =ORDER_TYPE_BUY_LIMIT;                        // тип ордера
             request.price    =Ask;                                    // цена для открытия
             request.deviation=50;                                     // допустимое отклонение от цены
             request.sl      =p;                                      // Stop Loss позиции
             request.tp      =NormalizeDouble(Ask+(Ask-p)*3,digits);    // Take Profit позиции
             request.type_filling=ORDER_FILLING_IOC;
             request.type_time=ORDER_TIME_DAY;
             request.stoplimit=Ask;
             OrderSend(request,result);
            }
если  request.price например поставить: Ask-Point()*30 не выставляет, нормализация цены тоже ничего не даёт
 
Артем, что можете сказать, на вопрос выше, интересно мнение. в качестве обучения.
 
Artyom Trishkin:

Это не для индикаторов, а для отображения внесённых изменений в свойства графических объектов.

Вам нужно отправить в индикатор тик - тогда индикатор перерисуется. Ну.., т.е., сделает то, что должен сделать на новом тике.

А чтобы отправить новый тик, нужно либо его дождаться, что не вариант, либо обновить график ПКМ --> Обновить, что тоже не вариант, либо использовать функцию ChartSetSymbolPeriod() с такими параметрами для текущего графика:

Артём, спасибо.

Всё заработало. :)

[Удален]  
Может кто знает как можно отключить вывод на график всех используемых индикаторов в советнике при визуальном тестировании?
 
Сергей Таболин:
Может кто знает как можно отключить вывод на график всех используемых индикаторов в советнике при визуальном тестировании?

TesterHideIndicators(true);