Нет, потому что задача другая. Мне не нужно знать хватит ли мне денег, мне нужно знать сколько нужно денег.
Вы невнимательно читали документацию. Кроме нехватки денег в структуре есть и значение маржи, и уровень маржи…
structMqlTradeCheckResult
{
uint retcode; // Код ответа double balance; // Баланс после совершения сделки double equity; // Эквити после совершения сделки double profit; // Плавающая прибыль doublemargin; // Маржевые требованияdouble margin_free; // Свободная маржа double margin_level; // Уровень маржи string comment; // Комментарий к коду ответа (описание ошибки)
};
Только вот маржу показывает не на сделку, а размер маржи текущий плюс маржу на предполагаемую сделку.
Но проверить у меня не получается… получил ошибку 4756 — «Не удалось отправить торговый запрос». Счёт есть, но денег на нём нет. Всё никак не решусь начать торговлю.
Если есть желание проверить, вот код слепленный из вашего
#property script_show_inputs
inputENUM_ORDER_TYPE inpOrderType = ORDER_TYPE_BUY;
/********************Script program start function*******************/voidOnStart()
{
MqlTradeRequest request; // request dataMqlTradeResult result; // result dataMqlTradeCheckResult check_result; // result check datadouble price = 0.0;
price = inpOrderType == ORDER_TYPE_BUY ? SymbolInfoDouble(_Symbol, SYMBOL_ASK) : SymbolInfoDouble(_Symbol, SYMBOL_BID);
//--- Искомая маржаdouble margin = 0.0;
if(OrderCalcMargin(inpOrderType, _Symbol, 1, price, margin))
Print(_Symbol+": MARGIN для цены "+DoubleToString(price, _Digits)+" "+EnumToString(inpOrderType)+" = "+DoubleToString(margin, 2));
//---
request.action = TRADE_ACTION_DEAL; // тип торговой операции
request.symbol = Symbol(); // символ
request.volume = 1; // объем в 0.1 лот
request.type = inpOrderType; // тип ордера
request.price = price; // цена для открытия
request.deviation= 5; // допустимое отклонение от цены Comment("", "\n"if(!OrderCheck(request, check_result))
Print(__LINE__, " ", GetLastError());
Print(_Symbol+": MARGIN для цены "+DoubleToString(price, _Digits)+" "+EnumToString(inpOrderType)+" = "+DoubleToString(check_result.margin, 2));
Comment("", "\n"
);
}/******************************************************************/
Вы невнимательно читали документацию. Кроме нехватки денег в структуре есть и значение маржи, и уровень маржи…
Только вот маржу показывает не на сделку, а размер маржи текущий плюс маржу на предполагаемую сделку.
Но проверить у меня не получается… получил ошибку 4756 — «Не удалось отправить торговый запрос». Счёт есть, но денег на нём нет. Всё никак не решусь начать торговлю.
Если есть желание проверить, вот код слепленный из вашего
Получаю ту же ошибку. Возможно, мне сейчас так же не хватает денег. Но, опять таки, если эта функция завязана на предварительном определении доступности нужного кол-ва средств - толка от нее немного.
В идеале, нужно определить сколько нужно маржи даже при 0 свободных.
Вы невнимательно читали документацию. Кроме нехватки денег в структуре есть и значение маржи, и уровень маржи…
Только вот маржу показывает не на сделку, а размер маржи текущий плюс маржу на предполагаемую сделку.
Но проверить у меня не получается… получил ошибку 4756 — «Не удалось отправить торговый запрос». Счёт есть, но денег на нём нет. Всё никак не решусь начать торговлю.
Если есть желание проверить, вот код слепленный из вашего
Нет, потому что задача другая. Мне не нужно знать хватит ли мне денег, мне нужно знать сколько нужно денег.
Вы невнимательно читали документацию. Кроме нехватки денег в структуре есть и значение маржи, и уровень маржи…
Только вот маржу показывает не на сделку, а размер маржи текущий плюс маржу на предполагаемую сделку.
Но проверить у меня не получается… получил ошибку 4756 — «Не удалось отправить торговый запрос». Счёт есть, но денег на нём нет. Всё никак не решусь начать торговлю.
Если есть желание проверить, вот код слепленный из вашего
Вы невнимательно читали документацию. Кроме нехватки денег в структуре есть и значение маржи, и уровень маржи…
Только вот маржу показывает не на сделку, а размер маржи текущий плюс маржу на предполагаемую сделку.
Но проверить у меня не получается… получил ошибку 4756 — «Не удалось отправить торговый запрос». Счёт есть, но денег на нём нет. Всё никак не решусь начать торговлю.
Если есть желание проверить, вот код слепленный из вашего
Получаю ту же ошибку. Возможно, мне сейчас так же не хватает денег. Но, опять таки, если эта функция завязана на предварительном определении доступности нужного кол-ва средств - толка от нее немного.
В идеале, нужно определить сколько нужно маржи даже при 0 свободных.
Вы невнимательно читали документацию. Кроме нехватки денег в структуре есть и значение маржи, и уровень маржи…
Только вот маржу показывает не на сделку, а размер маржи текущий плюс маржу на предполагаемую сделку.
Но проверить у меня не получается… получил ошибку 4756 — «Не удалось отправить торговый запрос». Счёт есть, но денег на нём нет. Всё никак не решусь начать торговлю.
Если есть желание проверить, вот код слепленный из вашего
Для Открытия:
2022.06.07 12:50:46.543 checkmargin (Si-9.22,M1) Si-9.22: MARGIN для цены 65145 ORDER_TYPE_BUY = 10219.19
2022.06.07 12:50:46.544 checkmargin (Si-9.22,M1) 24 4756
2022.06.07 12:50:46.544 checkmargin (Si-9.22,M1) Si-9.22: MARGIN для цены 65145 ORDER_TYPE_BUY = 0.00
Значение через SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_INITIAL); дает значение 6575р
Открытая поза дает 6559.19р
Для Открытия:
2022.06.07 12:50:46.543 checkmargin (Si-9.22,M1) Si-9.22: MARGIN для цены 65145 ORDER_TYPE_BUY = 10219.19
2022.06.07 12:50:46.544 checkmargin (Si-9.22,M1) 24 4756
2022.06.07 12:50:46.544 checkmargin (Si-9.22,M1) Si-9.22: MARGIN для цены 65145 ORDER_TYPE_BUY = 0.00
Значение через SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_INITIAL); дает значение 6575р
Открытая поза дает 6559.19р
Здравствуйте. Можете проверить для сбера?
Как я понимаю, свободных средств Вам хватает для отправки фьючерса?
Здравствуйте. Можете проверить для сбера?
2022.06.07 13:06:39.178 checkmargin (SBRF-6.22,M1) 24 4756
2022.06.07 13:06:39.178 checkmargin (SBRF-6.22,M1) SBRF-6.22: MARGIN для цены 11790 ORDER_TYPE_BUY = 0.00
Значение через SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_INITIAL); дает значение 3592р
Открытая поза дает 3454.00р
2022.06.07 13:06:39.178 checkmargin (SBRF-6.22,M1) SBRF-6.22: MARGIN для цены 11790 ORDER_TYPE_BUY = 5392.00
2022.06.07 13:06:39.178 checkmargin (SBRF-6.22,M1) 24 4756
2022.06.07 13:06:39.178 checkmargin (SBRF-6.22,M1) SBRF-6.22: MARGIN для цены 11790 ORDER_TYPE_BUY = 0.00
Значение через SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_INITIAL); дает значение 3592р
Открытая поза дает 3454.00р
Спасибо. А Вы это через функцию OrderCheck() сделали?
Кстати... OrderCheck() ведь не может исполняться в индикаторах насколько я знаю?
Спасибо. А Вы это через функцию OrderCheck() сделали?
Кстати... OrderCheck() ведь не может исполняться в индикаторах насколько я знаю?
Код взят без изменений выше от Алексея Викторова. Это не индикатор, это - скрипт.
Я знаю, что Вы использовали скрипт. Просто возник вопрос про индикатор. Ведь используется торговая функция. А индикаторы не могут торговать.
Просто сейчас пишу индикатор для визуализации. Значит OrderCheck() мне в любом случае не подойдет.
Когда-то давно отказался от OrderCheck() - он иногда не давал отправить запросы, которые на самом деле нормально отправлялись.
Возможно, это уже пофиксили, но проверять на боевых роботах не хочу, ситуация редкая и трудноуловимая.
Когда-то давно отказался от OrderCheck() - он иногда не давал отправить запросы, которые на самом деле нормально отправлялись.
Возможно, это уже пофиксили, но проверять на боевых роботах не хочу, ситуация редкая и трудноуловимая.