Инфа о пополнении и снятии - страница 2

 
Ihor Herasko:

Так же, как и простое среднее:

  1. Взять разницу времени между закрытием ордера и его открытием.
  2. Сложить разности для всех ордеров.
  3. Разделить полученную сумму на количество найденных ордеров.

Еще по поводу пополнения: посчитало пополнение - 50 000 а снятие 4156, НО! это демо счет... что-то не так...

 
Maksim Neimerik:

Еще по поводу пополнения: посчитало пополнение - 50 000 а снятие 4156, НО! это демо счет... что-то не так...

Показывайте, как считали, показывайте стейтмент.

 
Ihor Herasko:

Показывайте, как считали, показывайте стейтмент.

         if(OrderType()==6)
         if(mode==0&&OrderProfit()>0)res=res+OrderProfit();
         if(mode==1&&OrderProfit()<0)res=res+OrderProfit();

mode==1 - снятие, mode==0 - пополнение

 
Есть еще прикол:) У меня в том же сове есть функция подсчета профита за всю историю счета... так вот после того как я в ОТДЕЛЬНОЙ функции прировнял тип ордера к 6 профит за всю историю увеличился на сумму пополнения!:) 
 
Maksim Neimerik:

mode==1 - снятие, mode==0 - пополнение

Вот так видит указанный код компилятор:

if (OrderType()==6 && mode==0 && OrderProfit()>0)
   res += OrderProfit();

if (mode == 1 && OrderProfit() < 0)
   res += OrderProfit();

Теперь понятно, в чем ошибка?

 
Maksim Neimerik:
Есть еще прикол:) У меня в том же сове есть функция подсчета профита за всю историю счета... так вот после того как я в ОТДЕЛЬНОЙ функции прировнял тип ордера к 6 профит за всю историю увеличился на сумму пополнения!:) 

В чем же прикол? Раньше Вы считали прибыль. А теперь считаете прибыль плюс пополнения/снятия. Все логично.

 
Ihor Herasko:

В чем же прикол? Раньше Вы считали прибыль. А теперь считаете прибыль плюс пополнения/снятия. Все логично.

Уже разобрался, заработался просто, извиняюсь!

 
Maxim Kuznetsov:

просуммировать ( iBarShift(_Symbol,PERIOD_M1,OrderCloseTime())-iBarShift(_Symbol,PERIOD_M1,OrderOpenTime()) ) * 60

и поделить на кол-во ордеров

Я дико извиняюсь, но я наверное что-то не так сделал:

int TradeTiming()
{
   int res=0,t=0;
   for(int i=OrdersHistoryTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderType()!=6)
      {
         t=t+((iBarShift(OrderSymbol(),PERIOD_M1,OrderCloseTime())-iBarShift(OrderSymbol(),PERIOD_M1,OrderOpenTime()))*60);
      }
   }
   res=t/CountHistoryOrders();
   return(res);
}

было два ордера (новый демо счет) по 2 и 3 минуты а результат -2... Пожалуйста, помогите, я уже запарился!

 
Maksim Neimerik:

Я дико извиняюсь, но я наверное что-то не так сделал:

было два ордера (новый демо счет) по 2 и 3 минуты а результат -2... Пожалуйста, помогите, я уже запарился!

то есть всё наоборот, индекс OpenTime ведь больше CloseTime :-) Извините, написано было "с руки"

вот так вот:

t=t+((iBarShift(OrderSymbol(),PERIOD_M1,OrderOpenTime())-iBarShift(OrderSymbol(),PERIOD_M1,OrderCloseTime()))*60);


если нужна точность до секунд и малого числа ордеров или сделки держаться меньше минуты, то формула гораздо длиннее :-) а при большом числе ордеров оно всё равно сходится

PS/ смысл рассчёта - считать сколько торгового времениудерживалась сделка. Если считать просто разницу по времени, то переход через выходные/праздники собьёт всю статистику

 
Maxim Kuznetsov:

то есть всё наоборот :-)

вот так вот:

Зачем считать время удержания рыночного ордера по барам? Ведь можем получить дырки во времени. Например, открытие в 23:59 пятницы, закрытие в 00:01 понедельника. По барам получим 2 минуты, хотя ордер был открыт в течение двух суток. Также не стоит исключать вариант с открытием и закрытием ордера на одной минутной свече. Тоже получим неправильный расчет.

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