Помогите перейти на MetaTrader 5 без потерь - страница 15

 
Valmars:

...

Валерий, подскажите, что значит вот этот участок кода в calc.mq5:

...

if(StringSubstr(Symbol(), 3, 3)=="CAD") { xxx=1.2175;   }
if(StringSubstr(Symbol(), 3, 3)=="JPY") { xxx=91.425;   }
if(StringSubstr(Symbol(), 3, 3)=="CHF") { xxx=1.1631;   }
if(StringSubstr(Symbol(), 3, 3)=="AUD") { xxx=1/0.6800; }
if(StringSubstr(Symbol(), 3, 3)=="NZD") { xxx=1/0.54;   }
if(StringSubstr(Symbol(), 3, 3)=="GPB") { xxx=1/1.49;   }
if(StringSubstr(Symbol(), 3, 3)=="EUR") { xxx=1/1.3015; }

...

То есть зачем переменной xxx присваивается фиксированные значения?

---

И ещё вопрос. Получается в справке неполная информация о расчёте прибыли для Forex? То есть для расчёта прибыли представлена формула только для обратных котировок (XXXUSD).

Идентификатор

Описание

Формула

SYMBOL_CALC_MODE_FOREX

Forex mode – расчет прибыли и маржи для Форекс

Margin: Lots*Contract_Size/Leverage

Profit: (close_price-open_price)*Contract_Size*Lots

 

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
tol64:

И ещё вопрос. Получается в справке неполная информация о расчёте прибыли для Forex? То есть для расчёта прибыли представлена формула только для обратных котировок (XXXUSD).

Да, похоже Вы правы. Пока можно почитать о расчете прибыли в статье Азбука торговли валютами
Азбука торговли валютами - Статьи по MQL4
  • www.mql5.com
Азбука торговли валютами - Статьи по MQL4: особенности автоматических торговых стратегий
 
Rosh:
Да, похоже Вы правы. Пока можно почитать о расчете прибыли в статье Азбука торговли валютами

Спасибо. Статью точно в закладки, как шпаргалку, а то что-то в голове не получается всё удержать. А лучше, если в справке таблицу дополнить, чтобы всё было централизовано. :)

--- 

А фиксированные значения (на свежую голову надо смотреть :) ) я так понял на случай, если не было данных. Но эти значения ведь тогда нужно всё время корректировать в зависимости от курса той или иной валюты. Поэтому лучше выводить сообщение, что данных нет, а не неправильные значения. 

 
tol64:А фиксированные значения (на свежую голову надо смотреть :) ) я так понял на случай, если не было данных. Но эти значения ведь тогда нужно всё время корректировать в зависимости от курса той или иной валюты. Поэтому лучше выводить сообщение, что данных нет, а не неправильные значения. 

Да, Вы совершенно правы. Сделал так как у автора, поленился, времени не было... Для кросскурсов в МТ4 необходимо явно выбирать в окне 'Обзор рынка' символы обеих валют, выраженные через USD, т.е. , например, для NZDJPY надо  выбрать пары USDJPY и NZDUSD. У автора на сей счёт в преамбуле имеется оговорка:

   "Для кроссов XXXYYY должны быть открыты соответствующие

   основные пары USDYYY или XXXUSD (например для GPBJPY в окне обзора рынка должна

  быть открыта USDJPY)."

В МТ5 лучше поручить это самому индикатору.

 

Piligrim:

Валерий (Valmars), как считаете, есть ли смысл с точки зрения сложности перепаковки предлагать Вам переделать и этот индикатор на MQL5? Очень уж хорошо работает предыдущий, переведённый Вами!:)

Этот индикатор переделать на МТ5 нельзя, так как в МТ5 нет (и не будет) автономных графиков. Как работает индикатор в МТ4 ? Он создаёт автономный график с нестандартным периодом, с приходом новой котировки записывает её в файл .hst этого нестандартного периода. А далее Вы открываетете этот график. Индикатор на каждом тике обновляет (перерисовывает) его с помощью вииндовской dll. В результате Вы видите график с нестандартным периодом обновляемый в реальном времени.

В МТ5 даже формат файлов PERIOD.hc (по которым строятся графики для стандартных периодов) разработчики так и не раскрыли, возможно, именно потому, чтобы нельзя было строить всякие "левые" графики. Полемику по поводу графиков с произвольным периодом можно посмотреть здесь.

 
Valmars:

Да, Вы совершенно правы. Сделал так как у автора, поленился, времени не было... Для кросскурсов в МТ4 необходимо явно выбирать в окне 'Обзор рынка' символы обеих валют, выраженные через USD, т.е. , например, для NZDJPY надо  выбрать пары USDJPY и NZDUSD. У автора на сей счёт в преамбуле имеется оговорка:

   "Для кроссов XXXYYY должны быть открыты соответствующие

   основные пары USDYYY или XXXUSD (например для GPBJPY в окне обзора рынка должна

  быть открыта USDJPY)."

В МТ5 лучше поручить это самому индикатору.

То есть, вместо того списка с фиксированными значениями вполне подошёл бы вот такой код? :

bool flgExit=false;
string arrSymbols[7]={ "CAD","JPY","CHF","AUD","NZD","GBP","EUR" };
//---
for(int i=ArraySize(arrSymbols)-1; i>=0; i--)
  {
   if(flgExit) { break; }
   //---
   if(StringSubstr(Symbol(),3,3)==arrSymbols[i])
     {
      for(int j=SymbolsTotal(false)-1; j>=0; j--)
        {
         if(SymbolName(j,false)=="USD"+arrSymbols[i]+"")
           {
            SymbolSelect("USD"+arrSymbols[i]+"",true);
            //---
            if((xxx=SymbolInfoDouble(SymbolName(j,true),SYMBOL_BID))<=0)
              {
               Comment("Ошибка ("+IntegerToString(GetLastError())+") при получении данных по символу "+SymbolName(j,true)+""); return(0);
              }
            else { flgExit=true; break; }
           }
       }
   }
}
 
Valmars:

Этот индикатор переделать на МТ5 нельзя, так как в МТ5 нет (и не будет) автономных графиков. Как работает индикатор в МТ4 ? Он создаёт автономный график с нестандартным периодом, с приходом новой котировки записывает её в файл .hst этого нестандартного периода. А далее Вы открываетете этот график. Индикатор на каждом тике обновляет (перерисовывает) его с помощью вииндовской dll. В результате Вы видите график с нестандартным периодом обновляемый в реальном времени.

В МТ5 даже формат файлов PERIOD.hc (по которым строятся графики для стандартных периодов) разработчики так и не раскрыли, возможно, именно потому, чтобы нельзя было строить всякие "левые" графики. Полемику по поводу графиков с произвольным периодом можно посмотреть здесь.

В любом случае спасибо, Валерий! Для меня, как не программиста, доходчивая профессиональная консультация гораздо более предпочтительна в плане поиска возможных решений какой-либо проблемы вне моей компетенции.

 
tol64:

То есть, вместо того списка с фиксированными значениями вполне подошёл бы вот такой код? :

Да, только выполнить это и для второго символа кросса и поместить это в ините.

 
Valmars:
Да, только выполнить это и для второго символа кросса и поместить это в ините.

Валерий, если будет свободная минутка, посмотрите исправленную версию. Правильно ли теперь всё сделано с учётом всего, что обсуждали выше? Спасибо.


Файлы:
 
tol64:

...

Обновил файл выше (calcriskprofit.mq5). Опечатку исправил. Вместо GBP было GPB. :)
Причина обращения: