Стоимость пункта на кроссах

Задавайте общие вопросы о функциях программы.
Ответить
Сообщение
Автор
Аватара пользователя
Hunter
Сообщения: 49
Зарегистрирован: Сб ноя 21, 2009 10:22 am
Откуда: Санкт-Петербург

Стоимость пункта на кроссах

#1 Сообщение Hunter » Вс май 09, 2010 10:40 pm

Непонятен вот такой момент:
Допустим, я тестирую пару EUR/GBP. Прибыль составила 100 пунктов = 100 GBP. Каким образом программа пересчитывает мою прибыль в доллары? Откуда она "знает" текущий курс GBP/USD?

И "родственный" вопрос: как мне в стратегии рассчитать текущую стоимость пункта EUR/GBP в долларах?

...Да, и еще: что такое "Валюта лота" в настройках? Каков ее смысл?
Дилетанту всё понятно. Специалисту ничего не понятно.

FT Support
Сообщения: 329
Зарегистрирован: Сб июл 11, 2009 3:59 pm

#2 Сообщение FT Support » Чт май 13, 2010 2:29 pm

Здравствуйте,

1) Forex Tester рассчитывает стоимость пункта на кроссах на основании смежной долларовой цены одной из валют (так как Вы и написали стоимость пункта EUR/GBP на основании данных по GBP/USD). Если же данных по смежной валюте нет, то берутся данные, которые жестко зашиты в программу.

2) расчитать стоимость пункта можно нижеприведённым кодом (не гарантирую 100% работоспособности т.к. это особо не проверялось, так что если найдёте ошибки - пишите):

Код: Выделить всё

// cost of 1 secondary currency unit in USD
function GetSecCurCostInUSD(symbolName: ANSIString): double;
var baseCur: ANSIString;
    secondCur: ANSIString;
    info: PCurrencyInfo;
begin
  baseCur := LeftStr(symbolName, 3);
  secondCur := RightSTR(symbolName, 3);

  if GetCurrencyInfo(secondCur+'USD', info) then
  begin
   Result := iClose(secondCur+'USD',1,0);
   exit;
  end else
    if GetCurrencyInfo('USD'+secondCur, info) then
    begin
      Result := 1/(iClose('USD'+secondCur,1,0));
      exit;
    end else
    if GetCurrencyInfo(baseCur+'USD', info) then
    begin
      result := iClose(baseCur+'USD', 1, 0) / iClose(symbolName, 1, 0);
      exit;
    end else
      if GetCurrencyInfo('USD'+baseCur, info) then
      begin
        result := (1/iClose('USD'+baseCur, 1, 0))/iClose(symbolName, 1, 0);
        exit;
      end;

   result := 0;
   Print('GetCostInUSD: not enough information');
end;

//calculates point cost for 1 lot order
function GetPointCostUSD: double;
var
  info: PCurrencyInfo;
  symbolType: TSymbolType;
begin
  symbolType := GetSymbolType(Currency);
  if GetCurrencyInfo(Currency, info) then
  begin
    case symbolType of
      st_Normal: result := info.lot * info.Point;
      st_InvertedUSD: result := info.lot * info.Point/iClose(Currency, 1, 0);
      st_Other: result := GetSecCurCostInUSD(Currency)*info.lot*info.Point;
    end;
  end;
end;

{-----Process single tick---------------------------------------------------}
procedure GetSingleTick; stdcall;
begin
Print('point cost = ' + floattostr(GetPointCostUSD));
end;
3) "Валюта лота" нужна для инструментов типа металлов, фьючерсов и т.д.

Аватара пользователя
Hunter
Сообщения: 49
Зарегистрирован: Сб ноя 21, 2009 10:22 am
Откуда: Санкт-Петербург

#3 Сообщение Hunter » Чт май 13, 2010 5:47 pm

Огромное спасибо!
Дилетанту всё понятно. Специалисту ничего не понятно.

Аватара пользователя
Hunter
Сообщения: 49
Зарегистрирован: Сб ноя 21, 2009 10:22 am
Откуда: Санкт-Петербург

Re: Стоимость пункта на кроссах

#4 Сообщение Hunter » Пт фев 06, 2015 11:56 am

Еще вопрос.
Как работает функция GetCurrencyInfo - какую стоимость пункта кросс-курса она возвращает, если пара (кросс) в списке есть, но в запрашиваемый момент времени по ней большой пробел в котировках?
Дилетанту всё понятно. Специалисту ничего не понятно.

FX Helper
Сообщения: 567
Зарегистрирован: Пн апр 01, 2013 11:44 am

Re: Стоимость пункта на кроссах

#5 Сообщение FX Helper » Пт фев 06, 2015 2:02 pm

Здравствуйте,

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

Ответить