![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Gli ordini vengono chiusi in serie, ma se non ci sono condizioni di chiusura, gli ordini vengono raccolti per un giorno o due, ecc.
Se la serie viene chiusa praticamente durante un ciclo, diciamo, durante la durata di una barra, allora possiamo prendere il criterio della serie per il tempo di chiusura più una barra. Cioè, tutti gli ordini il cui tempo di chiusura è inferiore a quello dovrebbero essere scartati.
Tuttavia, c'è la preoccupazione che questo funzioni solo nel tester; qualsiasi intervento manuale risulterà in un calcolo errato del profitto (solo il profitto dell'EA sarà preso in considerazione, mentre il trade manuale no).
Se la serie viene chiusa praticamente durante un ciclo, diciamo durante la durata di una barra, allora possiamo prendere il criterio della serie per il tempo di chiusura più una barra. Cioè, tutti gli ordini con il tempo di chiusura inferiore a quello dovrebbero essere scartati.
Cioè
(t==OrderCloseTime()||t==OrderCloseTime()+60)?
Cioè
+60 ?
PeriodSeconds() sarebbe più corretto. O hai intenzione di lavorare solo su M1?
Qualcosa del genere:
{
double lastlos=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
{
if(cnt==0) time=OrderCloseTime();
op=OrderProfit()+OrderSwap()+OrderCommission();
if(OrderCloseTime()+PeriodSeconds()<time && op>0.0) break;
lastlos+=op;
if(cnt!=0) cnt++;
}
}
}
return(lastlos);
}
Qualcosa del genere:
E puoi anche numerare gli ordini nel commento, per quei DC che non sovrascrivono il commento. E quando si prova il numero dal commento, appena il numero è fuori dall'ordine - la serie è finita.
Esempio: serie di ordini numero 1,2,3,4,5. Chiuso nell'ordine 5,4,3,2,1 - il ciclo vede 1 e si interrompe. Chiusura in ordine 1,2,3,4,5 e 1 (il numero d'ordine della serie precedente) - il ciclo vede la differenza 5-1>1 e interrompe. Devo pensare a come tradurre questo in codice ))))
Quindi un nuovo valore viene aggiunto al valore precedente. E ogni nuova chiusura, un nuovo valore di profitto.
Non lo so, per me non ha senso.
Mettete le informazioni e vedrete che si aggiungono.
if(lastloss()<0) ProfitColor=Red;
if(lastloss()>0) ProfitColor=LimeGreen;
if(lastloss()==0)ProfitColor=DarkGray;
ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
ObjectSet("Last Profit", OBJPROP_CORNER, 1);
ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(lastloss(),2)),10,"Arial",ProfitColor);
Mettete le informazioni e vedrete subito cosa si aggiunge.
Hmm, sì, infatti... Continuiamo a pensare ))))
Ho anche pensato che contasse come dovrebbe.
Non avrei dovuto mettere questa informazione nel codice e la vita sarebbe stata più facile))
E ora è sconcertante come la funzione non abbia funzionato correttamente per tutto questo tempo!!!