- #10 BUY 3.00 USDJPY at 113.20, close at 113.17
BUY 300 000 USD -> SELL 33 960 000 YEN (rate 113.20)
SELL 300 000 USD -> BUY 33 951 000 YEN (rate 113.17)
профит: - 9 000 YEN или - 79.51 USD (без округления 79.50530035)
- #11 BUY 3.00 USDJPY at 113.20, close at 113.17
BUY 100 000 USD -> SELL 11 320 000 YEN (rate 113.20)
SELL 100 000 USD -> BUY 11 317 000 YEN (rate 113.17)
профит: - 3 000 YEN или - 26.50 USD (без огругления 26.50176678)
#12 BUY 3.00 USDJPY at 113.20, close at 113.17 (- 26.50 USD)
#13 BUY 3.00 USDJPY at 113.20, close at 113.17 (- 26.50 USD)
итоговый профит от трех сделок будет: -26.50 * 3 = - 79.50 USD
Кроме того, в сложных кросс-курсах, где нет прямого преобразования результата сделки в валюту депозита, производятся дополнительные конверсионные операции через USD или EUR, где также во время вычислений производится округление промежуточных результатов до требуемой точности. В свое время один из банков (кто перешел на МТ) обнаружил отсутствие округления на промежуточных результатах, что иногда приводило к расхождению в 1 пипс с их собственной бухгалтерией. Конечно же, мы сразу все исправили.
Также хочу спросить зависит ли это от брокера или у всех брокеров одинаково считаеться?
Кхм... вопрос не совсем в тему, но он об округлении...
Понадобилось мне однажды округлять, точнее обрезать результат:
величину обьёма позиции с точностью до минилота...
Вроде бы не проблема!
Ставь себе
NormalizeDouble( | double value, int digits) |
для 0.1 или 0.01 мин. лот соответственно...
Однако теряется универсальность, ибо даже в пределах одного
ДЦ
на разных серверах может быть и 0.1 и 0.01 минилот...
И на одном терминале приходится держать два комплекта скриптов.
Вот как бы вычленить это, что-б разрядность переводилась в цифровое выражение...
Кхм... вопрос не совсем в тему, но он об округлении...
Понадобилось мне однажды округлять, точнее обрезать результат:
величину обьёма позиции с точностью до минилота...
Вроде бы не проблема!
Ставь себе
NormalizeDouble( | double value, int digits) |
для 0.1 или 0.01 мин. лот соответственно...
Однако теряется универсальность, ибо даже в пределах одного
ДЦ
на разных серверах может быть и 0.1 и 0.01 минилот...
И на одном терминале приходится держать два комплекта скриптов.
Вот как бы вычленить это, что-б разрядность переводилась в цифровое выражение...
Разделить на минилот, округлить с точностью до целых и снова
умножить на минилот.
NormalizeDouble(Value/minilot,0)*minilot;
Print("Минимальный лот: ",MarketInfo(Symbol(),MODE_MINLOT));
Увы... несколько не то...
Простой перевод разрядности в цифру! нужен.
т.е. например так:
РАЗРМЛ=формула;
И потом РАЗРМЛ подставлял туда где необходимо, например так:
ОБЪЁМ=NormalizeDouble( | РЕЗУЛЬТАТ_чего-то, РАЗРМЛ); |
Таким образом, полученный результат от своих каких то мат. операций,
например обьём позиции 1.12345678 и округляем, точнее нормализуем
до точности позволяющей минимальным лотом...
Для ДЦ где минилот 0.1 это будет 1.1 лота
а там, где 0.01 будет 1.12 лота
Вот так...
Вот ещё пример где понадобилость такое округление:
"Лот м-М: ",minilot," - ",maxilot,"\n",
выводится правильно, в "своей" разрядности,
а вот так, уже восьмиразрядно:
"Лот м-М: "+minilot+" - "+maxilot+"\n",
Вот как решил подобное когда необходимо привести к удобоваримому
виду:
если от 1.2345 отнять 1.2340 то получим 0.0005
а надо знать именно разницу 5, т.е. 5 пипов
Для чего использую множитель полученного первичного результата:
ТОЧНОСТЬ=MarketInfo(Symbol(),MODE_DIGITS);
МНОЖИТЕЛЬ=MathPow(10,ТОЧНОСТЬ);
Этим множителем и привожу как надо,
он сам подставлят 10000 или 100
в зависимости от точности, например на EURUSD или USDJPY
extern bool UseMM = true; // false true. extern double PercentDepo = 1.0; // Ispol'zuemyi % svobodnoi marzhi. int first,l; double MINLOT,LOTSTEP,MAXLOT,mLot; void start() { if(UseMM) Lot=LotSize(PercentDepo); // Raschet lota. } //+------------------------------------------------------------------+ double LotSize(double PD) { if(first==0) { first=1; MINLOT=(MarketInfo(Symbol(),MODE_MINLOT)); // Zapominaem minimal'no razreshennyi lot. LOTSTEP=(MarketInfo(Symbol(),MODE_LOTSTEP)); // Zapominaem minimal'nyi shag lota. MAXLOT=(MarketInfo(Symbol(),MODE_MAXLOT)); // Zapominaem maksimal'no razreshennyi lot. double d=LOTSTEP; while(d<1) { d=d*10; l++; }} // Vychislyaem "Digits" dlya avtomaticheskogo rascheta lota. mLot=NormalizeDouble(AccountEquity()*0.00001*PD,l); // Raschet lota. if(mLot<MINLOT) mLot=MINLOT; if(mLot>MAXLOT) mLot=MAXLOT; return(mLot); } //+------------------------------------------------------------------+
double d=LOTSTEP; while(d<1) { d=d*10; l++; }
и получает разрядность лота.
Тут много лишнего, но я писал это для себя, использую как библиотеку.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Или округленные значения только показываються в терминале, а для вычислений используються неокругленные значения?
*округление (в смысле округление для денег) - преобразование значений до минимальной денежной единицы (т.е. до 0.01 или до 2-х знаков после запятой).
Для ясности приведу пример для прибыли:
я хочу купить 3.00 лота инструмента USD/JPY.
Я могу сделать это одним ордером по 3.00 лота или тримя ордерами по 1.00 лоту
Пусть Стоимость 1 пункта для 1 лота = 8.827683616.
Спред = 3 пункта.
Тогда прибыль при открытии позиции:
1) buy 3.00 лота; прибыль = -3*3*8.827683616 = -79.44915254; после округления - прибыль = -79.45
2) buy 1.00 лота; прибыль = -3*8.827683616 = -26.48305085; после округления - прибыль = -26.48
buy 1.00 лота; прибыль = -3*8.827683616 = -26.48305085; после округления - прибыль = -26.48
buy 1.00 лота; прибыль = -3*8.827683616 = -26.48305085; после округления - прибыль = -26.48
-79.44 - сумма трех ордеров
Вот, получились разные результаты (хоть не намного, но хотелось бы знать как у вас считаеться).
Я сам пробывал проверить, но это не так то просто, когда все быстро меняеться.
Это пример с прибылью, хочу тоже спросить и по комиссии, свопам, балансу, средствам, залогу, свободным средствам?
Также хочу спросить зависит ли это от брокера или у всех брокеров одинаково считаеться?