Nous devons ajouter une condition pour diviser les ordres fermés en séries.
Dites-nous l'algorithme ou le principe de division
Comment faire en sorte que chaque bénéfice fermé d'une série soit un nouveau bénéfice et non le précédent (5 ; 5 ; 5) ? ? .....
Au lieu de faire une somme arithmétique, nous pourrions l'ajouter à une chaîne de caractères avec un espace ou un point-virgule et un espace, selon ce que vous préférez.
Bonne idée.
Ou on pourrait le mettre dans un tableau.
Le profit des ordres fermés est considéré correctement, mais après la fermeture il ajoute la valeur au précédent (5 ; 5+5=10 ; 10+5=15)
Comment faire pour que chaque profit fermé d'une série soit un nouveau profit, au lieu du précédent (5 ; 5 ; 5) ?
Dans une série d'ordres fermés, il peut y avoir des ordres d'achat et de vente, ou uniquement des ordres d'achat et uniquement des ordres de vente.
// 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);
}
C'est compliqué, y a-t-il quelque chose de plus simple ?
Et des exemples pouvez-vous donner, parce que votre cerveau est en ébullition ?
C'est un peu compliqué ; y a-t-il quelque chose de plus simple ?
Non, ce ne sera pas plus facile. Vous comptez toujours TOUS les ordres, y compris ceux qui ont été comptés les fois précédentes où vous avez utilisé la fonctionLastProfitCL.Et comme il y a de plus en plus de commandes, le montant du bénéfice augmente également.
Nous devons élaborer la condition selon laquelle la boucle sera rompue lorsque les nouvelles commandes seront achevées.
Nous devons élaborer une condition selon laquelle la boucle sera interrompue lorsque les nouvelles commandes seront épuisées.
Voilà, c'est la bonne façon de voir les choses ;))
Voilà, c'est la bonne façon de voir les choses ;))
Et alors ?
Où est l'état ?
Et alors ?
Où en est l'état ?
quelque chose comme ça :
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
et vous devez en quelque sorte soustraire le cnt nouveau du cnt passé
cnt 1,2,3 passé
cnt 4,5,6 nouveau
quelque chose comme ça :
if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}
et vous devez en quelque sorte soustraire le cnt nouveau du cnt passé
cnt 1,2,3 passé
cnt 4,5,6 nouveau
Non, je ne veux pas dire la façon dont tu l'as déjà écrit.
Dites-moi en quelques mots - le calcul du profit pour les ordres fermés qui vous intéresse.
par exemple :
- pour la journée
- déficitaire
- dernière commande
ou autre chose ?
Décrire la série
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Le profit des ordres fermés est considéré correctement, mais après la fermeture il ajoute la valeur au précédent (5 ; 5+5=10 ; 10+5=15)
Comment faire pour que chaque profit fermé d'une série soit un nouveau profit, au lieu du précédent (5 ; 5 ; 5) ?
Dans une série d'ordres fermés, il peut y avoir des ordres d'achat et de vente, ou uniquement des ordres d'achat et uniquement des ordres de vente.
// 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);
}