Bonjour ! Quelqu'un peut-il expliquer pourquoi les prix sur les graphiques H4 et M15 ne coïncident pas ? Dans la capture d'écran de la M15, le prix a franchi la ligne rouge (à gauche de la ligne verticale). Et une minute plus tard, il y a une capture d'écran de H4 où le prix est encore très loin de celui-ci (à droite de la ligne). Et ici, dans ce programme, seul un autre dtz a une ombre de la bougie (la bougie est la plus extérieure à droite).
Equal: Bonjour ! Quelqu'un peut-il expliquer pourquoi les prix sur les graphiques H4 et M15 ne correspondent pas ? Dans la capture d'écran de la M15, le prix a franchi la ligne rouge (à gauche de la ligne verticale). Et une minute plus tard, il y a une capture d'écran de H4 où le prix est encore très loin de celui-ci (à droite de la ligne). Et voici la capture d'écran de ce programme, mais un autre dtz a une ombre de la bougie (la bougie est la plus à l'extérieur à droite).
Vous ne savez pas encore que les devis diffèrent selon les sociétés de courtage ? Ils sont différents même pour la démo et le réel dans une seule et même société de courtage ! Quelle surprise ( :
Tout fonctionne, mais j'utilise un conseiller de grille, qui couvre actuellement un groupe d'ordres et, par conséquent, les bénéfices se chevauchent les uns les autres. J'aimerais que le bénéfice de ce groupe fermé soit totalisé et que seul le montant soit affiché (comme implémenté dans l'indicateurDrawProfit d'IceFX), plutôt que séparément pour chaque ordre comme je le fais maintenant. Aidez-moi à le faire correctement :)
Vitalie Postolache: C'est nouveau pour vous que les devis des différentes sociétés de courtage soient différents ? Oui, ils sont différents même pour la démo et le commerce réel dans une seule et même société de courtage ! Quelle surprise ( :
La surprise est différente. Il s'agit d'un seul et même compte réel et le prix change (il n'est pas le même) simplement en passant à une autre période de temps.
Dans une autre société de courtage, également sur un compte réel, lorsque l'on change le graphique, tout est OK ! Le fait que les prix soient différents est clair, il n'est pas clair que l'on ait comme si deux prix à la fois, un sur les minutes, un sur les heures est différent (très différent). Je comprends que ça ne devrait pas être comme ça, mais je me demande où est le problème. D'ailleurs, le chandelier a "corrigé" en une heure environ après l'ouverture du prochain.
Tout fonctionne, mais j'utilise un conseiller de grille, qui couvre actuellement un groupe d'ordres et, par conséquent, les bénéfices se chevauchent les uns les autres. J'aimerais que le bénéfice de ce groupe fermé soit totalisé et que seul le montant soit affiché (comme implémenté dans l'indicateurDrawProfit d'IceFX), plutôt que séparément pour chaque ordre comme je le fais maintenant. Aidez-moi à le faire correctement :)
ilnur17021992: Les ordres sont ouverts par le robot netmaker, pour l'ensemble du groupe il calcule et met un TP commun, auquel ils sont ensuite fermés.
Capture d'écran jointe :
C'est comme ça :
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ int TotalPos=-1; voidOnTick() { // остальной код
//-- if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol()==Symbol() && OrderType()<=1) { History();
... } }}} TotalPos=OrdersTotal(); // запомним количество
//-- }
//+------------------------------------------------------------------+ //| Create Object istory | //+------------------------------------------------------------------+ void History() { string Ticket=(string)OrderTicket(); color col=Red; if(OrderType()==0)col=Blue; datetime a=OrderOpenTime(); double b=OrderOpenPrice(); datetime c=OrderCloseTime(); double d=OrderClosePrice(); double prSep=OrderProfit()+OrderCommission()+OrderSwap(); double prAll=0; int cn=0; string hTicket; for(int i=OrdersHistoryTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol()==Symbol() && OrderType()<=1) { datetime ct=OrderCloseTime(); // 60 секунд разницы между закрытием первой и последней в сетке if(c<=ct+60 && c>=ct-60) { prAll+=OrderProfit()+OrderCommission()+OrderSwap(); hTicket=(string)OrderTicket(); cn++; } }}} ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b); ObjectSet(Ticket+"Open",OBJPROP_COLOR,col); ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
L'étiquette de prix(OBJ_ARROW_LEFT_PRICE) peut-elle avoir son propre texte au lieu du prix, si oui comment ?
Et ici, dans ce programme, seul un autre dtz a une ombre de la bougie (la bougie est la plus extérieure à droite).
Bonjour ! Quelqu'un peut-il expliquer pourquoi les prix sur les graphiques H4 et M15 ne correspondent pas ? Dans la capture d'écran de la M15, le prix a franchi la ligne rouge (à gauche de la ligne verticale). Et une minute plus tard, il y a une capture d'écran de H4 où le prix est encore très loin de celui-ci (à droite de la ligne).
Et voici la capture d'écran de ce programme, mais un autre dtz a une ombre de la bougie (la bougie est la plus à l'extérieur à droite).
Essayer d'écrire quelque chose de similaire :IceFX DrawProfit
Code :
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderType()<=1)
History();
}
}
void History()
{
string Ticket=IntegerToString(OrderTicket());
color col=Red;
if(OrderType()==0)col=Blue;
datetime a=OrderOpenTime();
double b=OrderOpenPrice();
datetime c=OrderCloseTime();
double d=OrderClosePrice();
double profit=OrderProfit();
ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
ObjectSet(Ticket+"Profit",OBJPROP_WIDTH,2);
ObjectSetText(Ticket+"Profit",DoubleToString(profit,2),10,"Arial",White);
ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d+Point*5);
ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+10000);
}
Tout fonctionne, mais j'utilise un conseiller de grille, qui couvre actuellement un groupe d'ordres et, par conséquent, les bénéfices se chevauchent les uns les autres. J'aimerais que le bénéfice de ce groupe fermé soit totalisé et que seul le montant soit affiché (comme implémenté dans l'indicateurDrawProfit d'IceFX), plutôt que séparément pour chaque ordre comme je le fais maintenant. Aidez-moi à le faire correctement :)
C'est nouveau pour vous que les devis des différentes sociétés de courtage soient différents ? Oui, ils sont différents même pour la démo et le commerce réel dans une seule et même société de courtage ! Quelle surprise ( :
Essayer d'écrire quelque chose de similaire :IceFX DrawProfit
Code :
{
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderType()<=1)
History();
}
}
void History()
{
string Ticket=IntegerToString(OrderTicket());
color col=Red;
if(OrderType()==0)col=Blue;
datetime a=OrderOpenTime();
double b=OrderOpenPrice();
datetime c=OrderCloseTime();
double d=OrderClosePrice();
double profit=OrderProfit();
ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
ObjectSet(Ticket+"Profit",OBJPROP_WIDTH,2);
ObjectSetText(Ticket+"Profit",DoubleToString(profit,2),10,"Arial",White);
ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d+Point*5);
ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+10000);
}
Tout fonctionne, mais j'utilise un conseiller de grille, qui couvre actuellement un groupe d'ordres et, par conséquent, les bénéfices se chevauchent les uns les autres. J'aimerais que le bénéfice de ce groupe fermé soit totalisé et que seul le montant soit affiché (comme implémenté dans l'indicateurDrawProfit d'IceFX), plutôt que séparément pour chaque ordre comme je le fais maintenant. Aidez-moi à le faire correctement :)
Les bénéfices sont comptabilisés dans un cycle distinct
Laquelle ? Comment puis-je déterminer que des commandes spécifiques constituent un groupe et que leur bénéfice doit être additionné ?
Comment les fermez-vous ? Sont-ils fermés en tant que groupe par une fonction ou d'une autre manière ?
Les ordres sont ouverts par le robot netmaker, pour l'ensemble du groupe il calcule et met un TP commun, auquel ils sont ensuite fermés.
C'est comme ça :
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
int TotalPos=-1;
void OnTick()
{
// остальной код
//--
if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
History();
...
//--}
}}} TotalPos=OrdersTotal(); // запомним количество
}
//+------------------------------------------------------------------+
//| Create Object istory |
//+------------------------------------------------------------------+
void History() {
string Ticket=(string)OrderTicket();
color col=Red;
if(OrderType()==0)col=Blue;
datetime a=OrderOpenTime();
double b=OrderOpenPrice();
datetime c=OrderCloseTime();
double d=OrderClosePrice();
double prSep=OrderProfit()+OrderCommission()+OrderSwap();
double prAll=0;
int cn=0;
string hTicket;
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if(OrderSymbol()==Symbol() && OrderType()<=1) {
datetime ct=OrderCloseTime();
// 60 секунд разницы между закрытием первой и последней в сетке
if(c<=ct+60 && c>=ct-60) {
prAll+=OrderProfit()+OrderCommission()+OrderSwap();
hTicket=(string)OrderTicket();
cn++;
}
}}}
ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
Ticket=cn>1?hTicket:Ticket;
ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
ObjectSet(Ticket+"Profit",OBJPROP_ANCHOR,0);
ObjectSetText(Ticket+"Profit",DoubleToString(prAll,2),10,"Arial",/*White*/clrBlack);
ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d);
ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+Period()*60*2);
}