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

 

Здравствуйте. 
Пишу в надежде, что олд трейдеры помогут с данным вопросом.

Для того, чтобы углубиться и расширить свои знания в области строения рынка я уперся в некий барьер: не могу найти единые формулы для расчета стоимости годного пункта по некоторым типам инструментов.
Уже мне известны следующие формулы:
-расчет стоимости пункта с прямой котировкой в валютных инструментах: размер тика/курс котировки*объем сделки

-расчет пункта с обратной котировкой в валютных инструментах: размер тика*размер контракта

-расчет в кросс-курсе валютных инструментов: курс валюты сделки к USD*объем сделки*размер контракта*размер тика/текущий курс

Подскажите, очень нужно, такие же унифицированные формулы для расчета:
стоимости пункта для металлов(XAUUSD, XPT и т.д.), нефть, акции, биржевые индексы, криптовалюта

Очень благодарен!
П/С: ищу именно формулы, а не совет, как зайти на сайт и использовать калькулятор трейдера. 

 
double Costtick = SymbolInfoDouble(_Symbol, SYMBOL_TICK_VALUE);

double profit = Costtick * lot *кол-во пунктов;

Вот как то так.

 
Dmitiry Ananiev #:

Может еще плечо над учесть но это сами посчитаете. 

встречал ситуации (ога, у "лучшего брокера азии на букву Ин") что SYMBOL_TICK_VALUE показывает 0. 

 
jeikil:

что то считает, а что и сам не пойму. у меня рублёвый счёт =  показывает курс валюты USD\RUB

2021.10.28 06:16:42.656 jeikil (GBPUSD,H2)      стоимость пункта = 70.4669
//+------------------------------------------------------------------+
//|                                                       jeikil.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//---
input double lot = 0.01;
//---
uint points = 100;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double Tick = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);
   double cost = Tick * lot *points;
   Print("стоимость пункта = ",cost);
  }
//+------------------------------------------------------------------+

Снимок экрана 2021-10-28 062743

 
SanAlex #:

что то считает, а что и сам не пойму. у меня рублёвый счёт =  показывает курс валюты USD\RUB

курс валюты - я так понимаю показывает.

Снимок экрана 2021-10-28 065603 

 
// -----------------------------------------------------------------------------
// Стоимость одного пункта символа для заданного объема сделки
// symbol = xxxyyy, где xxx-базовая валюта, yyy-котируемая валюта
//     EURUSD - обратная котировка (usd на втором месте)
//     USDCAD - прямая котировка (usd на первом месте)
//     GBPJPY - кросс курс (нет usd)
// volume - объем сделки в лотах
// -----------------------------------------------------------------------------
static double UTrade::CostPoint(string symbol, double volume) {
    
    // если символ не в 'Обзоре рынка', то выход
    double bid = SymbolInfoDouble(symbol, SYMBOL_BID);
    if (bid == 0) {
        PrintFormat("%s / ERROR: Добавьте в 'Обор рынка' %s", __FUNCTION__, symbol);
        return 0;
    }

    // определяем вспомогательные данные
    string xxx = StringSubstr(symbol, 0, 3);
    string yyy = StringSubstr(symbol, 3, 3);
    string tile = (StringLen(symbol) > 6) ? StringSubstr(symbol, 6) : "";
    double contract = volume * SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE);
    double costPoint = contract * SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
    
    // определяем цену одного пункта
    if (yyy == "USD") // обратная котировка
        ; // ничего не делаем
    else if (xxx == "USD") // прямая котировка
        costPoint = costPoint / bid;
    else { // кросс-курс
        string symbol1 = yyy + "USD" + tile;
        bid = SymbolInfoDouble(symbol1, SYMBOL_BID);
        if (bid > 0) costPoint = costPoint * bid;
        else {
            string symbol2 = "USD" + yyy + tile;
            bid = SymbolInfoDouble(symbol2, SYMBOL_BID);
            if (bid == 0) {
                PrintFormat("%s: Добавьте в 'Обор рынка' %s или %s", __FUNCTION__, symbol1, symbol2);
                return 0;
            }
            costPoint = costPoint / bid;
        }
    }
    
    // корректируем цену под точность цен (4 или 5 знак)
    long digits = SymbolInfoInteger(symbol, SYMBOL_DIGITS);
    double ratioDigits = (digits % 2 == 0) ? 1.0 : 10.0;
    return costPoint * ratioDigits;
}
 
Здравствуйте. Подскажите по такому вопросу: 
Считаю стоимость пункта в USD для кросс курса GBPCHF. 
Согласно формуле:  стоимость пункта = объем позиции х размер тика х размер контракта  х котировка базовой валюты к USD / текущий курс пары
К примеру мне дано: 
GBPCHF: BID 1.12350 ASK 1.12543
GBPUSD: BID 1.24161 ASK 1.24256
Размер контракта  GBPCHF : 100 000
Объем позиции: 1 лот
Размер тика: 0.00001

1*0,00001*100000* 1.24161( BID )/ 1.12350 ( BID )=1.105126835781041 ≈ 1.11 USD (после округления)

И тут у меня возник вопрос. Какую цену нужно брать для расчётов (спроса или предложения) BID или ASK?
 
Dmitri Pascenco #:
Здравствуйте. Подскажите по такому вопросу: 
Считаю стоимость пункта в USD для кросс курса GBPCHF. 
Согласно формуле:  стоимость пункта = объем позиции х размер тика х размер контракта  х котировка базовой валюты к USD / текущий курс пары
К примеру мне дано: 
GBPCHF: BID 1.12350 ASK 1.12543
GBPUSD: BID 1.24161 ASK 1.24256
Размер контракта  GBPCHF : 100 000
Объем позиции: 1 лот
Размер тика: 0.00001

1*0,00001*100000* 1.24161( BID )/ 1.12350 ( BID )=1.105126835781041 ≈ 1.11 USD (после округления)

И тут у меня возник вопрос. Какую цену нужно брать для расчётов (спроса или предложения) BID или ASK?

По большому счету разницы нет, т. к. итоговые значения будут очень мало отличаться друг от друга. К тому же на кроссе стоимость пункта изменяется каждый тик каждой из трех пар. То есть от таких изменений появится бОльшая погрешность, чем от разности Bid и Ask.

Но, если быть совсем уж дотошным, то для Buy нужно брать Bid (т. к. он закрывается по Bid), а для Sell - Ask.

 
Ihor Herasko #:

По большому счету разницы нет, т. к. итоговые значения будут очень мало отличаться друг от друга. К тому же на кроссе стоимость пункта изменяется каждый тик каждой из трех пар. То есть от таких изменений появится бОльшая погрешность, чем от разности Bid и Ask.

Но, если быть совсем уж дотошным, то для Buy нужно брать Bid (т. к. он закрывается по Bid), а для Sell - Ask.

Спасибо)
" Но, если быть совсем уж дотошным, то для Buy нужно брать Bid (т. к. он закрывается по Bid), а для Sell - Ask." -- вот как раз об этом я и думал. Как при конвертации валюты прибыли/убытка в валюту депозита при закрытии сделки, прибыль - продаёшь, убыток - выкупаешь.

Причина обращения: