Просчет профита закрытых ордеров "HELP" - страница 9

 
Natashe4ka:

Мне тоже казалось что всё считает как надо.
Не надо было мне ставить это инфо в код и жить было бы легче)) 

А теперь покоя не даёт, как это всё это время функция работала не правильно!! 

Понял, нужно убрать проверку на профит = положительный, изз-а неё и счёт останавливается позже, просто мне нужно было учитывать и предыдущий убыток у себя.

double lastloss()
{
double lastlos=0.0,lastlot=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
         {
            if(cnt==0 && OrderCloseTime()!=0) time=OrderCloseTime();
            if(OrderCloseTime()+PeriodSeconds()<time/* && op>0.0*/) break;
            op=OrderProfit()+OrderSwap()+OrderCommission();
            lastlos+=op;
            cnt++;
         }
      }
}
return(lastlos);
}
 
Natashe4ka:

Мне тоже казалось что всё считает как надо.
Не надо было мне ставить это инфо в код и жить было бы легче)) 

А теперь покоя не даёт, как это всё это время функция работала не правильно!! 

у вас на закрытие используется функция с первых страниц учебника для начинающих. В тестере она будет закрывать почти нормально, но в реальной торговле бот с таким закрытием будет часто в минуса закрываться, тем более если берёт маленький профит.

Вы вообще хоть раз пробовали торговать на реальном рынке, или только в тестере пробуете?

А такое когда нибудь встречали, как закрываются серии позиций? Обратите внимание на разницу в пунктах от поступления сигнала на закрытие, и до закрытия последней позиции

Чтоб не спамить, приложу только 3 скрина, хотя в действительности их более сотни в наличии:

  


Все функции работают у всех правильно, но работают не правильно только у вас. Вы не задавались вопросом - почему?

Ну и напоследок вопрос который задайте сами себе, нам ответ не нужен: вы собираетесь перезагружать терминал когда либо, или закрывать его на выходные, ...? Если да, то как при последующем запуске терминала будете получать профит для продолжения работы эксперта, который был при последнем закрытии серии, если вы это нигде не хотите сохранять.

 

Дальше больше:

Почему Я спрашивал о том, что делает удаление ордера между закрытиями позиций?, но не получил на него ответ


А теперь ситуация: советник начинает закрывать позиции при достижении прибыли, тут ему подсовывают не понятно зачем ордер, который не несёт в себе вообще никакой пользы, то есть ни прибыли, ни убытка, но уходит приказ на исполнение удаления ордера, пока он удаляется, цена уходит и советник продолжает закрывать дальше. Итог такой: начали закрывать профит, но так-как закрывалось всё неправильно, в итоге закрыли серию в убыток. Это нормально? Не пишите коды только для тестера, пишите код минимум для работы на демо-счёте.

 
Vitalie Postolache:

Понял, нужно убрать проверку на профит = положительный, изз-а неё и счёт останавливается позже, просто мне нужно было учитывать и предыдущий убыток у себя.

double lastloss()
{
double lastlos=0.0,lastlot=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
         {
            if(cnt==0 && OrderCloseTime()!=0) time=OrderCloseTime();
            if(OrderCloseTime()+PeriodSeconds()<time/* && op>0.0*/) break;
            op=OrderProfit()+OrderSwap()+OrderCommission();
            lastlos+=op;
            cnt++;
         }
      }
}
return(lastlos);
}

Работает, считает как надо, гениально, шикарно!!!
Спасибо - спасибо - спасибо !!!!!!!!!!!!)))))))))))))

Вы молодец))

 
Vitaly Muzichenko:

Дальше больше:

Почему Я спрашивал о том, что делает удаление ордера между закрытиями позиций?, но не получил на него ответ


А теперь ситуация: советник начинает закрывать позиции при достижении прибыли, тут ему подсовывают не понятно зачем ордер, который не несёт в себе вообще никакой пользы, то есть ни прибыли, ни убытка, но уходит приказ на исполнение удаления ордера, пока он удаляется, цена уходит и советник продолжает закрывать дальше. Итог такой: начали закрывать профит, но так-как закрывалось всё неправильно, в итоге закрыли серию в убыток. Это нормально? Не пишите коды только для тестера, пишите код минимум для работы на демо-счёте.

Да они там вообще не по порядку закрываются, так бывает, если цикл закрытия с нуля начинается.
 
Vitalie Postolache:
Да они там вообще не по порядку закрываются, так бывает, если цикл закрытия с нуля начинается.

С какого нуля?

Ну так а зачем в момент закрытия сетки, терять время на удаление ордера. Вы сами знаете, что на удаление ордера уходит время, зачем-же его терять, да и если ДЦ не быстрый, то вообще капец всему. Я когда-то выкладывал скрин, где 15 позиций закрывали 1мин.34сек, и нужно понимать, что за это время цена может пройти не один десяток пунктов, и повезёт тогда, если пойдёт в нашем направлении, а не против нас.

 
Vitaly Muzichenko:

С какого нуля?

Ну так а зачем в момент закрытия сетки, терять время на удаление ордера. Вы сами знаете, что на удаление ордера уходит время, зачем-же его терять, да и если ДЦ не быстрый, то вообще капец всему. Я когда-то выкладывал скрин, где 15 позиций закрывали 1мин.34сек, и нужно понимать, что за это время цена может пройти не один десяток пунктов, и повезёт тогда, если пойдёт в нашем направлении, а не против нас.

С этого нуля for(int i=0;i<OrdersHistoryTotal();i++) - так ордера через один в лучшем случае будут закрываться, если выбор по порядковому номеру.

Да я знаю, что удаление отложенного ордера не нужно устраивать посреди процесса закрытия серии, да и закрывать их лучше по порядку, ну так это с опытом приходит.

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