[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 292

 
ed3sss:

Immédiatement avant l'instruction if, imprimez les valeurs de toutes les variables de la condition

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Il est probable que certaines valeurs de variables soient différentes de ce que vous aviez imaginé.
 
Bonjour, dans mon terminal mt4, lorsque je clique sur une des paires de devises qui sont directement sous le terminal, par exemple (eurusd) pour ouvrir une fenêtre de terminal avec seulement cette paireJ'ai besoin d'ouvrir une petite fenêtre et de l'agrandir dans le coin supérieur droit, cela ne s'est jamais produit auparavant, dites-moi pourquoi cela se produit et comment le réparer ?
 
GaryKa:

Immédiatement avant l'instruction if, enregistrez les valeurs de toutes les variables dans la condition

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Il est probable que certaines valeurs de variables soient différentes de ce que vous aviez imaginé.

Vérifiez-le, merci)
 
to hoz : D'abord, un peu de théorie.


Et maintenant la conclusion

hoz:
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Je veux comprendre comment cela fonctionne. C'est pourquoi j'ai demandé.
L'expressionsoulignée renvoie le logarithme décimal (logarithme en base 10) de bd_LOTSTEP, qui est la puissance de 10 pour obtenir bd_LOTSTEP.
 

GaryKa:

Immédiatement avant l'instruction if, enregistrez les valeurs de toutes les variables dans la condition

Print("Ask:",Ask," PriceAsk:",PriceAsk," Step:",Step," Srpead:",Srpead," BuyOrder:",BuyOrder);
Il est certain que certaines des valeurs des variables ne seront pas celles que vous aviez imaginées.


ed3sss:


Vérifiez-le, merci)

Merci, j'ai trouvé une erreur logique dans le programme, maintenant tout fonctionne.
 

Bonjour.

Comment puis-je afficher sur le graphique l'inscription sur l'instrument en cours Profit/perte des ordres ouverts.

Il est difficile de vérifier dans l'Expert Advisor s'il a ouvert des positions ou non (terminal on/off) et de récupérer le dernier volume de lot avant de fermer le terminal.

Merci.

 
hoz:

Je viens de tomber sur une fonction ici :

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|        Функция, определения минимальной разрядности лота                          |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
int LotDecimal()
{return (MathCeil (MathAbs (MathLog (bd_LOTSTEP) / MathLog (10))));}
Je veux comprendre comment cela fonctionne. C'est pourquoi j'ai demandé.

Si je me trompe, je m'excuse. MathLog(x) est ln(x) (logarithme naturel). La formule de conversion est log_a(b)=ln(b)/ln(a), dans ce cas nous obtenons ln(x)/ln(10)=lg(x)(logarithme décimal). La partie entière du logarithme décimal lg(1...9) vaut 0, lg(10...99) vaut 1, lg(100...999) vaut 2, lg(1000...9999) vaut 3 et ainsi de suite, c'est-à-dire que le logarithme d'un nombre supérieur à un est égal au nombre de chiffres de ce nombre(avant la virgule, après elle ne compte pas) moins un. Si x est compris entre 0 et un, alors la partie entière de lg(0,1...0,9) est égale à -1, lg(0,01...0,09) est égale à -2, lg(0,001...0,009) est égale à -3 et ainsi de suite, c'est-à-dire que si l'on ne regarde pas le moins, le logarithme décimal d'un nombre compris entre 0 et un est égal au nombre total de zéros avant le premier chiffre significatif. Je ne sais pas comment fonctionne MathCeil, mais si elle renvoie la partie entière d'un nombre, cette fonction est censée renvoyer le nombre de chiffres du nombre avant la virgule moins un si le nombre est supérieur à 1, et le nombre de zéros du nombre avant le premier chiffre significatif si le nombre est de 0 à 1. Le minimum de cette fonction se situe dans la plage x égale à 1...9. A partir de là, pour 10...99 et 0,1...0,9 la fonction est égale à 1, pour 100...999 et 0,01...0,09 elle est égale à 2, et ainsi de suite. L'idée est...
 

