Страница 1 из 1
Стоимость пункта на кроссах
Добавлено: Вс май 09, 2010 10:40 pm
Hunter
Непонятен вот такой момент:
Допустим, я тестирую пару EUR/GBP. Прибыль составила 100 пунктов = 100 GBP. Каким образом программа пересчитывает мою прибыль в доллары? Откуда она "знает" текущий курс GBP/USD?
И "родственный" вопрос: как мне в стратегии рассчитать текущую стоимость пункта EUR/GBP в долларах?
...Да, и еще: что такое "Валюта лота" в настройках? Каков ее смысл?
Добавлено: Чт май 13, 2010 2:29 pm
FT Support
Здравствуйте,
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) "Валюта лота" нужна для инструментов типа металлов, фьючерсов и т.д.
Добавлено: Чт май 13, 2010 5:47 pm
Hunter
Огромное спасибо!
Re: Стоимость пункта на кроссах
Добавлено: Пт фев 06, 2015 11:56 am
Hunter
Еще вопрос.
Как работает функция GetCurrencyInfo - какую стоимость пункта кросс-курса она возвращает, если пара (кросс) в списке есть, но в запрашиваемый момент времени по ней большой пробел в котировках?
Re: Стоимость пункта на кроссах
Добавлено: Пт фев 06, 2015 2:02 pm
FX Helper
Здравствуйте,
Не уверен, но скорее всего, должно возвращаться последнее ненулевое значение кросса.