Не так быстро, как хотелось, но продолжаем.
1. Для MQL5 класс FВSymbolInfo переименован в CFdSymbolInfo в соответствии с традициями синтаксиса языка. Он по прежнему публично наследуется от CSymbolInfo:
PHP код:
class CFdSymbolInfo : public CSymbolInfo
2. В CSymbolInfo почти все поля заполняются в методе Refresh(void) и потом значения параметров просто считываются из переменных.
PHP код:
bool CSymbolInfo::Refresh(void)
{
long tmp_long=0;
//.........
if(!SymbolInfoInteger(m_name, SYMBOL_DIGITS, tmp_long ) )
return(false);
m_digits=(int)tmp_long;
//.........
}
Но значения, касающиеся маржи наверняка будут меняться в процессе торговли. Возможно, их выгоднее по быстродействию выделить в отдельные методы, например, из Refresh(void) выделить строки а-ля:
PHP код:
if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_INITIAL, m_margin_initial))
return(false);
if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_MAINTENA NCE,m_margin_maintenance))
return(false);
if(!SymbolInfoDouble(m_name,SYMBOL_MARGIN_HEDGED,m _margin_hedged))
return(false);
if(!SymbolInfoInteger(m_name,SYMBOL_MARGIN_HEDGED_ USE_LEG,tmp_long))
return(false);
и сделать отдельные методы CFdSymbolInfo. Тут надо не гадать, а взять и написать тест, сколько Refresh занимает времени, что я и сделаю. Вот вам и преимущества простого наследования — не трогаем базовый класс библиотеки, а дополняем нужным наследника.
Базовые классы библиотек в папке \MQL5\Include\.. вообще запрещено модифицировать, так как при первом обновлении терминала ваши труды превратятся в тыкву )).
3. Будет полезно дополнить функции расчета для всего, где задействовано перечисление ENUM_SYMBOL_CALC_MODE. Смотрим справочку и видим полезные формулы:
Для получения информации о способе вычисления величины залоговых средств по инструменту (размера маржинальных требований) предназначено перечисление ENUM_SYMBOL_CALC_MODE.
SYMBOL_CALC_MODE_FOREX
Forex mode – расчет прибыли и маржи для Форекс
Margin: Lots * Contract_Size / Leverage * Margin_Rate
Profit: (close_price - open_price) * Contract_Size*Lots
B таких формул там довольно много, тоже надо внимательно разобраться.
--------------------------------------------------------------------------------------------------
4. Для MQL4 я тупо скопировал содержимое класса CSymbolInfo в CFdSymbolInfo, закомментировав те поля и методы, которых нет в API MT4 (API MT5 гораздо богаче и вкуснее!). Наверняка еще что-то придется дополнить, пока компилируется под МТ4 и слава богу, с пивком потянет!
PHP код:
// Code for MQL4
#ifdef __MQL4__
class CFdSymbolInfo : public CObject
{
protected:
//.........
int m_order_mode; // symbol valid orders
ENUM_SYMBOL_TRADE_EXECUTION m_trade_execution; // symbol trade execution
//ENUM_SYMBOL_CALC_MODE m_trade_calcmode; // symbol trade calcmode
ENUM_SYMBOL_TRADE_MODE m_trade_mode; // symbol trade mode
//ENUM_SYMBOL_SWAP_MODE m_swap_mode; // symbol swap mode
5. Добавил класс СPivotLine, в файле "Include\PivotLine.mqh" и заголовочный файл "Include\InpVars.mqh", где будут находиться входные переменные советника. Люблю разносить сущности по отдельным файлам, а не струячить все огромной портянкой, как делают проггеры-извращенцы. В СPivotLine будем работать с линиями поддержки-сопротивления, как с автоопределением, так и с ручной коррекцией и установкой. Как показывает мой опыт, пока человечество (или я, как мелкая часть человечества

) не придумало полноценный ИИ, полезно иметь возможность выставить такие линии вручную, на основании опыта и интуиции трейдера.
6. Ближайшие планы:
* доработать все вышеописанное
* соорудить зачатки внешней торговой панели на C#
* Сделать класс выработки торговых сигналов на основе канала Hodrick-Preskott. Для начала просто перенесу код канала, как он есть, в класс. Сейчас разрабатываю свои каналы, если выгорит, будет круче, чем HP. Если нет, будем думать дальше.
Замечание по работе с мультиплатформенными программами и использовании storage: Нельзя одновременно редактировать проект с МТ4 и МТ5, при попытке сохранения изменений в storage будет выдана ошибка! Принцип простой — изменили что-то в редакторе МТ5, правый клик по папке проекта, «Отправить изменения в хранилище». Если надо работать в МТ4, правый клик, «Получить изменения из хранилища», изменили что-то, снова отправить, и так работать попеременно.
Так как в выходные
storage может сбоить, приаттачу то, что есть, в конце статьи. Постараюсь чаще появляться на радарах, хороших выходных!
Проект —
FDPanel-MT5.zip