Особенности языка mql5, тонкости и приёмы работы - страница 10

 
Alexey Volchanskiy:
А хеджированую маржу можно как-то посчитать?
Думаю, можно все посчитать через Symbol-функции.
 
fxsaber:
Спасибо за наводку! В дебрях это - SymbolInfoMarginRate. Поэтому теперь так
// Размер свободных средств, необходимых для открытия 1 лота на покупку
double GetMarginRequired( const string Symb )
{
}

Надо четко понимать, что в MT5 в разные стороны могут быть совсем другие маржинальные требования. Т.е. единый MT4-вариант может не прокатывать. На Forex, конечно, такого не будет. Но помнить нужно. Поэтому в общем случае нужно писать так
// Альтернатива OrderCalcMargin
bool MyOrderCalcMargin( const ENUM_ORDER_TYPE action, const string symbol, const double volume, const double price, double &margin )
{
}

Спасибо большое! Сейчас работает везде без проблем. 

Интересно, функция "MyOrderCalcMargin" осталась до сих пор торговая, и если да, то как ней торговать хотя-бы в тестере) 

 
fxsaber:
Думаю, можно все посчитать через Symbol-функции.
К сожалению, Symbol-функции работают криво

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.02.28 10:48

Metaquotes-Demo, USD-счет, RTS-3.17.

TickValue выдает неверное значение - в рублях, а не в валюте счета (USD).

 

FxPro-ECN. Символы GOLD и GOLDEURO имеют один и тот же TickValue. Хотя, очевидно, что они должны отличаться в EURUSD-раз. 

 
fxsaber:

Прикол MT5 на FIBOGroup-MT5 Server SGDJPY

 

В этой ситуации MyOrderCalcMargin считает правильно, а штатная OrderCalcMargin - нет! 


Штатная функция считает в соответствии со спецификацией контракта указанной в настройках инструмента -  с валютой маржи NOK, соответственно за один лот берётся 1000 NOK.

У вас видимо считается расщеплением наименования валютной пары SGDJPY - за один лот берётся 1000 SGD.

Соответственно проблема в неверной спефикации контракта на стороне брокера. Обратитесь к брокеру соответствующего сервера.

 
fxsaber:

Т.е. для придания всем OrderSend синхронизированности с торговым окружением и обхода подводных камней достаточно приведенный исходник оформить в виде mqh-файла и в своих программах делать соответствующий #include.

Можете закончить танцы с бубном.

В СД ответили, что со следующего билда OrderSend() будет работать как надо :) 

 
MQ Alexander:

Штатная функция считает в соответствии со спецификацией контракта указанной в настройках инструмента -  с валютой маржи NOK, соответственно за один лот берётся 1000 NOK.

У вас видимо считается расщеплением наименования валютной пары SGDJPY - за один лот берётся 1000 SGD.

Соответственно проблема в неверной спефикации контракта на стороне брокера. Обратитесь к брокеру соответствующего сервера.

В MT5 есть внутренний скрытый механизм, который умеет любую валюту конвертировать в валюту счета. В данном случае OrderCalcMargin 1000 NOK переводит в соответствующее число USD и выдает его.

Прошу сделать этот механизм открытым. Например,

double CurrencyExchange( const string Currency ); // возвращает курс валюты Currency к валюте счета

Эти курсы валют имеются в терминале 100%, раз OrderCalcMargin их вычисляет. Их работа особенно заметна на MetaQuotes-Demo USD-счетах, когда берешь ФОРТС-символы - у них валюта маржи в RUR.

Это особенно актуально из-за TickValue-фишки/бага

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2017.02.28 10:48

Metaquotes-Demo, USD-счет, RTS-3.17.

TickValue выдает неверное значение - в рублях, а не в валюте счета (USD).

 

FxPro-ECN. Символы GOLD и GOLDEURO имеют один и тот же TickValue. Хотя, очевидно, что они должны отличаться в EURUSD-раз.

 
Здравствуйте! Читаю документацию:
OrdersTotal

Возвращает количество действующих ордеров.

int  OrdersTotal();

Возвращаемое значение

Значение типа int.

Примечание

Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.

При "неттинговом" учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке "Торговля" в панели "Инструменты".

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.

Смотри также

OrderSelect(), OrderGetTicket(), Свойства ордеров
И где же найти расшифровку термина "действующих ордеров"?
"действующие отложенные ордера", а НЕ действующие отложенные ордера, это какие?
 
Leo59:
Здравствуйте! Читаю документацию:
OrdersTotal

Возвращает количество действующих ордеров.

int  OrdersTotal();

Возвращаемое значение

Значение типа int.

Примечание

Не следует путать между собой действующие отложенные ордера и позиции, которые также отображаются на вкладке "Торговля" в панели "Инструменты". Ордер – это распоряжение на проведение торговой операции, а позиция является результатом одной или нескольких сделок.

При "неттинговом" учете позиций (ACCOUNT_MARGIN_MODE_RETAIL_NETTING и ACCOUNT_MARGIN_MODE_EXCHANGE) по каждому символу в любой момент времени может быть открыта только одна позиция, которая является результатом одной или более сделок. Не следует путать между собой позиции и действующие отложенные ордера, которые также отображаются на вкладке "Торговля" в панели "Инструменты".

При независимом представлении позиций (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING) по каждому символу одновременно может быть открыто несколько позиций.

Смотри также

OrderSelect(), OrderGetTicket(), Свойства ордеров
И где же найти расшифровку термина "действующих ордеров"?
"действующие отложенные ордера", а НЕ действующие отложенные ордера, это какие?

Отложенные ордера - байстоп, селлстоп, байлимит и байстоп.

Позиции - бай и селл.

Не действующие - удалённые ордера и закрытые позиции.

 
Vitaly Muzichenko:

Отложенные ордера - байстоп, селлстоп, байлимит и байстоп.

Позиции - бай и селл.

Не действующие - удалённые ордера и закрытые позиции.

Спасибо!
Так как "Ордер – это распоряжение на проведение торговой операции", то к категории "действующие ордера" можно отнести только отложенные ордера, а "Позиции - бай и селл" - это не распоряжение на проведение торговой операции. Или я что-то "не догоняю"?
 
Действующие ордера - торговые приказы, которые ожидают исполнения или отмены, за исключением ордеров TP/SL и MarginCall. Действующими ордерами могут быть BUY и SELL.