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

 
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);

 

Как определить неготовность индикатора работать с другим таймфрэймом? 

История не подкачивается (не строится) для соседних таймфрэймов. Работает индикатор на М15, но нужно посмотреть Н1 (поверх графика М15), переключаешь - и пустой чарт. Обновляешь через пару секунд - красота, все буфера отрисованы. 

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

 
Igor Zakharov:

TesterHideIndicators(true);

Огромное спасибо )))

 

не удаётся получить значения АТР с другого таймфрейма:

ATR_handle=iATR(_Symbol,ATR_TF,ATR_Period);
CopyBuffer(ATR_handle,0,time[i],1,ATR);

с текущего - работает. со старших - всегда 0

 

На фьючерсах как создать непрерывный контракт? для технического анализа графиков?

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