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

 
Renat Akhtyamov:

Да не, я не про то как у Вас уже написано.
Расскажите словами - расчет профита по каким закрытым ордерам Вас интересует
- за день
- убыточные
- последний ордер
или как еще?
Серию опишите

Серия последних закрытых ордеров "за сейчас"

 
Natashe4ka:

Серия последних закрытых ордеров "за сейчас"

То есть, нужна информация по последней закрытой серии ордеров, если я правильно понимаю?

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

Сами сможете?

 

Попробуйте


Comment( LastProfitCL(-1, 0) );

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1, datetime t=0){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
  for(int i=OrdersHistoryTotal()-1;i>=0;i--) {
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
    if((op<0||OrderType()==op) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
     if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
       LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
  }}}} 

 return(LastProfit);
}
 
Vitaly Muzichenko:

Попробуйте


Comment( LastProfitCL(-1, 0) );

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1, datetime t=0){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
  for(int i=OrdersHistoryTotal()-1;i>=0;i--) {
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
    if((op<0||OrderType()==op) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
     if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
       LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
     }
    }
   }
  }
return(LastProfit);
}

А если не закроется в одно и то же время?

не то чуток

А если при подаче приказа на закрытии запомнить t, тогда будет норм.

но эта строчка

t=OrderCloseTime();

 не нужна

Вытащит общую сумму по всей серии

Но мадам хочет более подробную инфу, как я понял из первого поста

 
Renat Akhtyamov:
А если не закроется в одно и то же время?
Если закрывать будет функция, то всё отработает
 
Renat Akhtyamov:

То есть, нужна информация по последней закрытой серии ордеров, если я правильно понимаю?

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

Сами сможете?

Лучше примером подскажите

Т.е.

if (cnt>0) Ticket=OrderTicket()-1;

и дальше сравнить ? 
 

 
Natashe4ka:

Лучше примером подскажите

Т.е.

if (cnt>0) Ticket=OrderTicket()-1;

и дальше сравнить ? 
 

Без проблем

Сейчас осталось уточнить - каким образом должна выглядеть информация по закрытым ордерам серии?

Перечисление потянет или сумму поделить на + и -?

 

Есть такой индикатор

i-Profit

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

 
Natashe4ka:

Лучше примером подскажите

Вот как вариант:

int ClosePosition(int type=-1,int mg=-1) {
GlobalVariableSet(GetGlobalVariableName("LastProfit"), TimeCurrent()); // запомним время закрытия
// здесь код закрытия всех и сразу, нужен цикл, чтоб не выходил с функции до полного закрытия всех
}

Дальше уже собственно всё остальное

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых позиций    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1, datetime t=0){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
  for(int i=OrdersHistoryTotal()-1;i>=0;i--) {
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
    if((op<0||OrderType()==op) && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic){
     if(t<=OrderCloseTime()) {
       t=OrderCloseTime();
       LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();
  }}}}
return(LastProfit);
}

//===============================================================================================
//----------------------- Создает и возвращает имя глобальной переменной -----------------------+
//===============================================================================================
string GetGlobalVariableName(string name="", string symb="0") {
if(symb=="0") { symb=Symbol();}
  if(!MQLInfoInteger(MQL_TESTER)) {
   return(prefix+symb+"_"+(string)AccountInfoInteger(ACCOUNT_LOGIN)+"_"+MQLInfoString(MQL_PROGRAM_NAME)+"_"+name);
  } else {
   return(prefix+symb+"_"+(string)AccountInfoInteger(ACCOUNT_LOGIN)+"_"+MQLInfoString(MQL_PROGRAM_NAME)+"_tester"+"_"+name);
}}


 Ну и получим даже тогда, когда перезагрузим терминал

void OnTick()
{
   Comment( LastProfitCL(-1, (datetime)GlobalVariableGet(GetGlobalVariableName("LastProfit"))) );
}
 
Alekseu Fedotov:

Есть такой индикатор

i-Profit

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

Он не подходит, там нет информации за 10 лет.