Роботы, программы только ФОНДОВЫЙ и FORTS примеры кода ( тема не для форекса ) только MQL5 MetaTrader 5 - страница 6

 
А как в МТ-5 получить размер свободных средств на Фондовой секции?
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
Документация по MQL5: Константы, перечисления и структуры / Состояние окружения / Информация о счете
  • www.mql5.com
Информация о счете - Состояние окружения - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
prostotrader #:
А как в МТ-5 получить размер свободных средств на Фондовой секции?
double margin_free = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
Но нужно проверять. Вообще, если нужное число есть во вкладке торговля внизу - его можно выдернуть через свойства аналогично
 
Andrey Miguzov #:
Но нужно проверять. Вообще, если нужное число есть во вкладке торговля внизу - его можно выдернуть через свойства аналогично

Там полный бред...

Нужное мне число, это Баланс, но он считается от текущей цены позиции, что не верно.

 
prostotrader #:

Там полный бред...

Нужное мне число, это Баланс, но он считается от текущей цены позиции, что не верно.

Методом тыка в Финаме было установлено, что не смотря на то, что в этой строке много бреда (и тех. поддержка это признает) - при открытии новых позиций программа ориентируется на неё... Не исключаю, что у Вас аналогично.

Т.е. даже если сами правильно посчитаем - дальше как это число использовать? 

 
Andrey Miguzov #:

Методом тыка в Финаме было установлено, что не смотря на то, что в этой строке много бреда (и тех. поддержка это признает) - при открытии новых позиций программа ориентируется на неё... Не исключаю, что у Вас аналогично.

Т.е. даже если сами правильно посчитаем - дальше как это число использовать? 

Перед входом нужно знать сколько у нас своих денег осталось на счете.

Написал функцию

double GetSpotMoney()
{
  string pos_symbol = "";
  double all_money = 0;
  double equity = AccountInfoDouble(ACCOUNT_EQUITY);
  int pos_total = PositionsTotal();
  for(int i=0; i<pos_total;i++)
  {
    pos_symbol = PositionGetSymbol(i);
    if(pos_symbol != "")
    {
      if(PositionSelect(pos_symbol) == true)
      {
        all_money += GetPositionPrice(pos_symbol) * SymbolInfoDouble(pos_symbol, SYMBOL_TRADE_CONTRACT_SIZE) *
                                                    PositionGetDouble(POSITION_VOLUME);
      }
    }  
  }
  return(equity - all_money);
}
 

А кто знает что это за пересчет цены открытия позиции?

2022.04.21 05:50:04.054 Trades  'ххххх': deal #111653623 sell 430 SNGS at 22.706105 done (based on order #0)
2022.04.21 05:50:04.054 Trades  'ххххх': deal #111653624 buy 430 SNGS at 22.705 done (based on order #0)

Эта цена не должна меняться!

 
prostotrader #:

А кто знает что это за пересчет цены открытия позиции?

Эта цена не должна меняться!

Как раз сижу думаю что делать - у меня она меняется.

GetPositionPrice

Возвращает не правильную цену из-за этого. Хотел по времени отсечь - но синхронизация может происходить в течение торгового дня

Добавлено - придется учитывать ENUM_DEAL_TYPE

Добавлено 2

Не прокатило.  У меня эти синхронизации DEAL_TYPE_BUY (0). 

Помогла ENUM_DEAL_REASON для кривых операций у меня это DEAL_REASON_CLIENT (0)

 
Andrey Miguzov #:

Как раз сижу думаю что делать - у меня она меняется.

Возвращает не правильную цену из-за этого. Хотел по времени отсечь - но синхронизация может происходить в течение торгового дня

Добавлено - придется учитывать ENUM_DEAL_TYPE

Как может она меняться?

Вы купили акцию за 100 руб. Почему со временем эта цена должна меняться?

Это все равно, что Вы пришли в магазин и купили 1кг сахара за 100 руб.

А через день к вам приходят из магазина и приносят (или забирают) 10 копеек. :)

Полный бред....

Цена может меняться, если Вы докупили акции.

У меня GetPositionPrice не меняется, даже после этого

2022.04.21 05:50:04.054 Trades  'ххххх': deal #111653623 sell 430 SNGS at 22.706105 done (based on order #0)
2022.04.21 05:50:04.054 Trades  'ххххх': deal #111653624 buy 430 SNGS at 22.705 done (based on order #0)

если у Вас меняется, то это кухня.

 
prostotrader #:

Как может она меняться?

Вы купили акцию за 100 руб. Почему со временем эта цена должна меняться?

Это все равно, что Вы пришли в магазин и купили 1кг сахара за 100 руб.

А через день к вам приходят из магазина и приносят (или забирают) 10 копеек. :)

Полный бред....

Цена может меняться, если Вы докупили акции.

У меня GetPositionPrice не меняется, даже после этого

если у Вас меняется, то это кухня.

Я понимаю, что бред и не должно. Проблема есть, в соседней ветке описывал - у меня торговое окружение криво синхронизируется. Раньше думал, что только по объему - теперь вижу, что и по цене.

Судя по Вашим логам - цена у Вас тоже меняется. Посмотрите вкладку история - то, что Вы выложили влияет на цену позиции. Я проблему в  GetPositionPrice не сразу заметил - на сильном движении только.

 
Andrey Miguzov #:

Я понимаю, что бред и не должно. Проблема есть, в соседней ветке описывал - у меня торговое окружение криво синхронизируется. Раньше думал, что только по объему - теперь вижу, что и по цене.

Судя по Вашим логам - цена у Вас тоже меняется. Посмотрите вкладку история - то, что Вы выложили влияет на цену позиции. Я проблему в  GetPositionPrice не сразу заметил - на сильном движении только.

Вы путаете цену позиции, которая считается от текущей цены и ценой покупки (GetPositionPrice)

Цена позиции меняется, а вот цена покупки не должна меняться!

добавлено

нужно переменовать GetPositionPrice на GetPositionBuyPrice :)