В чем разница в программировании символов Forex и CFD/Indices Symbol на MQL5?

 

Я видел, что советник, который работает с символами Forex, такими как EURUSD, AUDCAD и т. д., не работает одинаково с CFD или индексами, такими как SP500, DE30 и т. д.

Пожалуйста, помогите мне узнать, что нужно изменить в советниках, сделанных для Forex, чтобы работать с CFD. Есть ли какие-либо изменения, которые мне нужно учесть при написании советника для Forex, чтобы он работал как на Forex, так и на CFD.

 

Расчет залога за объем  другой.

 
Dmitiry Ananiev # :

Расчет залога за объем  другой.

Благодарю за ваш ответ.

Подскажите, пожалуйста, чем он отличается и что мне нужно сделать, если я хочу сделать один советник на всех?

 
jaffer wilson #:

Благодарю за ваш ответ.

Подскажите, пожалуйста, чем он отличается и что мне нужно сделать, если я хочу сделать один советник на всех?

Универсальный советник возможен, нужно на каждом торговом инструменте где будет работать эксперт, узнать Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы. В этих категориях инструментов способ расчета разный.

Запросы об инструменте корректно работают как в МТ4 так и в МТ5

https://docs.mql4.com/ru/constants/environment_state/marketinfoconstants

Информация об инструменте - Состояние окружения - Константы, перечисления и структуры - Справочник MQL4
Информация об инструменте - Состояние окружения - Константы, перечисления и структуры - Справочник MQL4
  • docs.mql4.com
Информация об инструменте - Состояние окружения - Константы, перечисления и структуры - Справочник MQL4
 

Так же для CFD реальное кредитное плечо совсем не такое как для Forex. 

Реальное кредитное плечо CFD MT4 код

//+-----------------------------------------------------------------------------+
//|  Описание : CFD Leverage                                                    |
//+-----------------------------------------------------------------------------+
int CFDLeverage(string CryptoName)
  {
   double   CFDLVR = 0;
   double   CMP = MarketInfo(CryptoName,MODE_BID);
   double   FMP = MarketInfo(CryptoName,MODE_MARGINREQUIRED);

   if(FMP==0) //исключение деления на ноль, пока не загрузились данные
      FMP=1;

   CFDLVR = NormalizeDouble((CMP/FMP),0);

   return (int)(CFDLVR);
  }

//--- End ---

Реальное кредитное плечо CFD MT5 код

//+-----------------------------------------------------------------------------+
//|  Описание : CFD Leverage                                                    |
//+-----------------------------------------------------------------------------+
int CFDLeverage(string CryptoName)
  {
   double   CFDLVR = 0;
   double   CMP = SymbolInfoDouble(CryptoName,SYMBOL_BID);
   double   FMP = SymbolInfoDouble(CryptoName,SYMBOL_MARGIN_INITIAL);

   if(FMP==0) //исключение деления на ноль, пока не загрузились данные
      FMP=1;

   CFDLVR = NormalizeDouble((CMP/FMP),0);

   return (int)(CFDLVR);
  }

//--- End ---



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