[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 383

 
double MarketInfo( string symbol, int type) 

Это из справки, а можно ли использовать в качестве символа NULL, чтобы "смотреть" только тот инструмент, на котором работает советник?

Просто планируется несколько однотипных экспертов на разных парах.

Вот так, например:

MarketInfo(NULL,MODE_ASK)
 
moskitman:

Это из справки, а можно ли использовать в качестве символа NULL, чтобы "смотреть" только тот инструмент, на котором работает советник?

Вот так, например:

NULL не пройдет вроде.

Но Symbol() сработает =)

 

Доброго времени суток. Вопрос следующего содержания. В книге по MQL4, к-я находится на MQL4.community в главе "Простые программы на MQL" в разделе "Простой эксперт" приведен пример эксперта tradingexpert.mq4 следующего содержания (см. прикрепленный файл). В блоке 1-2 объявлены внешние переменные extern double StopLoss =200 и extern double TakeProfit =39. В блоке 8-9 для расчета параметров SL и TP используется вызов функции New_Stop(StopLoss) и New_Stop(TakeProfit). В блоке 11-12 имеется описание функции.

Вопрос: формальный параметр функции New_Stop имеет тип int (int Parametr), тогда как передаваемые параметры в вызове функции New_Stop(StopLoss) (New_Stop(TakeProfit)) имеют тип double… В книге по MQL4, к-я находится на MQL4.community в главе "Основы языка" в разделе "Функции", в подразделе " Свойства функций" сказано: "Количество, тип и порядок упоминания передаваемых параметров в вызове функции должны совпадать с количеством, типом и порядком упоминания формальных параметров, указанных в описании функции (исключение составляет вызов функции, имеющей умолчательные параметры - см. Вызов функции и Описание функции и оператор return". Как объяснить данное противоречие: ведь в соответствие с последним, при объявлении переменных StopLoss и TakeProfit, надо было указать тип int, а не double (компилятор никаких ошибок не выдает)?

Чтобы не захламлять форум, заранее благодарю за ответ.

Файлы:
 

приветствую, подскажите... перелопатил пол интернета, и информация разная

суть советника, это открытие позиций по разным инструментам. "В реале" работает и показывает текущие цены, но по истории прогнать не могу... функция возвращает ноль.

Что необходимо, а требуется показать текущую котировку по двум валютам EURUSD и EURCHF, например.

Вызываю текущую котировку функцией (историю прогоняю при активном графике EURUSD):

MarketInfo("EURUSD",MODE_BID) ---> получаю текущую цену

MarketInfo("EURCHF ",MODE_BID) ---> возвращает ноль

нашел на этом форуме инфу, что MarketInfo не работает на истории, используйте "iClose"

но и когда вызываю котировку функцией

iClose("EURUSD",PERIOD_M1,0) ---> получаю текущую цену

iClose("EURCHF",PERIOD_M1,0) ---> возвращает ноль

Как еще можно получить в тестере стратегий, текущие котировки на разные инстурменты? Спасибо

 
faton:

Тестер МТ4 не мультивалютный. Иными словами можно тестировать только одновалютные советники.

 
moskitman:

Тестер МТ4 не мультивалютный. Иными словами можно тестировать только одновалютные советники.


спасибо
 
faton:

спасибо

Точнее, тестировать на одном инструменте и можно использовать другие инструменты для анализа.
 
sergeev:


спасибо за помощь!))
 
DhP:

Или как-то так:

спасибо за отклик!! очень помогли!
 
7777877:

Доброго времени суток. Вопрос следующего содержания. В книге по MQL4, к-я находится на MQL4.community в главе "Простые программы на MQL" в разделе "Простой эксперт" приведен пример эксперта tradingexpert.mq4 следующего содержания (см. прикрепленный файл). В блоке 1-2 объявлены внешние переменные extern double StopLoss =200 и extern double TakeProfit =39. В блоке 8-9 для расчета параметров SL и TP используется вызов функции New_Stop(StopLoss) и New_Stop(TakeProfit). В блоке 11-12 имеется описание функции.

Вопрос: формальный параметр функции New_Stop имеет тип int (int Parametr), тогда как передаваемые параметры в вызове функции New_Stop(StopLoss) (New_Stop(TakeProfit)) имеют тип double… В книге по MQL4, к-я находится на MQL4.community в главе "Основы языка" в разделе "Функции", в подразделе " Свойства функций" сказано: "Количество, тип и порядок упоминания передаваемых параметров в вызове функции должны совпадать с количеством, типом и порядком упоминания формальных параметров, указанных в описании функции (исключение составляет вызов функции, имеющей умолчательные параметры - см. Вызов функции и Описание функции и оператор return". Как объяснить данное противоречие: ведь в соответствие с последним, при объявлении переменных StopLoss и TakeProfit, надо было указать тип int, а не double (компилятор никаких ошибок не выдает)?

Чтобы не захламлять форум, заранее благодарю за ответ.

Внешние параметры (extern double StopLoss =200; extern double TakeProfit =39; ), в принципе, должны быть целочисленного типа (точнее по задумке автора - это величина в пунктах). При вызове функции используется неявное приведение типов. Тип с плавающей точкой приводится к целочисленному с потерей точности. В данном случае это не принципиально: размер стопа и профита по замыслу задается в пипсах - это всегда целочисленно.

ИМХО, Код примера написан безобразно.

Использование абсолютного значения констант - очень плохой и неверный стиль, при наличии мнемонических имен.

         if (OrderType()>1)                     // Попался отложенный
           {
 

Худший вариант из реализаций перебора ордеров: более "тормознутого" сложно придумать. Как будто специально тормоза добавляют: лишние вычисления, ненужные вызовы функций - самая дорогая по времени операция, да еще и на каждой итерации цикла. И это при том, что число ордеров не меняется внутри цикла.

   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
Причина обращения: