Скрипт рассчёта уровня безубытка |
Здравствуйте Андрей!
Прошу написать скрипт для платформы МТ4 расчитывающий уровень безубытка при открытии локирующей позиции.
Т.З 1-- скрипт при присоединении к графику расчитывает суммарный лот всех открытых позиций на покупку и продажи. Выводит результат в отдельное окно на графике ( удобнее в правом или левом углу: LotBUY=… и LotSELL=...)
2-- скрипт расчитывает необходимый лот для локирующего ордера по формуле LotLok =LotBUY {илиLotSELL } + ( LotBUY {или LotSELL } * 30% ).Выводит также эти результаты в окно LotLokBUY=… и LotLokSELL=…
3-- скрипт при открытии локирующего ордера, объёмом равным расчётным LotLokBUY или LotLokSELL, расчитывает уровень безубытка всех ордеров одного направления + 50 пипс на 5-ти знаке и 5 пунктов на 4-х значных котировках брокера ( от ноля безубытка ) и так же выводит значение этого уровня в окно b\y BUY=… и b\y SELL=…
4---скрипт автоматически переносит все стоплоссы или тейки ордеров одного направления на данный расчётный уровень b\y BUY или
b\y SELL.
5---Нужно чтобы скрипт исправно работал на 4-х и 5-ти значных котировках и в обоих случаях расчитывал лот до значения типа 0.01 ( округляя 3-и и поледующие значения после запятой).
Вроде подробно всё попытался объяснить. Спасибо Андрей за твой труд.
-
+2
- Просмотров: 7902
- 7 декабря 2015, 10:18
- SerOv
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!
Комментарии (30)
35 AM2 Сообщений: 16303 - Андрей
Редактирован: 7 декабря 2015, 12:36
35 AM2 Сообщений: 16303 - Андрей
Buy – количество открытых ордеров вверх
BuyPrice[i] — цена открытия i-ого ордера вверх, i=1,…buy
BuyLot[i] — Количество лотов i-ого ордера вверх, i=1,…buy
Sell – количество открытых ордеров вниз
SellPrice[i] — цена открытия i-ого ордера внизх, i=1,… Sell
SellLot[i] — Количество лотов i-ого ордера вниз, i=1,… Sell
Пусть далее
TicValue – значение одного пункта в валюте депозита,
Т.е., TicValue = MarketInfo(Symbol(),MODE_TICKVALUE)
Point – значение одного пункта в валюте котировки,
Т.е., Point = MarketInfo(Symbol(),MODE_POINT)
Пусть далее
TargetPrice – цена, при достижение которой суммарный профит всех открытых
Ордеров в валюте депозита будет равен
TargetProfit
Очевидно, что можно составить такое вот уравнение
СУММА[i=1,…buy]( TargetPrice- BuyPrice[i] )* TicValue* BuyLot[i] / Point
+
СУММА[i=1,… Sell]( SellPrice [i] — TargetPrice)* TicValue* SellLot [i] / Point
= TargetProfit
Отсюда, после очевидных преобразований получим искомую формулу
Для вычислений TargetPrice
TargetPrice =(TargetProfit* Point + СУММА[i=1,…buy]( BuyPrice[i]* TicValue* BuyLot[i]) — СУММА[i=1,… Sell](SellPrice [i]*TicValue* SellLot [i] ) )/
(TicValue*( СУММА[i=1,…buy]( BuyLot[i]) — СУММА[i=1,… Sell]( SellLot [i]) )
35 AM2 Сообщений: 16303 - Андрей
Или не разобрался Редактирован: 7 декабря 2015, 13:50
13 Fargo Сообщений: 495
35 AM2 Сообщений: 16303 - Андрей
Второе то просто среднее арифметическое, если сократить тот же ticvalue.
Вот я как то статейку тиснул mql.opentraders.ru/25225.html
может так проще? Редактирован: 7 декабря 2015, 14:16
13 Fargo Сообщений: 495
35 AM2 Сообщений: 16303 - Андрей
По третьему пункту и я сомневался можно ли его реализовать в одном скрипте с расчётами. Ни какого алгоритма и примеров у меня естественно нет = может 3-й и 4-й пункты реализовать через отдельный скрипт — вот и всё что мне пришло в головёшку.
24 SerOv Автор Сообщений: 859 - Сергей
24 SerOv Автор Сообщений: 859 - Сергей
35 AM2 Сообщений: 16303 - Андрей
24 SerOv Автор Сообщений: 859 - Сергей
Редактирован: 8 декабря 2015, 17:46
35 AM2 Сообщений: 16303 - Андрей
35 AM2 Сообщений: 16303 - Андрей
2. if(CountBuy()<CountSell()) будет правильно работать только если все ордера имеют одинаковую лотность.
3. Причина тут:
и
13 Fargo Сообщений: 495
24 SerOv Автор Сообщений: 859 - Сергей
35 AM2 Сообщений: 16303 - Андрей
Да глаз замыливается, когда долго сидишь. Благодарю. Остальное еще смотреть буду.
35 AM2 Сообщений: 16303 - Андрей
Сначала разделил все по разным функциям а потом ради интереса все собрал в одно. Почти тоже самое все а заработало!
35 AM2 Сообщений: 16303 - Андрей
В случае 1 ордера Sell объемом 0,1 и 5-ти ордеров Buy каждый объемом по 0,01 работать будет неправильно
Нужно применить BuyLots() и SellLots()
13 Fargo Сообщений: 495
35 AM2 Сообщений: 16303 - Андрей
24 SerOv Автор Сообщений: 859 - Сергей
24 SerOv Автор Сообщений: 859 - Сергей
35 AM2 Сообщений: 16303 - Андрей
24 SerOv Автор Сообщений: 859 - Сергей
35 AM2 Сообщений: 16303 - Андрей
24 SerOv Автор Сообщений: 859 - Сергей
P.S это в последней строке — профит — их много появляется при пересчёте --НУ и бог с ними НЕ заморачивайся. Редактирован: 22 декабря 2015, 19:15
24 SerOv Автор Сообщений: 859 - Сергей
35 AM2 Сообщений: 16303 - Андрей
24 SerOv Автор Сообщений: 859 - Сергей
0 Bogrom Сообщений: 1
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий