Вычисление стоимости минимального изменения цены заданного объёма

 

Никак ни могу создать универсальную формулу для вычисления стоимости пункта для заданного лота, ни на MQL4 ни на MQL5, стандартных функций вроде как для этого нет или я не нашел


Например как с помощью кода вычислить доход или убыток на:

- BTCUSD при изменении цены на 1,27$ с объёмом 0,81 лота. Вот как вычислить стоимость минимального изменения цены (в данном примере это 0,01$) при лоте 0,81?

- Ещё для разнообразия на AUDUSD изменение цены в 0,00361 при лоте 0,03. Как тут вычислить стоимость минимального изменения цены (в данном примере это 0,00001) при лоте 0,03?

 
Alexandr Davydovskyi:

Никак ни могу создать универсальную формулу для вычисления стоимости пункта для заданного лота, ни на MQL4 ни на MQL5, стандартных функций вроде как для этого нет или я не нашел


Например как с помощью кода вычислить доход или убыток на:

- BTCUSD при изменении цены на 1,27$ с объёмом 0,81 лота. Вот как вычислить стоимость минимального изменения цены (в данном примере это 0,01$) при лоте 0,81?

- Ещё для разнообразия на AUDUSD изменение цены в 0,00361 при лоте 0,03. Как тут вычислить стоимость минимального изменения цены (в данном примере это 0,00001) при лоте 0,03?

Есть функции обращения к брокеру, вот с ними и надо производить все расчеты: спрашиваете, приходит ответ и вот ответ уже куда хотите туда и вставляйте. Можете создать любое уравнение - задачу. Берете switch и в него вписываете условия какие Вам будут подходить на все случаи жизни. И все.

 
Alexandr Davydovskyi:

Никак ни могу создать универсальную формулу для вычисления стоимости пункта для заданного лота, ни на MQL4 ни на MQL5, стандартных функций вроде как для этого нет или я не нашел


Например как с помощью кода вычислить доход или убыток на:

- BTCUSD при изменении цены на 1,27$ с объёмом 0,81 лота. Вот как вычислить стоимость минимального изменения цены (в данном примере это 0,01$) при лоте 0,81?

- Ещё для разнообразия на AUDUSD изменение цены в 0,00361 при лоте 0,03. Как тут вычислить стоимость минимального изменения цены (в данном примере это 0,00001) при лоте 0,03?

А что, обычные формулы, например, https://alpari.com/ru/faq/trading_terms/calculating_profits_and_losses/, не подходят?
 
Vladimir:
А что, обычные формулы, например, https://alpari.com/ru/faq/trading_terms/calculating_profits_and_losses/, не подходят?

Стандартные калькуляторы не универсальны. Сделать код на конкретный инструмент я могу, но как сделать универсальный код на любые активы?

 
Yrii Kuksov:

Есть функции обращения к брокеру, вот с ними и надо производить все расчеты: спрашиваете, приходит ответ и вот ответ уже куда хотите туда и вставляйте. Можете создать любое уравнение - задачу. Берете switch и в него вписываете условия какие Вам будут подходить на все случаи жизни. И все.

Наведите пожалуйста пример с помощью каких функций можно это сделать


С помощью этих типов функций:

- Торговые функции

- Математические функции

- Информация о счете

я не смог получить нужные мне значения

 
Alexandr Davydovskyi:

Стандартные калькуляторы не универсальны. Сделать код на конкретный инструмент я могу, но как сделать универсальный код на любые активы?

Не понял. Причем здесь калькуляторы? Формулы расчета разве различные?
 
Vladimir:
Не понял. Причем здесь калькуляторы? Формулы расчета разве различные?

Дело не в формуле расчёта, а в том что невозможно определить базовую и котируемую валюту (или актив). А так как код должен быть универсальным а не под конкретный инструмент это становится невозможным. Вот как определить с помощью функции Symbol() базовый и котируемый актив? Например AUDUSD, USDCHF, GBPNZD, BTCUSD и тому подобные все возможные варианты

 
Alexandr Davydovskyi:

Никак ни могу создать универсальную формулу для вычисления стоимости пункта для заданного лота, ни на MQL4 ни на MQL5, стандартных функций вроде как для этого нет или я не нашел


Например как с помощью кода вычислить доход или убыток на:

- BTCUSD при изменении цены на 1,27$ с объёмом 0,81 лота. Вот как вычислить стоимость минимального изменения цены (в данном примере это 0,01$) при лоте 0,81?

- Ещё для разнообразия на AUDUSD изменение цены в 0,00361 при лоте 0,03. Как тут вычислить стоимость минимального изменения цены (в данном примере это 0,00001) при лоте 0,03?

Вот функция для расчета лота mql4, поковыряйся, может что найдешь

extern double persent=6.0;//MaxRisk
double LOT()
  {
   if(persent<=0)
     {
      return(NormalizeDouble(fixLot,2));
     }
   double Free=AccountFreeMargin();
   double LotVal=MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота
   if(LotVal<=0) LotVal=1.0;
   double Min_Lot =MarketInfo(Symbol(),MODE_MINLOT);
   double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
   double Step=MarketInfo(Symbol(),MODE_LOTSTEP);
   double Lot =MathFloor((Free*persent/100)/(1000*LotVal)/Step)*Step;
   if(Lot<Min_Lot) Lot=Min_Lot;
   if(Lot>Max_Lot) Lot=Max_Lot;

   if((Lot)*MarketInfo(Symbol(),MODE_MARGINREQUIRED)>AccountFreeMargin())
     {
      // Print("Не хватает денег для открытия ордера");
      return(-1);
     }
   Lot=NormalizeDouble(Lot,2);
   return(Lot);
  }

Вот это в справке почитай:

 double LotVal=MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота

Правда, я когда-то проверял, очень давно, Альпари возвращало 0. Либо я криво проверял.

 
Alexandr Davydovskyi:

Дело не в формуле расчёта, а в том что невозможно определить базовую и котируемую валюту (или актив). А так как код должен быть универсальным а не под конкретный инструмент это становится невозможным. Вот как определить с помощью функции Symbol() базовый и котируемый актив? Например AUDUSD, USDCHF, GBPNZD, BTCUSD и тому подобные все возможные варианты

Возможно, все возможно.
с помощью встроенных функций 

 
Alexandr Davydovskyi:

Дело не в формуле расчёта, а в том что невозможно определить базовую и котируемую валюту (или актив). А так как код должен быть универсальным а не под конкретный инструмент это становится невозможным. Вот как определить с помощью функции Symbol() базовый и котируемый актив? Например AUDUSD, USDCHF, GBPNZD, BTCUSD и тому подобные все возможные варианты

Если именно тому подобные, то разбивать имя пары на две тройки символов для валют, первой будет базовая. Таким способом заодно можно проставить инструментам признак, первой или второй валютой идет USD, чтобы всегда перегонять прибыль в валюту счета USD. Наверное, Вы имеете в виду все же не "тому подобные"...

 
Alexandr Davydovskyi:

Никак ни могу создать универсальную формулу для вычисления стоимости пункта для заданного лота, ни на MQL4 ни на MQL5, стандартных функций вроде как для этого нет или я не нашел


Например как с помощью кода вычислить доход или убыток на:

- BTCUSD при изменении цены на 1,27$ с объёмом 0,81 лота. Вот как вычислить стоимость минимального изменения цены (в данном примере это 0,01$) при лоте 0,81?

- Ещё для разнообразия на AUDUSD изменение цены в 0,00361 при лоте 0,03. Как тут вычислить стоимость минимального изменения цены (в данном примере это 0,00001) при лоте 0,03?

Нужно вот здесь смотреть:

---------------------------------

Для получения информации о способе вычисления величины залоговых средств по инструменту (размера маржинальных требований) предназначено перечисление ENUM_SYMBOL_CALC_MODE.

ENUM_SYMBOL_CALC_MODE

Идентификатор

Описание

Формула

SYMBOL_CALC_MODE_FOREX

Forex mode – расчет прибыли и маржи для Форекс

Margin:  Lots * Contract_Size / Leverage * Margin_Rate

 

Profit:   (close_price - open_price) * Contract_Size*Lots

SYMBOL_CALC_MODE_FOREX_NO_LEVERAGE

Forex No Leverage mode – расчет прибыли и маржи для Форекс без учета плеча

Margin:  Lots * Contract_Size * Margin_Rate

 

Profit:   (close_price - open_price) * Contract_Size * Lots

SYMBOL_CALC_MODE_FUTURES

Futures mode – расчет залога и прибыли для фьючерсов

Margin: Lots * InitialMargin * Margin_Rate

 

Profit:  (close_price - open_price) * TickPrice / TickSize*Lots

SYMBOL_CALC_MODE_CFD

CFD mode – расчет залога и прибыли для CFD

Margin: Lots * ContractSize * MarketPrice * Margin_Rate

 

Profit:  (close_price - open_price) * Contract_Size * Lots

SYMBOL_CALC_MODE_CFDINDEX

CFD index mode – расчет залога и прибыли для CFD на индексы

Margin: (Lots * ContractSize * MarketPrice) * TickPrice / TickSize * Margin_Rate

 

Profit:  (close_price - open_price) * Contract_Size * Lots

SYMBOL_CALC_MODE_CFDLEVERAGE

CFD Leverage mode – расчет залога и прибыли для CFD при торговле с плечом

Margin: (Lots * ContractSize * MarketPrice) / Leverage * Margin_Rate

 

Profit:  (close_price-open_price) * Contract_Size * Lots

SYMBOL_CALC_MODE_EXCH_STOCKS

Exchange mode – расчет залога и прибыли для торговли ценными бумагами на бирже

Margin: Lots * ContractSize * LastPrice * Margin_Rate

 

Profit:  (close_price - open_price) * Contract_Size * Lots

SYMBOL_CALC_MODE_EXCH_FUTURES

Futures mode –  расчет залога и прибыли для торговли фьючерсными контрактами на бирже

Margin: Lots * InitialMargin * Margin_Rate или Lots * MaintenanceMargin * Margin_Rate

 

Profit:  (close_price - open_price) * Lots * TickPrice / TickSize

SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS

FORTS Futures mode –  расчет залога и прибыли для торговли фьючерсными контрактами на FORTS. Размер маржи может уменьшаться на величину отклонения MarginDiscount по следующим правилам:

1. Если цена длинной позиции (ордера на покупку) меньше расчетной цены, то MarginDiscount = Lots*((PriceSettle-PriceOrder)*TickPrice/TickSize)

2. Если цена короткой позиций (ордера на продажу) больше расчетной цены, то MarginDiscount = Lots*((PriceOrder-PriceSettle)*TickPrice/TickSize)

где:

    • PriceSettle – расчетная (клиринговая) цена предыдущей сессии;
    • PriceOrder – средневзвешенная цена позиции или цена открытия, указанная в ордере (заявке);
    • TickPrice – цена тика (стоимость изменения цены на один пункт);
    • TickSize – размер тика (минимальный шаг изменения цены)

Margin: Lots * InitialMargin * Margin_Rate или Lots * MaintenanceMargin * Margin_Rate * Margin_Rate

 

Profit:  (close_price - open_price) * Lots * TickPrice / TickSize

SYMBOL_CALC_MODE_SERV_COLLATERAL

Collateral mode - инструмент используется в качестве неторгуемого актива на торговом счете. Рыночная стоимость открытой позиции рассчитывается на основании объема, текущей цены рынка,  размера контракта и коэффициента ликвидности. Стоимость учитывается в Активах (Assets), которые суммируются с собственными средствами (Equity). Тем самым открытые позиции по такому инструменту увеличивают размер свободных средств (Free Margin)  и служат дополнительным обеспечением под открытые позиции по торгуемым инструментам

Margin: нет

Profit:  нет

 

Рыночная стоимость: Lots * ContractSize * MarketPrice * LiqudityRate

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