average lost trade

 
Сложить все убыточные сделки из истории торгового счёта и разделить полученное число на их колличество. А вывести на чарт можно сомандой Comment("Результат");
 
а как это вытянуть из истории сделок все убыточные сделки по програмному?
 
dmmikl86 писал(а) >>
а как это вытянуть из истории сделок все убыточные сделки по програмному?

https://docs.mql4.com/ru/trading/OrdersHistoryTotal

 
а кто нибудь может накидать програмный код? заранее благодарен!
 

вот народ наглючий пошел. даже скопировать из справки облом....

int i,accTotal=OrdersHistoryTotal();
double loss=0;
  for(i=0;i<accTotal;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     if (OrderProfit()<0) loss+=OrderProfit();
    }
if (accTotal>0) loss=loss/accTotal; // вот и получили средюю убыточную

Comment("Средняя убыточная сделка="+DoubleToStr(loss, 2)); // вывели на экран
 
sergeev >>:

вот народ наглючий пошел. даже скопировать из справки облом....



Поколение манипуляторов растёт.

 
sergeev писал(а) >>

вот народ наглючий пошел. даже скопировать из справки облом....

Пардон конечно, не мне Вас поправлять, но всё же ... суммарный убыток надо делить не на общее кол-во сделок, а на кол-во УБЫТОЧНЫХ сделок если правильно понял "техзадание":

int i,accTotal=OrdersHistoryTotal();
int lt=0;   // кол-во убыточных сделок
double loss=0;
  for(i=0;i<accTotal;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     if (OrderProfit()<0) 
       {
        loss+=OrderProfit();
        lt++;
       }
    }
if (accTotal>0) loss=loss/lt; // вот и получили средюю убыточную

Comment("Средняя убыточная сделка="+DoubleToStr(loss, 2)); // вывели на экран
 
goldtrader писал(а) >>

Пардон конечно, не мне Вас поправлять, но всё же ... суммарный убыток надо делить не на общее кол-во сделок, а на кол-во УБЫТОЧНЫХ сделок если правильно понял "техзадание":

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

int i,accTotal=OrdersHistoryTotal();
int lt=0;   // кол-во убыточных сделок
double loss=0;
  for(i=0;i<accTotal;i++)
    {
     //---- check selection result
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
       {
        Print("Ошибка при доступе к исторической базе (",GetLastError(),")");
        break;
       }
     if (OrderProfit()<0) 
       {
        loss+=OrderProfit();
        lt++;
       }
    }
if (lt>0) loss=loss/lt; // вот и получили средюю убыточную

Comment("Средняя убыточная сделка="+DoubleToStr(loss, 2)); // вывели на экран
 
Vinin писал(а) >>

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

Да, забыл переменную в условии поменять. Одно слово "ботаник", да ещё после НГ :)

 
всем спасибо за правки. :)
Причина обращения: