Я тоже делаю сетку, пренебрёг всем этим, можно дать запас по профиту и всё, зачем париться.
Запас можно дать.
Но свопы, например, начисляются каждый день. Соотвтественно, если сделки висят месяц, то запаса может как-то не хватит.
Запас можно дать.
Но свопы, например, начисляются каждый день. Соотвтественно, если сделки висят месяц, то запаса может как-то не хватит.
Вопрос в том, как лучше рассчитывать цену бу, в условиях изменяющихся показателей.
КОмиссия и свопы в профит не включаются. Они считаются в валюте депозита.
А профит итоговый считается с учетом tick_value.
Закрытие сетки по профиту не лучашя идея. Так как лотность может быть набрана разная. Закрывать 20 лотов с прибылью в 10 долларов не лучшая идея.
Цена БУ для серии ордеров одного направления:
double GetAveragePrice(const double fTotalVolume, const double fTotalOPVolume, const double fTotalSwapComm, const double fTickSize, const double fTickValue, const int nType) { if (fTotalVolume <= 0.0) return -1.0; // Цена открытия без учета свопов и комиссий double fAvePrice = fTotalOPVolume / fTotalVolume; // Преобразование величины свопов и комиссий к категории цены double fSwapInPrice = fTotalSwapComm * fTickSize / (fTotalVolume * fTickValue); // Для ордеров Buy свопы и комиссии нужно отнять от чистой средней цены (если свопы орицательные, то цена открытия станет выше), я для ордеров Sell - добавить (отрицательный своп уменьшит цену открытия) return (nType == OP_BUY)? fAvePrice - fSwapInPrice : fAvePrice + fSwapInPrice; }
Здесь:
- fTotalVolume - совокупный объем рыночных ордеров (позиций, если в терминологии МТ5) одной серии
- fTotalOPVolume - сумма произведений цен открытия ордеров на их объем
- fTotalSwapComm - сумма свопов и комиссий всех ордеров серии
- fTickSize - размер тика для символа, нужно проверить на корректность до вызова функции
- fTickValue - стоимость тика для символа , нужно проверить на корректность до вызова функции
Вопрос в том, как лучше рассчитывать цену бу, в условиях изменяющихся показателей.
КОмиссия и свопы в профит не включаются. Они считаются в валюте депозита.
А профит итоговый считается с учетом tick_value.
Закрытие сетки по профиту не лучашя идея. Так как лотность может быть набрана разная. Закрывать 20 лотов с прибылью в 10 долларов не лучшая идея.
У меня своп в полном объеме и половина комиссии включены в профит позиции, считаю общую прибыль и всё. А Вы как сетку закрывате, по пипсам? А почему не лучшая идея? Я рассчитываю на пинг не более 10 милисек
Цена БУ для ордеров разного направления:
double GetTotalAveragePrice(const double fTotalVolumeBuy, const double fTotalOPVolumeBuy, const double fTotalSwapCommBuy, const double fTotalVolumeSell, const double fTotalOPVolumeSell, const double fTotalSwapCommSell, const double fTickSize, const double fTickValue, const double fSpread) { // Если совокупные объемы обоих типов ордеров советника равны, то рассчитать среднюю цену открытия невозможно if (fTotalVolumeBuy == fTotalVolumeSell) return DBL_MAX; // Цены открытия Buy и Sell-серий double fAveBuyPrice = (fTotalVolumeBuy > 0.0)? fTotalOPVolumeBuy / fTotalVolumeSell : 0.0; double fAveSellPrice = (fTotalVolumeSell > 0.0)? fTotalOPVolumeSell / fTotalVolumeSell : 0.0; // Средняя цена открытия всех ордеров по Bid без учета свопов double fAvePrice = (fAveBuyPrice * fTotalVolumeBuy - fTotalVolumeSell * (fAveSellPrice - fSpread)) / (fTotalVolumeBuy - fTotalVolumeSell); // Определение доминирующей части свопов и смещение средней цены открытия с учетом свопов и комиссий if (fTotalVolumeBuy > fTotalVolumeSell) // Доминирует Buy-направление { double fVolumeDiff = fTotalVolumeBuy - fTotalVolumeSell; double fSwaps = fTotalSwapCommBuy / fTotalVolumeBuy * fVolumeDiff; fAvePrice -= fSwaps * fTickSize / (fVolumeDiff * fTickValue); } else // Доминирует Sell-направление { double fVolumeDiff = fTotalVolumeSell - fTotalVolumeBuy; double fSwaps = fTotalSwapCommSell / fTotalVolumeSell * fVolumeDiff; fAvePrice += fSwaps * fTickSize / (fVolumeDiff * fTickValue); } return fAvePrice; }
Тут все то же самое. Только добавляется величина спреда - fSpread.
Все это добро рассчитываем на каждом тике и модифицируем уровни стопа/профита, если они изменились на спред и более, чтобы не делать модификацию на каждом тике, задалбывая сервер ДЦ.
P. S. Сорри за возможные ошибки в коде - портировал со своего эксперта прямо здесь, без проверки синтаксиса. Но общий смысл должен быть понятен.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Делаю сеточного советника. В одном направление может быть открыто множество позиций, разного объема, по разным ценам, со свопами и комиссиями.
Все комиссии нужно учитывать, для корректного расчета общей цены безубытка.
Пример:
На EURUSD сделка Buy может быть открыта по цене 100, с комиссией 4 доллара. Цена безубытка будет 104 пункта.
Но если взять кросскурс, то там цена пункта меняется постоянно. Из-за это в примере выше 4 доллара не всегда равны 4 пунктам. Иногда это 3,5, а иногда 5.7
Т.е. на кросах цена БУ не постоянна, а значит уровни СЛ и ТП, которые отсчитываются от цены безубытка, так же будут постоянно скакать и неточность выставления стопа, при больших объемах может давать убыток.
Вопрос: как лучше всего рассчитывать цену безубытка для кроссов у которых tick_value переменный.
Ниже формула классического расчета БУ.
OrderOpenTruePrice = (Bid - ((profit / (lot * TICKVALUE)) * _Point)); //Для buy