Calcolo dei profitti degli ordini chiusi "HELP - pagina 2

 
Renat Akhtyamov:

No, non intendo il modo in cui l'avete già scritto.
Dimmi in parole - calcolo del profitto per quali ordini chiusi ti interessa
- quotidianamente
- in perdita
- ultimo ordine
o qualcos'altro?
Descrivere la serie

Una serie di ultimi ordini chiusi "per ora"

 
Natashe4ka:

Serie di ultimi ordini chiusi "per ora"

Cioè, avete bisogno di informazioni sulla serie di ordini chiusi più di recente, se ho capito bene?

Per implementare questo approccio, dovresti prima riempire l'array di biglietti d'ordine ad ogni chiusura riuscita e poi estrarre le informazioni sugli ordini chiusi nella forma che ti serve

Puoi farlo da solo?

 

Prova


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:

Prova


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);
}

E se non si chiude alla stessa ora?

Non è proprio così.

E se ve ne ricordate quando presentate l'ordine di chiusura, allora andrà bene.

ma questa linea...

t=OrderCloseTime();

non è necessario.

Tirerà il totale di tutta la serie

Ma la signora vuole informazioni più dettagliate, come ho capito dal primo post

 
Renat Akhtyamov:
E se non si chiude alla stessa ora?
Se c'è una funzione da chiudere, tutto si risolverà
 
Renat Akhtyamov:

Quindi hai bisogno di informazioni sull'ultima serie di ordini chiusi, se ho capito bene?

Per implementare questo approccio, dovresti prima creare un array di biglietti d'ordine a chiusura avvenuta e poi estrarre le informazioni sugli ordini chiusi

Puoi farlo da solo?

Per favore, consigliateci di usare un esempio.

Cioè

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

E poi confrontare?

 
Natashe4ka:

È meglio che mi dia un esempio.

Cioè

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

E poi confrontare?

Nessun problema.

Ora l'unica cosa rimasta da chiarire è come dovrebbero essere le informazioni sugli ordini chiusi della serie ?

Si tratta di un trasferimento o l'importo deve essere diviso per + e - ?

 

C'è un indicatore per

i-Profit

Emette iprofitti correnti per oggi, settimana, mese, anno.

 
Natashe4ka:

Un esempio migliore sarebbe

Ecco un esempio:

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

Il resto della storia

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых позиций    |
//+----------------------------------------------------------------------------+
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);
}}


Lo otteniamo anche se riavviamo il terminale

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

C'è un indicatore per

i-Profit

Emette iprofitti correnti per oggi, settimana, mese, anno.

Non è adatto, non ci sono informazioni per 10 anni.