Как получить стоимость пункта и лота, например, недельной давности? - страница 2

 

100000/Leverage*lot

Наверное так будет удобнее...

MarketInfo(Symbol(),MODE_LOTSIZE)/Leverage*lot
потому что хоть и редко, но встречаются иные величины размера е.б.в...

 

Зачем усложнять? MarketInfo(symbol,MODE_MARGINREQUIRED) дает стоимость в залоговой валюте одного лота по цене аск сейчас. Надо просто привести к цене аск нужного бара.

Делал что-то такое для индикатора изменения стоимости портфеля на истории. Для i-го бара активного окна находим номер бара очередного символа symbol[s], и считаем, сколько стоили его Lots на Close этого бара. Принимаем, что спред постоянен:

bar=iBarShift(symbol[s],0,Time[i]);
с=MarketInfo(symbol[s],MODE_MARGINREQUIRED)*Lots*(iClose(symbol[s],0,bar)+MarketInfo(symbol[s],MODE_SPREAD)*MarketInfo(symbol[s],MODE_POINT))/MarketInfo(symbol[s],MODE_ASK);

Кстати, забавная штука получалась - по клозе портфеля можно строить любые индюки, как в чартах.

Кому интересно - загляните на форум к Виктору (vinin), там в теме по портфелю много чего выложено.

 
kombat писал(а) >>

Наверное так будет удобнее...

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

Спб...Поправка принимается... :)

 
Bookkeeper писал(а) >>

Зачем усложнять? MarketInfo(symbol,MODE_MARGINREQUIRED) дает стоимость в залоговой валюте одного лота по цене аск сейчас. Надо просто привести к цене аск нужного бара.

Делал что-то такое для индикатора изменения стоимости портфеля на истории. Для i-го бара активного окна находим номер бара очередного символа symbol[s], и считаем, сколько стоили его Lots на Close этого бара. Принимаем, что спред постоянен:

bar=iBarShift(symbol[s],0,Time[i]);
с=MarketInfo(symbol[s],MODE_MARGINREQUIRED)*Lots*(iClose(symbol[s],0,bar)+MarketInfo(symbol[s],MODE_SPREAD)*MarketInfo(symbol[s],MODE_POINT))/MarketInfo(symbol[s],MODE_ASK);

Кстати, забавная штука получалась - по клозе портфеля можно строить любые индюки, как в чартах.

Кому интересно - загляните на форум к Виктору (vinin), там в теме по портфелю много чего выложено.

Ваш вариант проще... тока думаю зачем использовать цены Аск.... Вы рассчитываете коэффициент изменения цены и умножаете на нынешнюю стоимость лота... Получите значение маржи на истории...

с=MarketInfo(symbol[s],MODE_MARGINREQUIRED)*Lots*iClose(symbol[s],0,bar)/MarketInfo(symbol[s],MODE_BID);
 
kharko писал(а) >>

Ваш вариант проще... тока думаю зачем использовать цены Аск.... Вы рассчитываете коэффициент изменения цены и умножаете на нынешнюю стоимость лота... Получите значение маржи на истории...

MARGINREQUIRED это по цене ASC. Сравнивать с BID как-то унизительно, хоть и мизер.

 
Bookkeeper писал(а) >>

MARGINREQUIRED это по цене ASC. Сравнивать с BID как-то унизительно, хоть и мизер.

А еже ли спред меняется... получим искажение... Цены Бид надежнее :)

 
kharko писал(а) >>

А еже ли спред меняется... получим искажение... Цены Бид надежнее :)

Тогда уж вычитайте текущий спред из MARGINREQUIRED :), оно тоже текущее.

 
//+------------------------------------------------------------------+
// Стоимось пункта в базовой валюте
double TestTickValue(string symb,datetime time,double lot)
{
   int
      index;
   string
      basesymbol,
      symbol;
//---
   basesymbol=AccountCurrency();
// Прямая пара
   if(StringSubstr(symb,3,0)==basesymbol)
      return(NormalizeDouble(MarketInfo(symb,MODE_LOTSIZE)*MarketInfo(symb,MODE_POINT)*lot,2));

// Обратная пара
   if(StringSubstr(symb,0,3)==basesymbol)
   {
      index=iBarShift(symb,PERIOD_M1,time,false);
      return(NormalizeDouble(MarketInfo(symb,MODE_LOTSIZE)*MarketInfo(symb,MODE_POINT)*lot/iOpen(symb,PERIOD_M1,index),2));
   }

// Кросс
// Поиск валютной пары для нахождения маржи в базовой валюте
   symbol=StringConcatenate(StringSubstr(symb,3,0),basesymbol);
   if(MarketInfo(symbol,MODE_BID)!=0)
   {
      index=iBarShift(symbol,PERIOD_M1,time,false);
      return(NormalizeDouble(MarketInfo(symbol,MODE_LOTSIZE)*MarketInfo(symbol,MODE_POINT)*lot/iOpen(symbol,PERIOD_M1,index),2));
   }

   symbol=StringConcatenate(basesymbol,StringSubstr(symb,0,3));
   if(MarketInfo(symbol,MODE_BID)!=0)
   {
      index=iBarShift(symbol,PERIOD_M1,time,false);
      return(NormalizeDouble(MarketInfo(symbol,MODE_LOTSIZE)*MarketInfo(symbol,MODE_POINT)*lot*iOpen(symbol,PERIOD_M1,index),2));
   }
   return(0); // Нет данных
}
Функция расчета стоимости пункта по истории котировок в базовой валюте счета...
 
Kharko, отлично написаный скрипт.... только рабртает лишь в случае с валютами. а у меня похожая проблема с фьючерсом на DAX. очень нужно определить цену пункта.... может подскажете в чем подвох?
 
shibzik писал(а) >>
Kharko, отлично написаный скрипт.... только рабртает лишь в случае с валютами. а у меня похожая проблема с фьючерсом на DAX. очень нужно определить цену пункта.... может подскажете в чем подвох?

С фьючерсами никогда не работал... Для определения стоимости пункта попробуйте вот такую строчку...

double CurrencyPoint=NormalizeDouble(MarketInfo(symb,MODE_LOTSIZE)*MarketInfo(symb,MODE_POINT)*lot,2);
где symb - это название вашего инструмента...
Причина обращения: