Скальпинг в классическом арбитраже - страница 13

 
tapo #:

Нет, потому что задача другая. Мне не нужно знать хватит ли мне денег, мне нужно знать сколько нужно денег.

Вы невнимательно читали документацию. Кроме нехватки денег в структуре есть и значение маржи, и уровень маржи…

struct MqlTradeCheckResult 
  { 
   uint         retcode;             // Код ответа 
   double       balance;             // Баланс после совершения сделки 
   double       equity;              // Эквити после совершения сделки 
   double       profit;              // Плавающая прибыль 
   double       margin;              // Маржевые требования 
   double       margin_free;         // Свободная маржа 
   double       margin_level;        // Уровень маржи 
   string       comment;             // Комментарий к коду ответа (описание ошибки) 
  };

Только вот маржу показывает не на сделку, а размер маржи текущий плюс маржу на предполагаемую сделку.

Но проверить у меня не получается… получил ошибку 4756 — «Не удалось отправить торговый запрос». Счёт есть, но денег на нём нет. Всё никак не решусь начать торговлю.

Если есть желание проверить, вот код слепленный из вашего

#property script_show_inputs

input ENUM_ORDER_TYPE   inpOrderType = ORDER_TYPE_BUY;
/********************Script program start function*******************/
void OnStart()
 {
   MqlTradeRequest   request;              // request data
   MqlTradeResult    result;               // result data
   MqlTradeCheckResult check_result;       // result check data
  double 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"
         );
 }/******************************************************************/
 
Alexey Viktorov #:

Вы невнимательно читали документацию. Кроме нехватки денег в структуре есть и значение маржи, и уровень маржи…

Только вот маржу показывает не на сделку, а размер маржи текущий плюс маржу на предполагаемую сделку.

Но проверить у меня не получается… получил ошибку 4756 — «Не удалось отправить торговый запрос». Счёт есть, но денег на нём нет. Всё никак не решусь начать торговлю.

Если есть желание проверить, вот код слепленный из вашего

Получаю ту же ошибку. Возможно, мне сейчас так же не хватает денег. Но, опять таки, если эта функция завязана на предварительном определении доступности нужного кол-ва средств - толка от нее немного. 

В идеале, нужно определить сколько нужно маржи даже при 0 свободных.

 
Alexey Viktorov #:

Вы невнимательно читали документацию. Кроме нехватки денег в структуре есть и значение маржи, и уровень маржи…

Только вот маржу показывает не на сделку, а размер маржи текущий плюс маржу на предполагаемую сделку.

Но проверить у меня не получается… получил ошибку 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р

 
Dmitriy Skub #:

Для Открытия:

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р

Здравствуйте. Можете проверить для сбера?

Как я понимаю, свободных средств Вам хватает для отправки фьючерса?

 
tapo #:
Здравствуйте. Можете проверить для сбера?
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р

 
Dmitriy Skub #:
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() ведь не может исполняться в индикаторах насколько я знаю?

 
tapo #:

Спасибо. А Вы это через функцию OrderCheck() сделали?

Кстати... OrderCheck() ведь не может исполняться в индикаторах насколько я знаю?

Код взят без изменений выше от Алексея Викторова. Это не индикатор, это - скрипт.
 
Dmitriy Skub #:
Код взят без изменений выше от Алексея Викторова. Это не индикатор, это - скрипт.

Я знаю, что Вы использовали скрипт. Просто возник вопрос про индикатор. Ведь используется торговая функция. А индикаторы не могут торговать.

Просто сейчас пишу индикатор для визуализации. Значит OrderCheck() мне в любом случае не подойдет.

 

Когда-то давно отказался от OrderCheck() - он иногда не давал отправить запросы, которые на самом деле нормально отправлялись.

Возможно, это уже пофиксили, но проверять на боевых роботах не хочу, ситуация редкая и трудноуловимая.

 
JRandomTrader #:

Когда-то давно отказался от OrderCheck() - он иногда не давал отправить запросы, которые на самом деле нормально отправлялись.

Возможно, это уже пофиксили, но проверять на боевых роботах не хочу, ситуация редкая и трудноуловимая.

Дак эта функция ни у кого не отработала:)
Причина обращения: