Подскажите как получить значения отмеченные красными квадратами?
Первое значение получается функцией SymbolInfoMarginRate(), а вот второе и третье не пойму как получить.
Символ USDJPY метаквотовский демосервер.
Вообще запутался. Вроде форекс, ничего сложного, но как рассчитать маржу не используя OrderCalcMargin()?
У меня не хватает исходных данных и где их брать я не знаю, чтоб рассчитать вот это. Маржа по символу USDJPY , в зависимости от размера лота, рассчитана функцией OrderCalcMargin().
Подскажите как получить значения отмеченные красными квадратами?
Первое значение получается функцией SymbolInfoMarginRate(), а вот второе и третье не пойму как получить.
Символ USDJPY метаквотовский демосервер.
Вообще запутался. Вроде форекс, ничего сложного, но как рассчитать маржу не используя OrderCalcMargin()?
У меня не хватает исходных данных и где их брать я не знаю, чтоб рассчитать вот это. Маржа по символу USDJPY , в зависимости от размера лота, рассчитана функцией OrderCalcMargin().
Как рассчитать эту маржу не используя функцию OrderCalcMargin()?
Может вот это поможет?
SYMBOL_MARGIN_INITIAL
Начальная (инициирующая) маржа обозначает размер необходимых залоговых средств в маржинальной валюте для открытия позиции объемом в один лот. Используется при проверке средств клиента при входе в рынок.
Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функцияSymbolInfoMarginRate().
double
SYMBOL_MARGIN_MAINTENANCE
Поддерживающая маржа по инструменту. В случае если задана – указывает размер маржи в маржинальной валюте инструмента, удерживаемой с одного лота. Используется при проверке средств клиента при изменении состояния счета клиента. Если поддерживающая маржа равна 0, то используется начальная маржа.
Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функцияSymbolInfoMarginRate().
Я вообще не пойму зачем писать формулы в справке, создавать кучу функций, которые не работают не то, что с брокерами, они не работают у автора-создателя.
Справка говорит, что считать маржу надо по этой формуле Lots * Contract_Size / Leverage * Margin_Rate
Где у меня ошибка?
ЗЫ. Собственно зачем заморачиваться с поиском маржи, если есть OrderCalcMargin? Да просто, эта функция в тестере работает через раз, может в начале тестирования возвращать ноль, а потом начать нормально работать, а может и наоборот глюкнуть.
Может она и в терминале так же работает.Не проверял. Вот это будет реально подстава от разработчиков)
Я вообще не пойму зачем писать формулы в справке, создавать кучу функций, которые не работают не то, что с брокерами, они не работают у автора-создателя.
На всех форекс символах, выдаёт ноль.
А что не так в этом методе?
Справка говорит, что считать маржу надо по этой формуле Lots * Contract_Size / Leverage * Margin_Rate
Где у меня ошибка?
ЗЫ. Собственно зачем заморачиваться с поиском маржи, если есть OrderCalcMargin? Да просто, эта функция в тестере работает через раз, может в начале тестирования возвращать ноль, а потом начать нормально работать, а может и наоборот глюкнуть.
Может она и в терминале так же работает.Не проверял. Вот это будет реально подстава от разработчиков)
//+------------------------------------------------------------------+//| До_Аута(4).mq4 |//| Copyright 2023, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2023, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strict#property script_show_inputsinputdouble lot_inp=0.01; //объемMqlTick tik;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
string name_id=" ",base=" ",quote=" ",currency= " ",sym=" ";
int leverage=0;
double bid=0.0,
ask=0.0,
size_contract=0.0,
res=0.0;
name_id=ChartSymbol(0); //Возвращает имя символа текущего графика.
base=SymbolInfoString(name_id,SYMBOL_CURRENCY_BASE); //Базовая ваюта инструмента
quote=SymbolInfoString(name_id,SYMBOL_CURRENCY_PROFIT); //Валюта прибыли
currency= AccountCurrency(); // валюта депозита
leverage=AccountLeverage(); // плечо текущего счета
size_contract=SymbolInfoDouble(name_id,SYMBOL_TRADE_CONTRACT_SIZE);//Размер торгового контракта//---Определим размер маржи для обратной котировки---------if(base!=currency&"e==currency) //Если валюта прибыли,-валюта депозита
{
sym=base+currency;
Print(sym);
if(SymbolInfoTick(sym,tik))
bid=tik.bid;
res=(size_contract*lot_inp)/leverage*bid;
}
//---Подсчитаем маржу для прямой котировки-----------------if(base==currency&"e!=currency)//Если валюта депозита,- базовая для инструмента
{
res=(size_contract*lot_inp)/leverage;
}
//---Рассчитаем маржу для «кросс-курса»---------------------if(base!=currency&"e!=currency)//Если в символе инструмента нет базовой валюты депозита
{
if(SymbolInfoTick(base+currency,tik))
bid=tik.bid;
res=(size_contract*lot_inp)/leverage*bid;
}
//---Рассчитаем маржу для «XAUUSD»if(name_id=="XAUUSD")
{
if(SymbolInfoTick(name_id,tik))
bid=tik.bid;
res=(lot_inp*bid/leverage*100);
}
Print("res = ",res);
}
//+------------------------------------------------------------------+
Я вообще не пойму зачем писать формулы в справке, создавать кучу функций, которые не работают не то, что с брокерами, они не работают у автора-создателя.
На всех форекс символах, выдаёт ноль.
А что не так в этом методе?
Справка говорит, что считать маржу надо по этой формуле Lots * Contract_Size / Leverage * Margin_Rate
Где у меня ошибка?
ЗЫ. Собственно зачем заморачиваться с поиском маржи, если есть OrderCalcMargin? Да просто, эта функция в тестере работает через раз, может в начале тестирования возвращать ноль, а потом начать нормально работать, а может и наоборот глюкнуть.
Может она и в терминале так же работает.Не проверял. Вот это будет реально подстава от разработчиков)
На счёте MQ-Demo всё вроде как работает. Сделайте упрощённый код для проверки, покажите всем… Может подскажут в чём ошибка.
Я пользуюсь функцией OrderCheck() и не смотрите, что там написано
Функция OrderCheck() проверяет достаточность средств для совершения требуемой торговой операции. Результаты проверки помещаются в поля структуры MqlTradeCheckResult
Достаточно посмотреть структуру
structMqlTradeCheckResult
{
uint retcode; // Код ответа double balance; // Баланс после совершения сделки double equity; // Эквити после совершения сделки double profit; // Плавающая прибыль double margin; // Маржевые требования double margin_free; // Свободная маржа double margin_level; // Уровень маржи string comment; // Комментарий к коду ответа (описание ошибки)
};
и увидим, что и баланс, и эквити после сделки покажет, и маржу, и прочее… И пользоваться этой функцией вовсе не напряжно. Структура запроса MqlTradeRequest заполняется по-любому. Так вот её делаем на глобальном уровне, заполняем, проверяем и прямо с этой структурой отправляем OrderSend(). Правда есть беда в том, что в СБ она работает как-то не так. Я не понял причину, просто для открытия позиции не стал пользоваться СБ.
Я пользуюсь функцией OrderCheck() и не смотрите, что там написано
Достаточно посмотреть структуру
и увидим, что и баланс, и эквити после сделки покажет, и маржу, и прочее… И пользоваться этой функцией вовсе не напряжно. Структура запроса MqlTradeRequest заполняется по-любому. Так вот её делаем на глобальном уровне, заполняем, проверяем и прямо с этой структурой отправляем OrderSend(). Правда есть беда в том, что в СБ она работает как-то не так. Я не понял причину, просто для открытия позиции не стал пользоваться СБ.
Когда-то давно столкнулся с тем, что OrderCheck() иногда, в каких-то редких условиях, возвращает false, хотя реально средств достаточно и ордер успешно отправляется (неттинг, ФОРТС, Открытие).
Поскольку ситуация трудновоспроизводимая, не стал исследовать, что именно в таком случае возвращается в структуре, а просто отказался от использования этой функции.
Объясните, пожалуйста, как мне найти в истории сегодняшнего дня закрытые позиции?
И посмотреть их время
Тёмный лес какой-то с этими айди
Объясните, пожалуйста, как мне найти в истории сегодняшнего дня закрытые позиции?
Указанный Вами пример для другого - найти все сделки по уже известному идентификатору позиции.
А у Вас, понимаю, нужно найти идентификатор позиции и время её закрытия.
Лучше здесь смотрите пример: https://www.mql5.com/ru/docs/trading/historydealgetinteger
По найденным сделкам ищите сделки ENTRY_OUT и их идентификатор позиции.
В сделке ENTRY_OUT есть её время - это время закрытия позиции, идентификатор которой указан в DEAL_POSITION_ID
Указанный Вами пример для другого - найти все сделки по уже известному идентификатору позиции.
А у Вас, понимаю, нужно найти идентификатор позиции и время её закрытия.
Лучше здесь смотрите пример: https://www.mql5.com/ru/docs/trading/historydealgetinteger
По найденным сделкам ищите сделки ENTRY_OUT и их идентификатор позиции.
В сделке ENTRY_OUT есть её время - это время закрытия позиции, идентификатор которой указан в DEAL_POSITION_ID
Благодарю Вас
Подскажите как получить значения отмеченные красными квадратами?
Первое значение получается функцией SymbolInfoMarginRate(), а вот второе и третье не пойму как получить.
Символ USDJPY метаквотовский демосервер.
Вообще запутался. Вроде форекс, ничего сложного, но как рассчитать маржу не используя OrderCalcMargin()?
У меня не хватает исходных данных и где их брать я не знаю, чтоб рассчитать вот это. Маржа по символу USDJPY , в зависимости от размера лота, рассчитана функцией OrderCalcMargin().
Как рассчитать эту маржу не используя функцию OrderCalcMargin()?
Подскажите как получить значения отмеченные красными квадратами?
Первое значение получается функцией SymbolInfoMarginRate(), а вот второе и третье не пойму как получить.
Символ USDJPY метаквотовский демосервер.
Вообще запутался. Вроде форекс, ничего сложного, но как рассчитать маржу не используя OrderCalcMargin()?
У меня не хватает исходных данных и где их брать я не знаю, чтоб рассчитать вот это. Маржа по символу USDJPY , в зависимости от размера лота, рассчитана функцией OrderCalcMargin().
Как рассчитать эту маржу не используя функцию OrderCalcMargin()?
Может вот это поможет?
SYMBOL_MARGIN_INITIAL
Начальная (инициирующая) маржа обозначает размер необходимых залоговых средств в маржинальной валюте для открытия позиции объемом в один лот. Используется при проверке средств клиента при входе в рынок.
Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().
double
SYMBOL_MARGIN_MAINTENANCE
Поддерживающая маржа по инструменту. В случае если задана – указывает размер маржи в маржинальной валюте инструмента, удерживаемой с одного лота. Используется при проверке средств клиента при изменении состояния счета клиента. Если поддерживающая маржа равна 0, то используется начальная маржа.
Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().
double
Может вот это поможет?
Увы, не поможет.
Я вообще не пойму зачем писать формулы в справке, создавать кучу функций, которые не работают не то, что с брокерами, они не работают у автора-создателя.
На всех форекс символах, выдаёт ноль.
А что не так в этом методе?
Справка говорит, что считать маржу надо по этой формуле Lots * Contract_Size / Leverage * Margin_Rate
Где у меня ошибка?
ЗЫ. Собственно зачем заморачиваться с поиском маржи, если есть OrderCalcMargin? Да просто, эта функция в тестере работает через раз, может в начале тестирования возвращать ноль, а потом начать нормально работать, а может и наоборот глюкнуть.
Может она и в терминале так же работает.Не проверял. Вот это будет реально подстава от разработчиков)
Увы, не поможет.
Я вообще не пойму зачем писать формулы в справке, создавать кучу функций, которые не работают не то, что с брокерами, они не работают у автора-создателя.
На всех форекс символах, выдаёт ноль.
А что не так в этом методе?
Справка говорит, что считать маржу надо по этой формуле Lots * Contract_Size / Leverage * Margin_Rate
Где у меня ошибка?
ЗЫ. Собственно зачем заморачиваться с поиском маржи, если есть OrderCalcMargin? Да просто, эта функция в тестере работает через раз, может в начале тестирования возвращать ноль, а потом начать нормально работать, а может и наоборот глюкнуть.
Может она и в терминале так же работает.Не проверял. Вот это будет реально подстава от разработчиков)
Один и десять лотов.
Верхние строчки этот скрипт. Нижние правильные.
Спасибо, в этом скрипте более понятно написаны методы для обратных пар и кросов, чем в книге.
Но проблему он не решил.
Увы, не поможет.
Я вообще не пойму зачем писать формулы в справке, создавать кучу функций, которые не работают не то, что с брокерами, они не работают у автора-создателя.
На всех форекс символах, выдаёт ноль.
А что не так в этом методе?
Справка говорит, что считать маржу надо по этой формуле Lots * Contract_Size / Leverage * Margin_Rate
Где у меня ошибка?
ЗЫ. Собственно зачем заморачиваться с поиском маржи, если есть OrderCalcMargin? Да просто, эта функция в тестере работает через раз, может в начале тестирования возвращать ноль, а потом начать нормально работать, а может и наоборот глюкнуть.
Может она и в терминале так же работает.Не проверял. Вот это будет реально подстава от разработчиков)
На счёте MQ-Demo всё вроде как работает. Сделайте упрощённый код для проверки, покажите всем… Может подскажут в чём ошибка.
Я пользуюсь функцией OrderCheck() и не смотрите, что там написано
Функция OrderCheck() проверяет достаточность средств для совершения требуемой торговой операции. Результаты проверки помещаются в поля структуры MqlTradeCheckResult
Достаточно посмотреть структуру
и увидим, что и баланс, и эквити после сделки покажет, и маржу, и прочее… И пользоваться этой функцией вовсе не напряжно. Структура запроса MqlTradeRequest заполняется по-любому. Так вот её делаем на глобальном уровне, заполняем, проверяем и прямо с этой структурой отправляем OrderSend(). Правда есть беда в том, что в СБ она работает как-то не так. Я не понял причину, просто для открытия позиции не стал пользоваться СБ.
Alexey Viktorov #:
Я пользуюсь функцией OrderCheck() и не смотрите, что там написано
Достаточно посмотреть структуру
и увидим, что и баланс, и эквити после сделки покажет, и маржу, и прочее… И пользоваться этой функцией вовсе не напряжно. Структура запроса MqlTradeRequest заполняется по-любому. Так вот её делаем на глобальном уровне, заполняем, проверяем и прямо с этой структурой отправляем OrderSend(). Правда есть беда в том, что в СБ она работает как-то не так. Я не понял причину, просто для открытия позиции не стал пользоваться СБ.
Когда-то давно столкнулся с тем, что OrderCheck() иногда, в каких-то редких условиях, возвращает false, хотя реально средств достаточно и ордер успешно отправляется (неттинг, ФОРТС, Открытие).
Поскольку ситуация трудновоспроизводимая, не стал исследовать, что именно в таком случае возвращается в структуре, а просто отказался от использования этой функции.