Влияние спреда на профит

 

Советник содержит следующий кусок кода:

double avgProfit = AccountInfoDouble(ACCOUNT_PROFIT)/OrdersTotal();
if(avgProfit >= 5){
    closeAllOrders(); //простой цикл по всем ордерам и закрытие каждого
}

Обнаружил у себя большие минуса из-за этого куска кода.

Техподдержка брокера говорит что в ту ночь у них был большой спред и мол я сам виноват.

Судя по цене закрытия спред был не менее 100 пунктов.

Возможно ли такое что AccountInfoDouble(ACCOUNT_PROFIT) не учитывает спред?

Как корректно проверять реальный суммарный профит?

 

В вашем куске кода русским по белому написано: Считаем текущий профит счета деленный на количество ордеров. Далее, если посчитанный профит больше 5, то вызывается функция ЗакрытьВсеОрдера. И Спред тут совсем не причем, если цена не менялась. Пусть даже не 100 пунктов а 1000. 
А вот как вы сделали вывод, что именно здесь получен минус ?  Если вы закрывались в роловер, то очень может быть что при закрытии ордеров цена проскользила. Как с этим бороться - зависит от брокера. 

А техподдержка в 99 процентов случаев вам помогут решить проблемы с деньгами или сайтом. В техническом плане как правил - полные НУЛИ ! 

 

"А вот как вы сделали вывод, что именно здесь получен минус ? " - т.к. только в этом месте советник закрывает ордера )  

Т.е. советник видит что AccountInfoDouble(ACCOUNT_PROFIT) > 0 ,  берет текущее значение bid и закрывает ордера и оказывается в минусе. Я не понимаю как это возможно  Цена менялась не более чем на пару пунктов.

 
SpringInvestor:

Советник содержит следующий кусок кода:

double avgProfit = AccountInfoDouble(ACCOUNT_PROFIT)/OrdersTotal();
if(avgProfit >= 5){
    closeAllOrders(); //простой цикл по всем ордерам и закрытие каждого
}

Обнаружил у себя большие минуса из-за этого куска кода.

Техподдержка брокера говорит что в ту ночь у них был большой спред и мол я сам виноват.

Судя по цене закрытия спред был не менее 100 пунктов.

Возможно ли такое что AccountInfoDouble(ACCOUNT_PROFIT) не учитывает спред?

Как корректно проверять реальный суммарный профит?

AccountInfoDouble(ACCOUNT_PROFIT) учитывает спред.
Убыток мог случиться из-за проскальзываний.

Конспектируйте цену в момент получения сигнала на закрытие и потом сравните ее с реальными ценами закрытия сделок.
Тулзой для оценки проскользов могу поделиться в личку.

 

Похоже, что дело в проскальзываниях.

От техподдержки получил ответ, что "В заявках на исполнение Ордеров, поданных Вами 05.08.2019 с 00:05:03 по 00:05:07, был указан диапазон цен на закрытие позиции: 1.11056 / 1.11119."

При том, что у меня задано проскальзывание в 30 пунктов:

double price=Bid;
if(OrderType()==OP_SELL)
{
price=Ask;
}
 

if(!OrderClose(OrderTicket(),OrderLots(),NormalizeDouble( price, Digits),30,Red))


Получается что вопрос сводится к тому как определять проскальзывания так чтобы и цена не устаревала и сам не попадал в минуса.  А действительно как?

 

сделайте следующее:

заведите переменную

Spread=0.0002; //некий фиксированный, выставьте так, как Вам надо

currSpread=MarketInfo(Symbol(),MODE_SPREAD)*Point; //текщий рыночный спред

if(currSpread<=Spread && avgProfit >= 5)closeAllOrders();

в коде функции closeAllOrders() также пропишите эту же логику на спред при  необходимости

после восстановления спреда до нормального, можете продолжать закрытие
 
SpringInvestor:

Похоже, что дело в проскальзываниях.

От техподдержки получил ответ, что "В заявках на исполнение Ордеров, поданных Вами 05.08.2019 с 00:05:03 по 00:05:07, был указан диапазон цен на закрытие позиции: 1.11056 / 1.11119."

При том, что у меня задано проскальзывание в 30 пунктов:

double price=Bid;
if(OrderType()==OP_SELL)
{
price=Ask;
}
 

if(!OrderClose(OrderTicket(),OrderLots(),NormalizeDouble( price, Digits),30,Red))

Дело не в том, какое проскальзывание было указано в приказе, а то, что пока приказы исполнялись, цена улетела.


SpringInvestor:

Получается что вопрос сводится к тому как определять проскальзывания так чтобы и цена не устаревала и сам не попадал в минуса.  А действительно как? 

Без проскользов - только лимитками, и то - не у любого брокера.

Вариант проще (и быстрее) — вместо закрытия 10 сделок открыть одну встречную, с объемом равным сумме объемов открытых сделок, а потом закрыть все сделки встречно (тогда уже не важно будет, куда уйдет цена).

 
Renat Akhtyamov:

сделайте следующее:

заведите переменную

Spread=0.0002; //некий фиксированный, выставьте так, как Вам надо

currSpread=MarketInfo(Symbol(),MODE_SPREAD)*Point; //текщий рыночный спред

if(currSpread<=Spread && avgProfit >= 5)closeAllOrders();

в коде функции closeAllOrders() также пропишите эту же логику на спред при  необходимости

после восстановления спреда до нормального, можете продолжать закрытие

Если все равно, по какой цене закрывать, зачем анализировать спред?

А если не все равно, то как можно ждать восстановления спреда? Цена может быть где угодно в тот момент.

 
Andrey Khatimlianskii:

Если все равно, по какой цене закрывать, зачем анализировать спред?

А если не все равно, то как можно ждать восстановления спреда? Цена может быть где угодно в тот момент.

да нет, не все равно

спредом играют так, аж диву даешься

например,в данном случае, закинули например Ask пунктов на 100, и средний профит стал больше 5

выполнилось условие для закрытия ордеров

начинается закрытие, Ask уже вернулся, естественно реквотка по невозможности закрыться по прежнему Ask-у и дальнейшее закрытие продолжается уже в убыток

Вот это и не надо топик-стартеру

Так что самый лучший вариант - это работать с учетом среднестатистического спреда, т.е. практически фиксированного, все время отслеживать спред

 
Renat Akhtyamov:

да нет, не все равно

спредом играют так, аж диву даешься

например,в данном случае, закинули например Ask пунктов на 100, и средний профит стал больше 5

выполнилось условие для закрытия ордеров

начинается закрытие, Ask уже вернулся, естественно реквотка по невозможности закрыться по прежнему Ask-у и дальнейшее закрытие продолжается уже в убыток

Вот это и не надо топик-стартеру

Так что самый лучший вариант - это работать с учетом среднестатистического спреда, т.е. практически фиксированного, все время отслеживать спред

Если Аск увеличится, прибыль уменьшится. А в -100 пунктов он не прыгнет.

Да и нельзя закладываться на то, что спред через секунду (2, 5, 10) вернется в норму.

Вроде бы очевидные вещи.

 
Andrey Khatimlianskii:

Если Аск увеличится, прибыль уменьшится. А в -100 пунктов он не прыгнет.

Да и нельзя закладываться на то, что спред через секунду (2, 5, 10) вернется в норму.

Вроде бы очевидные вещи.

не то что через секнуду, за доли

своими глазами вчера такое на битке наблюдал

согласен, Bid лётал при стоячем Ask-е, ну и профит тоже

вещи очевидные, но тем не менее, деньги на первом месте, естественно для обоих сторон

именно поэтому обратил внимание на эту ветку и предложил копию своего решения

Причина обращения: