
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
No, questa linea viene rimossa. Questo è un calcolo del profitto, non funziona così.
Dove si trova il comando di chiusura nel codice - c'è
// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
if (op<0 || OrderType()==op){if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
e nella condizione di chiusura
{CloseOrder(OrderTicket());t=TimeCurrent();}
{DeleteAll();t=TimeCurrent();}1 non conta, 2 conta correttamente, 3 non conta 0.
// Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
double LastProfit=0;
for(i=OrdersHistoryTotal()-1;i>=0;i--)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
if (op<0 || OrderType()==op){if(OrderCloseTime()>=t)LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
e nella condizione di chiusura
{CloseOrder(OrderTicket());t=TimeCurrent();}
{DeleteAll();t=TimeCurrent();}1 non conta, 2 conta correttamente, 3 non conta 0
e questo è tutto.
{DeleteAll();}
E un'altra cosa.
I vostri ordini sono chiusi secondo il biglietto?
Quindi è necessario ricordare l'ora di inizio per chiudere prima la serie
Cioè, quando una decisione di chiudere una serie è stata appena formata, non importa se effettivamente si chiuderà o meno
Capisco la tua insistenza, ma ti ho dato una versione funzionante, con una buona funzione di chiusura di una serie di posizioni per il trading reale, non funzionante nel tester.
Conta e ricorda tutto, anche se il terminale viene riavviato.
Ecco un test, basta eseguirlo nel tester, e confrontare i risultati con la storia delle transazioni
PS. Ho dimenticato di scrivere il codice - ecco la correzione
Capisco la tua insistenza, ma ti ho dato una versione funzionante, con una buona funzione di chiusura di una serie di posizioni per il trading reale, non funzionante nel tester.
Conta e ricorda tutto, anche se il terminale viene riavviato.
Ecco un test, basta eseguirlo nel tester, e confrontare i risultati con la storia delle transazioni
Come posso applicare questo al mio codice?
Il valore diLastProfitCL determina la miaulteriore azione
ma per il resto
{DeleteAll();}
Un'altra cosa.
I vostri ordini si chiudono su un biglietto?
Quindi è necessario ricordare il tempo della chiusura della serie anche prima
Cioè, quando una decisione di chiudere una serie è stata appena formata, non importa se effettivamente si chiuderà o meno
Come posso applicare questo al mio codice?
Ho il valoreLastProfitCL chedetermina ulteriori azioni
Quindi è chiaro, basta applicarlo come meglio si crede.
Comment(" Последний: ",DoubleToString(LastProfit,1) ," Профит: ", DoubleToString(Profit,1) );
Dichiarare"LastProfit" una volta e usarlo dove necessario
Se l'ordine è chiuso da uno stop, allora{t=TimeCurrent();CloseOrder(OrderTicket();}{DeleteAll();} mancherà già il valore del profitto
Sì, lo farà.
Puoi controllare ogni tick per vedere quanti ordini live sono rimasti.
Se è lo stesso, allora dovresti ricordare l'ora del tick precedente.
Allora otterrete ciò di cui avete bisogno.
Ma gli arresti di solito non avvengono negli automi
Se chiude su uno stop,{t=TimeCurrent();CloseOrder(OrderTicket();}{DeleteAll();} mancherà già il valore del profitto
Conta solo quelli chiusi per ultimi nel tempo, e non dipende dall'importo di chiusura.
In generale, il compito non è completamente chiaro, quindi non ci sono altre discussioni.
//---------------------------------------------------------
Qui vedi la descrizione, non capisco più il problema:
Qui è tutto disposto, non capisco più il compito:
Questo è anche corretto se "cnt" è impostato a zero, ma allora il valore è di nuovo incomprensibile come nello screenshot 3 (dovrebbe essere un valore di profitto di 4,27)
int cnt=0;
double LastProfit=0;
for(i=0;i<OrdersHistoryTotal();i++)
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
if ((op<0 || OrderType()==op) && cnt==0) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++;} else {cnt=0;}
}
return(LastProfit);
}