Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
дядька, не дерзи мне
я тока что тут написал и сам же исправил
и внимательно читай задачу топик-стартера:
"т.е., наверно, вычислять произведения (пункты x объём)"
все отклонения от темы, это не более чем полет фантазииФорум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Как правильно рассчитать профит совокупной позиции в пунктах для кроссов?
Vitaly Muzichenko, 2019.01.24 21:10
Возьмите рассчитайте общий безубыток, и к нему прибавьте N-пунктов. Как рассчитать точку безубытка для совокупной позиции - Вы знаете.
P.S. Ответил так, как понял задачуМожет и вычислять произведения.
Я дал код безубытка, и к цене безубытка добавить N-пунктов для решения
Ты знаешь, что для мажоров и кроссов расчёты отличаются? Мне MQL5 не надо, я в нём не разбираюсь.
Ты знаешь, что для мажоров и кроссов расчёты отличаются? Мне MQL5 не надо, я в нём не разбираюсь.
Ну тогда, функция действительно будет выглядеть по другому, т.к. стоимость пункта у кроссов, в отличии от мажоров, не постоянна.
Единственное - учитывать своп и комиссии надо?
Получается, что совокупный профит в валюте депозита по символу, нужно разделить на текущую стоимость пункта.
double calcPointProfit(string Symb)//входной параметр функции - наименование символа, например "GBPCAD"
{
double profitOnPoint = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symb) profitOnPoint= profitOnPoint +(OrderProfit()+OrderCommission()+OrderSwap())/ MarketInfo(Symb, MODE_TICKVALUE);
}
return(profitOnPoint);
}
Ну тогда, функция действительно будет выглядеть по другому, т.к. стоимость пункта у кроссов, в отличии от мажоров, не постоянна.
Единственное - учитывать своп и комиссии надо?
Получается, что совокупный профит в валюте депозита по символу, нужно разделить на текущую стоимость пункта.
double calcPointProfit(string Symb)//входной параметр функции - наименование символа, например "GBPCAD"
{
double profitOnPoint = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symb) profitOnPoint= profitOnPoint +(OrderProfit()+OrderCommission()+OrderSwap())/ MarketInfo(Symb, MODE_TICKVALUE);
}
return(profitOnPoint);
}
Да, если MarketInfo(Symb, MODE_TICKVALUE) работает правильно, код для мажоров и кроссов вроде бы унифицируется. Сейчас вношу изменения в эксперте, проверю в тесте. Код безубытка нашёл на форуме.
Да, если MarketInfo(Symb, MODE_TICKVALUE) работает правильно, код для мажоров и кроссов вроде бы унифицируется. Сейчас вношу изменения в эксперте, проверю в тесте. Код безубытка нашёл на форуме.
Если нужен безубыток, то проще всего сдвинуть стоплосс на профит в пунктах +/- спред, ведь он уже посчитан функцией выше
Там, чтобы получить профит в пунктах надо кроме TickValue ещё на объём делить. Я уже нашёл на форуме функцию расчёта цены безубытка. Функция более универсальная, может ещё где пригодится.
Спасибо всем за участие. Пока вопрос закрыт, тестирование покажет правильность расчётов.
Там, чтобы получить профит в пунктах надо кроме TickValue ещё на объём делить. Я уже нашёл на форуме функцию расчёта цены безубытка. Функция более универсальная, может ещё где пригодится.
Спасибо всем за участие. Пока вопрос закрыт, тестирование покажет правильность расчётов.
посчитан профит в деньгах сначала, он уже с учетом объема идет
поэтому не нужно делить на объем
но в целом идея расчета безубытка весьма и весьма хорошапосчитан профит в деньгах сначала, он уже с учетом объема идет
поэтому не нужно делить на объем
Возможно, проверю на практике. Хотя вроде бы надо. Ведь прибыль в валюте зависит не только от пунктов, но и от объёма.
Возможно, проверю на практике. Хотя вроде бы надо. Ведь прибыль в валюте зависит не только от пунктов, но и от объёма.
да, покумекал счас, действительно, вроде как надо делить
{
double prt=0,lt=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol()==Symbl && OrderType()<2)
{
prt=prt+OrderProfit()+OrderCommission()+OrderSwap();
lt=lt+OrderLots();
}
}
if(lt!=0) return(prt/(lt*MarketInfo(Symbl,MODE_TICKVALUE)));
else return(0);
}