Dobbiamo aggiungere una condizione per dividere gli ordini chiusi in serie
Dicci l'algoritmo o il principio di divisione
Come fare in modo che ogni profitto chiuso di una serie sia uno nuovo, non il precedente (5; 5; 5)? .....
Invece della somma aritmetica, potremmo aggiungere una stringa di caratteri con uno spazio o punto e virgola e spazio, come preferite.
Buona idea.
Oppure potremmo metterlo in un array.
Il profitto degli ordini chiusi è considerato correttamente, ma dopo la chiusura aggiunge il valore al precedente (5; 5+5=10; 10+5=15)
Come fare in modo che ogni profitto chiuso di una serie sia nuovo, invece del precedente (5; 5; 5)?
In una serie di ordini chiusi ci possono essere ordini di acquisto e di vendita, o solo di acquisto e solo di vendita
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==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(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
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 (OrderSymbol()!= Symbol()) continue;
if (OrderMagicNumber()!= magic) continue;
if (OrderType()!= op) continue;
if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}
È complicato, c'è qualcosa di più semplice?
E puoi fare degli esempi, perché il tuo cervello sta bollendo?
Questo è un po' complicato; c'è qualcosa di più semplice?
No, non sarà più facile. Si contano sempre TUTTI gli ordini, compresi quelli che sono stati contati durante le volte precedenti in cui si è usata la funzioneLastProfitCL.E poiché ci sono sempre più ordini, aumenta anche il profitto.
Dobbiamo elaborare la condizione secondo la quale il ciclo sarà interrotto quando i nuovi ordini saranno completati.
Dobbiamo elaborare una condizione per cui il ciclo sarà interrotto quando i nuovi ordini si esauriscono.
Ecco, questo è il modo giusto di pensarla))
Ecco, questo è il modo giusto di pensarla))
Quindi?
Dov'è la condizione?
Quindi?
Dov'è la condizione?
qualcosa del genere:
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
e devi in qualche modo sottrarre il cnt nuovo dal passato
cnt 1,2,3 passato
cnt 4,5,6 nuovo
qualcosa del genere:
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
e devi in qualche modo sottrarre il cnt nuovo dal passato
cnt 1,2,3 passato
cnt 4,5,6 nuovo
No, non intendo il modo in cui l'hai già scritto.
Dimmi in parole - calcolo del profitto per gli ordini chiusi che ti interessa
per esempio:
- per il giorno
- in perdita
- ultimo ordine
o qualcos'altro?
Descrivere la serie
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Il profitto degli ordini chiusi è considerato correttamente, ma dopo la chiusura aggiunge il valore al precedente (5; 5+5=10; 10+5=15)
Come fare in modo che ogni profitto chiuso di una serie sia nuovo, invece del precedente (5; 5; 5)?
In una serie di ordini chiusi ci possono essere ordini di acquisto e di vendita, o solo di acquisto e solo di vendita
// START //
if(LastProfitCL(-1)<0) ProfitColor=Red;
if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
if(LastProfitCL(-1)==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(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //
//+----------------------------------------------------------------------------+
//| Возвращает суммарный профит в валюте депозита серии закрытых ордеров |
//+----------------------------------------------------------------------------+
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) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
}
return(LastProfit);
}