Размер лотов тоже играет роль. Напишите формулу, пожалуйста.
Всё, нашёл статью 'Азбука торговли валютами', мозги ночью не варят, думаю, завтра всё пойму из неё.
Размер лотов тоже играет роль. Напишите формулу, пожалуйста.
Посмотрите этот скрипт - расчитывает уровень без убытка, а также уровни покупки и продажи для множества ордеров по одному инструменту.
ЗЫ: Исправил ошибку - вот новый скрипт.
Посмотрите этот скрипт - расчитывает уровень без убытка, а также уровни покупки и продажи для множества ордеров по одному инструменту.
ЗЫ: Исправил ошибку - вот новый скрипт.
Посмотрел Ваш скрипт. Вы используете встроенные MQL функции по формуле: OrderProfit()+OrderCommission()+OrderSwap(). Но они всё считают исходя из текущей цены, а мне нужно для множества ордеров (одного типа из {BUY, SELL}): A1, A2, ..., An рассчитать уровень цены, на котором их можно закрыть все с нулевым изменением баланса. Т.е. цену я буду подбирать, например, итерационно. Но тогда все встроенные функции OrderProfit и т.д. мне бесполезны, они опираются на текущую цену и рыночную ситуацию, а не на любую предлагаемую. Т.е. аргумента CurrentPrice у них нет.
Прошу уважаемых форумчан подсказать, писал ли кто-нибудь MQL код,
рассчитывающий для произвольного множества ордеров одного
типа (только BUY, или только SELL), с разной ценой открытия и разными
лотами, уровень безубыточной цены, т.е. такой уровень, закрытие на котором ордеров заданного множества
приведёт к нулевому изменению баланса?
Опираться нужно, как я понимаю, на OrderProfit, OrderCommission, OrderSwap(), но они дадут по формуле: NormalizeDouble( OrderProfit() + OrderCommission() + OrderSwap(), 2);
общий текущий профит со знаком для каждого ордера, для текущей
цены, а как получить уровень безубытка для всего множества?
Я такого не писал, но порассуждать могу :)
По идее во-первых нужно рассчитать текущий баланс нужной группы ордеров. Это вроде понятно, для этого и нужны OrderProfit() + OrderCommission() + OrderSwap()
Во-вторых нужно рассчитать изменение баланса при изменении цены на 1 пункт. Это тоже вроде понятно, суммарная позиция*цена пункта для одного лота
После этого делением первого на второе можно получить количество пунктов, необходимых для обнуления баланса
Наконец последнее, остаётся решить, нужно их прибавить к текущей цене или от неё отнять.
При желании всё можно здорово усложнить, попытавшись спрогнозировать ещё и время достижения нужной цены (чтобы свопы учесть) :)
Вот такой ход мыслей.
Как-то так,
BuLevelBuy =NormalizeDouble((OpenLotSumBuy-PcommisBuy)/LotsSumBuy,Digits);
BuLevelSell =NormalizeDouble((OpenLotSumSel+PcommisSel)/LotsSumSel,Digits);
где, суммы по по всем ордерам типа:
OpenLotSum - Lots*OpenPrice,
Pcommis - Commis*Point/стоим.пункта
LotsSum - Lots
Посмотрел Ваш скрипт. Вы используете встроенные MQL функции по формуле: OrderProfit()+OrderCommission()+OrderSwap(). Но они всё считают исходя из текущей цены, а мне нужно для множества ордеров (одного типа из {BUY, SELL}): A1, A2, ..., An рассчитать уровень цены, на котором их можно закрыть все с нулевым изменением баланса. Т.е. цену я буду подбирать, например, итерационно. Но тогда все встроенные функции OrderProfit и т.д. мне бесполезны, они опираются на текущую цену и рыночную ситуацию, а не на любую предлагаемую. Т.е. аргумента CurrentPrice у них нет.
Свопы расчитать тоже можно, но с одной оговоркой - в mql4 нет функции, возвращающей день начисления тройного свопа.
Свопы расчитать тоже можно, но с одной оговоркой - в mql4 нет функции, возвращающей день начисления тройного свопа.
Разве ночь со среды на четверг не является временем тройных свопов или бывают другие случаи?
chv, я не понял, чем вам не подходит мой скрипт :) Расчитывает три уровня - уровень где сумма профита всех ордеров на покупку будет равна нулю, такой же уровень на продажу и уровень "нуля" для локированных позиций не равных по объему.
Понятно, что для кроссов стоимость пункта меняется, но мы не можем предугадать какой она будет через некоторое время. Также и для свопов - они тоже каждый день разные. Для EURUSD, например, всё четко - уровеь не изменяется в течении суток, если не было открыто новых ордеров, разумеется.
Понял о чём речь!
Вижу такой выход:
1 - для валютных пар с прямой котировкой всё ясно, т.к. пункт постоянный уровень расчитывается точно.
2 - для валютных пар с обратной котировкой (USDJPY, USDCHF) есть смысл делать перерасчёт уровня, т.е. использовать для расчёта пункта котировку, которую предлагает мой скрипт (приближенный уровень безубытка). Формула стоимости пункта - [pip] = [lot size] × [tick size] / [current quote]
3 - для кроссов всё намного сложнее - для перерасчёта уровня потребуется ещё котировка базовой (первой) валюты к доллару США, а она не известно какой будет к тому времени. Ктстати, формула - [pip] = [lot size] × [tick size] × [base quote] / [current quote]
Вот как-то так.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Прошу уважаемых форумчан подсказать, писал ли кто-нибудь MQL код, рассчитывающий для произвольного множества ордеров одного типа (только BUY, или только SELL), с разной ценой открытия и разными лотами, уровень безубыточной цены, т.е. такой уровень, закрытие на котором ордеров заданного множества приведёт к нулевому изменению баланса?
Опираться нужно, как я понимаю, на OrderProfit, OrderCommission, OrderSwap(), но они дадут по формуле: NormalizeDouble( OrderProfit() + OrderCommission() + OrderSwap(), 2);
общий текущий профит со знаком для каждого ордера, для текущей цены, а как получить уровень безубытка для всего множества?