Bonjour, il y a un bug dans le programme, je me suis déjà creusé les méninges, veuillez pointer du doigt ce qui ne va pas. Je veux juste savoir pourquoi la condition pour le modifi ne fonctionne pas. Même si la condition n'est pas vraie, elle est quand même satisfaite et, par conséquent, lorsqu'on modifie les erreurs ou 1, ou 130. Merci à tous.

//--------------- modifier les ordres sous TP-------------------
for (i = OrdersTotal() - 1 ; i >= 0 ; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;
si (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continuer ;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
si (OrderType() == OP_BUY) {
si (OrderTakeProfit() == 0 || OrderTakeProfit() > OprTPB(TP)){
RefreshRates() ;
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPB(TP),0,CLR_NONE) ;
}
}
si ((OrderType() == OP_SELL)) {
if(OrderTakeProfit() == 0 || OrderTakeProfit() < OprTPS(TP)){
RefreshRates() ;
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),OprTPS(TP),0,CLR_NONE) ;
}
}
}
}
retour(0) ;
}

double LastOpPrBuy(double va=0)
{
for (i = OrdersTotal() - 1 ; i>= 0 ; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;
si (va == 0) va = OrderOpenPrice() ;
si (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continuer ;
si (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
si (OrderType() == OP_BUY && OrderOpenPrice()<va) va = OrderOpenPrice()
}
retour (va) ;
}
//----------------------------------------------------------------------------------
double LastOpPrSell(double va=0)
{
for (i = OrdersTotal() - 1 ; i>= 0 ; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;
si (va == 0) va = OrderOpenPrice() ;
si (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continuer ;
si (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
si (OrderType() == OP_SELL && OrderOpenPrice()>va) va = OrderOpenPrice()
}
retour (va) ;
}
//----------------------------------------------------------------------------------
double OprTPB(int TP)
{
int j=0 ;
double TPB=0 ;
for (i = OrdersTotal() - 1 ; i>= 0 ; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;
si (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continuer ;
si (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
si (OrderType() == OP_BUY)
{
TPB+=OrderOpenPrice() ;
j++ ;
}
}
si (j==0) {
j++ ;
TPB = Demander ;
}
TPB=(TPB/j)+TP*Point ;
retour (TPB) ;
}
//----------------------------------------------------------------------------------
double OprTPS(int TP)
{
int j=0 ;
double TPS=0 ;
for (i = OrdersTotal() - 1 ; i>= 0 ; i--)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ;
si (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continuer ;
si (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
si (OrderType() == OP_SELL)
{
TPS+=OrderOpenPrice() ;
j++ ;
}
}
si (j==0) {
j++ ;
TPS = offre ;
}
TPS=(TPS/j)-TP*Point ;
retour (TPS) ;
}
//----------------------------

 
borilunad:
Nous sommes tous des débutants ici ! Ne voyez pas que nous ne savons pas les choses simples ! Comment le savoir autrement ? Au moins nous voulons savoir, pas la façon dont certaines personnes pensent que juste demander d'insérer le code et immédiatement pomper l'argent !


))) De l'humour d'un commerçant :

- Où puis-je trouver un conseiller expert rentable ?

- Regardez quelque part au-dessus dans le fil, ils ont posté un robot appelé @MOZG@v4.12.

 
sanktum:
Bonjour, dans mon terminal mt4, lorsque je clique sur une des paires de devises qui sont directement sous le terminal, par exemple (eurusd) pour ouvrir une fenêtre de terminal avec seulement cette pairej'ai besoin d'étendre la fenêtre jusqu'au coin supérieur droit de la fenêtre, cela ne s'est jamais produit auparavant, s'il vous plaît dites-moi pourquoi c'est ainsi et comment le réparer ?
PERSONNE NE PEUT ME DONNER UN INDICE ?
Raison: