может цену открытия надо брать не бид а аск
" ...кто сожрал 3 пипса? какая формула расчета для цены открытия после доливок к текущей позиции? что я не учел? ..."
для BUY (закрытие) нужно брать Bid (покупка идёт по Ask)
a спред у вас какой?
а, вы учли свап, коммисионные по отдельно каждому ордеру (???)
price_buy +=(Bid-BuyOrderOpenPrice)*xxx+(OrderCommission()+OrderSwap())*Point;
Вопрос в теме, возможно тупой, но все же непонятный. Это необходимо чтобы получить размер профита В ПУНКТАХ по нескольким позициям одного символа.
Детальней на примере из жизни - идут сначала покупка, потом доливки к ней по 1 лоту на EURUSD, все ордера BUY :
- открываем позицию по EURUSD размером в 1 лот на BUY на отметке 1.25111, таким образом в любой момент времени наш профит равен BID - 1.25111
- цена пошла вниз, но мы снова открываем позицию размером в 1 лот на BUY, т.е. доливаемся на уровне 1.25077
- и вот тут я немного удивился потому что новая цена открытия теперь равна не 1.25111 и не 1.25077, а их среднее арифметическое. т.е. (1.25111 + 1.25077) / 2 = 1.25094, а профит равен BID - 1.25094
- ок, пусть будет среднее, идем дальше, цена снова идет вниз и доливаемся еще 1 лотом на уровне 1.24664
- и тут я снова удивился, потому что, если для расчета новой цены открытия надо брать среднее от всех ордеров, то оно должно быть равно (1.25111 + 1.25077 + 1.24664) / 3 = 1.24951, но стандартная функция МТ возвращает слегка другое значение
Вопрос : кто сожрал 3 пипса? какая формула расчета для цены открытия после доливок к текущей позиции? что я не учел?
после первой доливки у вас 2 лота ,теперь для усреднения требуется не 1 лот как вы сделали ,а 2 лота и так далее +4,+8,+16.......
Расчеты автора топика и мои расчеты совпали. Конечно исходя из заданных данных
Да, переписал скрипт немного по-другому и все сошлось, скорей всего для последней позиции вместо ASK по ошибке брал BID
" ...кто сожрал 3 пипса? какая формула расчета для цены открытия после доливок к текущей позиции? что я не учел? ..."
price_buy +=(Bid-BuyOrderOpenPrice)*xxx+(OrderCommission()+OrderSwap())*Point;Что такое "ххх", лот?
Эта формула какая-то непонятная, причем, похоже, для денег, а не для пунктов. Вот какие формулы получаются на данный момент.
Для пунктов берется средняя цена открытия всех позиций и ее разница от текущей цены :
buyProfit = CurrentBid - (PriceAskOpen[0] + PriceAskOpen[1] + ... + PriceAskOpen[n - 1]) / n
Для денег берется сумма пунктов пройденных ценой для каждой позиции, переведенных в валюту депозита :
buyProfit = (BidForPos[0] - PriceAskOpen[0]) * TickValue * Lots[0] / TickSize + Swap[0] + Comission + ... + (BidForPos[n - 1] - PriceAskOpen[n - 1]) * TickValue * Lots[n - 1] / TickSize + Swap[n - 1] + Comission
В формуле должны участвовать лоты.
Средняя цена открытия:
double average_op = (op1 * lot1 + op2 * lot2 + opN * lotN) / (lot1 + lot2 + lotN);
Профит в пунктах:
double profit = Bid - average_op;
А в первом сообщении действительно где-то ошибка. Возможно, было проскальзывание, и последняя сделка исполнилась по 1.24674.
Если без свопов и комиссий, то я такую функцию написал. Вроде работает
//=====================Функция получения средней цены====================
double getAveragePrice() {
double avPrice=0;
double priceOpen=0;
int count=1;
if(PositionsTotal()>0) {
for(int i=PositionsTotal()-1;i>=0;i--) {
if(PositionGetTicket(i)!=0) {
if(pInfo.Magic()==magicNum && pInfo.Symbol()==_Symbol) {
priceOpen+=PositionGetDouble(POSITION_PRICE_OPEN);
avPrice=priceOpen/count;
count++;
}
}
}
}
return avPrice;
}

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Вопрос в теме, возможно тупой, но все же непонятный. Это необходимо чтобы получить размер профита В ПУНКТАХ по нескольким позициям одного символа.
Детальней на примере из жизни - идут сначала покупка, потом доливки к ней по 1 лоту на EURUSD, все ордера BUY :
- и вот тут я немного удивился потому что новая цена открытия теперь равна не 1.25111 и не 1.25077, а их среднее арифметическое. т.е. (1.25111 + 1.25077) / 2 = 1.25094, а профит равен BID - 1.25094
- и тут я снова удивился, потому что, если для расчета новой цены открытия надо брать среднее от всех ордеров, то оно должно быть равно (1.25111 + 1.25077 + 1.24664) / 3 = 1.24951, но стандартная функция МТ возвращает слегка другое значение
Вопрос : кто сожрал 3 пипса? какая формула расчета для цены открытия после доливок к текущей позиции? что я не учел?