Никак ни могу создать универсальную формулу для вычисления стоимости пункта для заданного лота, ни на MQL4 ни на MQL5, стандартных функций вроде как для этого нет или я не нашел
Например как с помощью кода вычислить доход или убыток на:
- BTCUSD при изменении цены на 1,27$ с объёмом 0,81 лота. Вот как вычислить стоимость минимального изменения цены (в данном примере это 0,01$) при лоте 0,81?
- Ещё для разнообразия на AUDUSD изменение цены в 0,00361 при лоте 0,03. Как тут вычислить стоимость минимального изменения цены (в данном примере это 0,00001) при лоте 0,03?
Есть функции обращения к брокеру, вот с ними и надо производить все расчеты: спрашиваете, приходит ответ и вот ответ уже куда хотите туда и вставляйте. Можете создать любое уравнение - задачу. Берете switch и в него вписываете условия какие Вам будут подходить на все случаи жизни. И все.
Никак ни могу создать универсальную формулу для вычисления стоимости пункта для заданного лота, ни на 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/, не подходят?
Стандартные калькуляторы не универсальны. Сделать код на конкретный инструмент я могу, но как сделать универсальный код на любые активы?
Есть функции обращения к брокеру, вот с ними и надо производить все расчеты: спрашиваете, приходит ответ и вот ответ уже куда хотите туда и вставляйте. Можете создать любое уравнение - задачу. Берете switch и в него вписываете условия какие Вам будут подходить на все случаи жизни. И все.
Наведите пожалуйста пример с помощью каких функций можно это сделать
С помощью этих типов функций:
- Торговые функции
- Математические функции
я не смог получить нужные мне значения
Стандартные калькуляторы не универсальны. Сделать код на конкретный инструмент я могу, но как сделать универсальный код на любые активы?
Не понял. Причем здесь калькуляторы? Формулы расчета разве различные?
Дело не в формуле расчёта, а в том что невозможно определить базовую и котируемую валюту (или актив). А так как код должен быть универсальным а не под конкретный инструмент это становится невозможным. Вот как определить с помощью функции Symbol() базовый и котируемый актив? Например AUDUSD, USDCHF, GBPNZD, BTCUSD и тому подобные все возможные варианты
Никак ни могу создать универсальную формулу для вычисления стоимости пункта для заданного лота, ни на 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. Либо я криво проверял.
Дело не в формуле расчёта, а в том что невозможно определить базовую и котируемую валюту (или актив). А так как код должен быть универсальным а не под конкретный инструмент это становится невозможным. Вот как определить с помощью функции Symbol() базовый и котируемый актив? Например AUDUSD, USDCHF, GBPNZD, BTCUSD и тому подобные все возможные варианты
Дело не в формуле расчёта, а в том что невозможно определить базовую и котируемую валюту (или актив). А так как код должен быть универсальным а не под конкретный инструмент это становится невозможным. Вот как определить с помощью функции Symbol() базовый и котируемый актив? Например AUDUSD, USDCHF, GBPNZD, BTCUSD и тому подобные все возможные варианты
Если именно тому подобные, то разбивать имя пары на две тройки символов для валют, первой будет базовая. Таким способом заодно можно проставить инструментам признак, первой или второй валютой идет USD, чтобы всегда перегонять прибыль в валюту счета USD. Наверное, Вы имеете в виду все же не "тому подобные"...
Никак ни могу создать универсальную формулу для вычисления стоимости пункта для заданного лота, ни на MQL4 ни на MQL5, стандартных функций вроде как для этого нет или я не нашел
Например как с помощью кода вычислить доход или убыток на:
- BTCUSD при изменении цены на 1,27$ с объёмом 0,81 лота. Вот как вычислить стоимость минимального изменения цены (в данном примере это 0,01$) при лоте 0,81?
- Ещё для разнообразия на AUDUSD изменение цены в 0,00361 при лоте 0,03. Как тут вычислить стоимость минимального изменения цены (в данном примере это 0,00001) при лоте 0,03?
Нужно вот здесь смотреть:
---------------------------------
Для получения информации о способе вычисления величины залоговых средств по инструменту (размера маржинальных требований) предназначено перечисление 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) где:
| 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 |
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Никак ни могу создать универсальную формулу для вычисления стоимости пункта для заданного лота, ни на MQL4 ни на MQL5, стандартных функций вроде как для этого нет или я не нашел
Например как с помощью кода вычислить доход или убыток на:
- BTCUSD при изменении цены на 1,27$ с объёмом 0,81 лота. Вот как вычислить стоимость минимального изменения цены (в данном примере это 0,01$) при лоте 0,81?
- Ещё для разнообразия на AUDUSD изменение цены в 0,00361 при лоте 0,03. Как тут вычислить стоимость минимального изменения цены (в данном примере это 0,00001) при лоте 0,03?