ФОРТС Как узнать первоначальную цену покупки фьючерса - страница 4

 
Serj_Che:
Он говорит, что после клиринга меняются ордера участвующие в совокупной позиции.
Не сами ордера, а их цены + он сказал что не все трейды, относящиеся к исполненному ордеру видны в истории.
 
C-4:
Не сами ордера, а их цены + он сказал что не все трейды, относящиеся к исполненному ордеру видны в истории.
Mikalas 2014.02.06 19:16   RU
PositionGetDouble( POSITION_PRICE_OPEN );

 Возвращает цену с учётом клирингов 

Тут повсеместно идет путаница между позициями ордерами и сделками.

С какого перепуга позиция должна знать какой в вашей стратегии первый ордер а какой последний. 

 

Serj_Che!

Никакой путаницы нет!

Пример:

Вы купили(продали)  3 единицы(акции, фьючерса или вал. пару не важно), но не единовременно, а

по 1 единице. После первой покупки (вхождение) у Вас образовалась позиция объёмом 1, затем 2 и, наконец, 3.

Сформировалась ЦЕНА позиции, но эта цена изменяется при клирингах(она не равна (цена покупки 1 ед.+ цена покупки 2 ед. + цена покупки 3 ед. )/3 ) 

Прошла неделя, Вы хотите выйти из всей позиции. Как узнать Вы в минусе или в плюсе?

Ведь профит = Общая(конечная цена) - Общая (начальная цена). 

Для этого и нужно знать чистую (суммарную ) начальную стоимось позиции.

Любая сделка КЛИЕНТА совершается  на основе ордера. Значит можно посчитать

начальную (суммарную) стоимость открытой позиции на основе данных истории об ЭТОЙ позиции(при открытии позиции,

ей присваивается уникальный ID), что и делает моя функция GetHistoryPrice 

Она позволяет не "ворошить" историю за выбранный период(как предлагаете Вы), а только берёт историю по этой позиции. 

Но если в истории нет каких-то данных, то перебирай ВСЮ историю(1970 года), всё-равно не найдёте потерянные данные!

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

P/S Все функции, которые предоставляет разработчик, ДОЛЖНЫ работать(иначе зачем же их предоставлять нам)! 

Зачем ехать в Питер из Москвы через Магадан, когда есть прямая дорога?

 
Вы уточните, что пропадает из истории? Трейды? Ордера? Ссылки на ордера или сделки? Что именно исчезает.
 
C-4:
Вы уточните, что пропадает из истории? Трейды? Ордера? Ссылки на ордера или сделки? Что именно исчезает.

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

функции видно, что нет или order_ticket или deal_ticket или deal_entry

 

Запустите этот код отдельно и проверьте еще раз:

int deals = HistoryDealsTotal();
      
      for( int i = 0; i < deals; i++ )
      {
        ulong deal_ticket = HistoryDealGetTicket( i );
        ulong order_ticket = HistoryDealGetInteger( deal_ticket, DEAL_ORDER );
        
        if ( order_ticket > 0 )
        {
          long 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_in + price * volume;
            volume_in = volume_in + volume;  
          }
        }
        //Особенно здесь:
        else
        {
            printf(order_ticket);
        }
      }
Что за трейды попадают в else. Все ли они имеют статус брокеража (!DEAL_TYPE_BUY && !DEAL_TYPE_SELL)?
 

Моя ошибка!

Была открыта позиция объёмом 1 и тут же закрылась, а

потом открылась объёмом 2, а я "прошляпил", что

позиция закрывалась. Сорри. 

 
Главное что всё работает. Это радует.
 
Mikalas:

Serj_Che!

Никакой путаницы нет!

Пример:

Вы купили(продали)  3 единицы(акции, фьючерса или вал. пару не важно), но не единовременно, а

по 1 единице. После первой покупки (вхождение) у Вас образовалась позиция объёмом 1, затем 2 и, наконец, 3.

Сформировалась ЦЕНА позиции, но эта цена изменяется при клирингах(она не равна (цена покупки 1 ед.+ цена покупки 2 ед. + цена покупки 3 ед. )/3 ) 

Прошла неделя, Вы хотите выйти из всей позиции. Как узнать Вы в минусе или в плюсе?

Ведь профит = Общая(конечная цена) - Общая (начальная цена). 

Для этого и нужно знать чистую (суммарную ) начальную стоимось позиции.

Любая сделка КЛИЕНТА совершается  на основе ордера. Значит можно посчитать

начальную (суммарную) стоимость открытой позиции на основе данных истории об ЭТОЙ позиции(при открытии позиции,

ей присваивается уникальный ID), что и делает моя функция GetHistoryPrice 

Она позволяет не "ворошить" историю за выбранный период(как предлагаете Вы), а только берёт историю по этой позиции. 

Но если в истории нет каких-то данных, то перебирай ВСЮ историю(1970 года), всё-равно не найдёте потерянные данные!

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

P/S Все функции, которые предоставляет разработчик, ДОЛЖНЫ работать(иначе зачем же их предоставлять нам)! 

Зачем ехать в Питер из Москвы через Магадан, когда есть прямая дорога?

Когда начинаешь объяснять другим, сам начинаешь понимать что объясняешь.

Главное что у вас все сошлось (нашлось). 

 
Serj_Che:

Когда начинаешь объяснять другим, сам начинаешь понимать что объясняешь.

Главное что у вас все сошлось (нашлось). 

Даже я напрягся. Если бы трейды пропадали был бы полный ахтунг.
Причина обращения: