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

 
Roman Shiredchenko #:

А вот это уже интересно - какие условия входа-выхода - или там сразу вход равными объемами в две стороны (на акции лотами и ее фьюче контрактами). Там и в БКС нет единого счета. Как считать прибыль? Опять все виртуалить... Там в итоге один счет будет сливаться, другой пУхнуть возможно... :-) 

Тогда задача, чтобы пУх один быстрее, чем сливался другой! :-) (причем они могут меняться...) Там же еще на акциях, там допустим взял в лонг аэрофлот 100 акций и продал его фьюч на 1 контракт...

Сам иду к этому торговому подходу...  пока никак РСИ а - ля в усреднялках не отпускает...:-)

Здесь "Фортс помощь начинающим" также есть примеры кода.


Зачем два счета , в Финам для мт5 есть единый счёт , на нем покупаем бумагу и продаем фьючерс 
 
Yuriy Zaytsev #:
Зачем два счета , в Финам для мт5 есть единый счёт , на нем покупаем бумагу и продаем фьючерс 

Спс, я понял. Пойду в Финам.
 
prostotrader #:

Читайте в этом разделе тему:

"ФОРТС. В помощь начинающим"

//+------------------------------------------------------------------+
//| Expert Get position price function                               |
//+------------------------------------------------------------------+
double GetPositionPrice(const string aSymbol)
{
  double price_in = 0;
  double volume_in = 0;
  if(PositionSelect(aSymbol))
  {
    ulong pos_id = ulong(PositionGetInteger(POSITION_IDENTIFIER));
    if(pos_id > 0)
    {
      if(HistorySelectByPosition(pos_id))
      {
        int deals = HistoryDealsTotal();
        for(int i = 0; i < deals; i++)
        {
          ulong deal_ticket = HistoryDealGetTicket(i);
          ulong order_ticket = ulong(HistoryDealGetInteger(deal_ticket, DEAL_ORDER));
          if(order_ticket > 0)
          {
            ENUM_DEAL_ENTRY deal_entry = ENUM_DEAL_ENTRY(HistoryDealGetInteger(deal_ticket, DEAL_ENTRY));
            if(deal_entry == DEAL_ENTRY_IN)
            {
              double price = HistoryDealGetDouble(deal_ticket, DEAL_PRICE);
              double volume = HistoryDealGetDouble(deal_ticket, DEAL_VOLUME);
              price_in += price * volume;
              volume_in += volume;  
            }
          }
        }
        if(volume_in > 0)
        {
           int digits=int(SymbolInfoInteger(aSymbol, SYMBOL_DIGITS));
           return(NormalizeDouble(price_in/volume_in, digits));
        }  
      }
      else
      {
        Print(__FUNCTION__, ": Невозможно получить историю позиции по символу ", aSymbol);
      }
    }
    else
    {
      Print(__FUNCTION__, ": Невозможно определить идентификатор позиции по символу ", aSymbol);
    }
  }
  return(0);
}

Спасибо за функцию, использую в своём роботе! 

Во время отладки на реальном счёте ФИНАМ нашёл особенность, которую важно учитывать.

Для корректного расчета цены в моём случае потребовалось

return(NormalizeDouble(price_in/volume_in, digits));

поменять на

return(price_in/volume_in)
 
Andrey Miguzov #:

Спасибо за функцию, использую в своём роботе! 

Во время отладки на реальном счёте ФИНАМ нашёл особенность, которую важно учитывать.

Для корректного расчета цены в моём случае потребовалось

поменять на

Вы можете использовать ту точность, которая Вам нужна :)

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

 
Roman Shiredchenko #:

да, спс, абсолютно верно. Сам юзаю эту функцию - работает исправно.

Ей доукомплектовал  своего робота - она считает общую цену (среднюю) ОТКРЫТИЯ совокупной позиции (неттинг) и далее уже от нее считаю уровни и безубытка и трала - работает исправно. Вывожу значения и в принты и в комменты на экран - считает абсолютно верно и пофигу на все клиринги... 

Сам пытался ранее считать и через OnТраде и через OnTradeTransaction - лажа получалась. Здесь ключевое 

 

Наверное уже запоздалый комментарий, но всё-же спрошу, полтора месяца это не три года:))) В OnTradeTransaction() в одно мгновение можно получить ID позиции

HistoryDealGetInteger(trans.deal, DEAL_POSITION_ID);

конечно перед этим выбрать сделку

HistoryDealSelect(trans.deal);

в чём лажа получилась?

 
Alexey Viktorov #:

Наверное уже запоздалый комментарий, но всё-же спрошу, полтора месяца это не три года:))) В OnTradeTransaction() в одно мгновение можно получить ID позиции

конечно перед этим выбрать сделку

в чём лажа получилась?

там много чего подлетало без ID (не только по этой позиции - нужен был фильтр, что учитывать только ее), т.е. не только частичное закрытие.... Гуд все, во время! :-)

Все сделано через ранешные еще ф-ии тут предоставленные в пользование! Сейчас все считает гуд. Цену позиции оставляет грамотную, по фигу на клиринги и прочие комиссии и иже с ними вычеты!

Летит в плюса торговля на фьючах втб!

помогло:


 
Кто нибудь подскажет, как разделить данные стакана на юр лиц и физ лиц?
 
Renat Akhtyamov #:
Кто нибудь подскажет, как разделить данные стакана на юр лиц и физ лиц?

А разве есть такой критерий по которому можно разделить?

 
Renat Akhtyamov #:
Кто нибудь подскажет, как разделить данные стакана на юр лиц и физ лиц?

никак

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