[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 - 2. - page 105

 
abolk:
Regardez ici : https://docs.mql4.com/ru/basis/operations/math
J'ai tout regardé. Comment puis-je résoudre mon problème ?
 
Zhunko:
Vous pouvez le faire aussi.

b ne serait-il pas égal à un ?

J'ai vérifié. Un.

 
artmedia70:
Créer des drapeaux, par exemple

Pour TP1 - bool TP1, pour TP2 - bool TP2, etc...

Initialement, leurs valeurs sont fausses.

Avant la prochaine fermeture, vous faites un contrôle :

if (!TP1) {code pour fermeture partielle de la première partie, après fermeture réussie écrire TP1=true}

if (!TP2) {code pour fermer partiellement la deuxième partie, après une fermeture réussie écrire TP2=true}

... et ainsi de suite pour toutes les pièces...

Ainsi, les drapeaux signaleront que chaque partie a déjà été fermée une fois...


Merci ! J'ai retravaillé le code... TP0==false Je l'ai mis au début du programme .

Le problème reste entier : La 1ère partie se ferme et commence immédiatement à fermer la 2ème :-( ..., avec l'erreur 131 pour la deuxième, compréhensible - taille de lot différente ) Mais une autre nuance est que pour la 1ère partie ""Alert ("Closed ",Lot," Lot Buy ",Ticket) ;"" ne s'écrit pas dans le log, c'est-à-dire qu'il n'atteint pas la vérification Ans==true. Pourquoi ???? Voici un morceau de code...

Merci d'avance !

while(true) // Fermer la boucle de la horde.
{
if (TP0==false && (Cls_B0==true ||Cls_S0==true))

{
LotC=MathRound(Lot/4/Step)*Step ;
Alert("Lot-",Lot, "Attempting to close-",LotC," Lot Buy ",Ticket,. En attente d'une réponse...") ;

RefreshRates() ; // Rafraîchir les données
Ans=OrderClose(Ticket,LotC,Bid,5) ; // TicketClose Acheter 1/3 lots ?
if (Ans==true) // Cela a marché :)
{
TP0=true ;
Alert ("Closed ",Lot," Lot Buy ",Ticket) ;
break ; // Sortie de la boucle fermée
}
if (Fun_Error(GetLastError())==1) // Gestion des erreurs
continue ; // Réessayer
return ; // Sortie de start()
}

 
Sinichka:

Chers programmateurs !

Aidez-nous, s'il vous plaît. L'indicateur dessine des valeurs sur une divergence latente haussière, et ne dessine pas de divergence latente baissière..... Il écrit que l'erreur 4002 - array index - out of range.

Il semble que j'ai tout arrangé... Ça m'a pris une soirée entière... Et c'est dommage - le code est le plus simple... Mais ça dessine des taureaux avec des flèches, mais pas des ours... S'IL VOUS PLAÎT ! Quelle est l'erreur dans ?????????????????????


Alena,

Vous devez allouer de la mémoire pour les tableaux vpadcci[], v[], hh[], ss[]. Ils sont déclarés comme dynamiques, mais leur taille n'est spécifiée nulle part. La taille d'un tableau dynamique est spécifiée à l'aide de la fonction ArrayResize().

P.S. Et s'il vous plaît utiliser le bouton SRC pour insérer le code

 
Snaf:
Question pour MT5. Comment puis-je savoir que le testeur de stratégie a terminé son travail ? Autre que visuellement :)

La fonction deinit() est exécutée lorsque le travail est terminé. Par conséquent, si nous y arrivons, cela signifie que le travail de l'expert est terminé. Pour déterminer si le travail dans le testeur est en cours, utilisez la fonction IsTesting().


Désolé, j'ai remarqué que cette question est liée à MT5.

C'est la même chose ici, seulement OnDeinit() et MQL5InfoInteger(MQL5_TESTING).

 
alsu:

Alena,

Vous devez allouer de la mémoire pour les tableaux vpadcci[], v[], hh[], ss[]. Ils sont déclarés comme dynamiques, mais leur taille n'est spécifiée nulle part. La taille d'un tableau dynamique est définie à l'aide de la fonction ArrayResize().

P.S. Et s'il vous plaît utiliser le bouton SRC pour insérer le code


Merci beaucoup pour la réponse, je vais y réfléchir !
 
eddy:

вопрос програмистам: как сделать число после запятой целым?:)

например в числе 1,128 нужно 128, в 1,12 - 12, в 1,2 - 2)

exnern double n=1,12
n-=MathFloor(n);          // 0.12 = 0.1200000..01 или 0.11999999..99
int n2=MathRound(n*1000); // 0.12 > 120 или 119
while(true)               // пока в конце 0 или 9
 if(n2%10<1)              // n2==хз*10+0
    n2/=10; else          // убираем 0
 if(n2%10==9)             // n2==хз*10+9
   {n2=MathRound(n2/10);} // округляем 9 (119 > 11.9 > 12)
 else if(n2%10>0) break;
C'est ainsi que j'ai résolu le problème. Un bémol : on ne peut pas obtenir un nombre s'il se termine par 0 ou 9. Mais je n'ai pas besoin de le faire, je me contente d'entrer la période de calcul (4,8,12,16,24,36,48, etc.).
 

Veuillez indiquer comment enregistrer correctement que la couleur de l'indicateur VininI LRMA.mq4 https://www.mql5.com/ru/code/8200 a changé.

Si vous utilisez double iCustom(string symbol, int timeframe, string name, ..., int mode, int shift). Je n'arrive pas à comprendre. J'ai écrit iCustom(NULL,0, "VininI_LRMA_color",55,0,1) et je ne sais pas quoi en faire)).

 

Les valeurs des lignes sont dans les tampons indicateurs 1 (vert) et 2 (rouge). Lorsqu'une ligne verte est tracée sur le graphique, la variable up de la mesure 1 a la valeur de cette ligne, et la variable dn=EMPTY_VALUE et vice versa. EMPTY_VALUE est une valeur de tampon vide, sa valeur numérique est 2147483647.
Vous pouvez ensuite utiliser ces valeurs comme bon vous semble.

double up=iCustom(NULL,0,"VininI LRMA color",period,price,Shift,1,1); 
double dn=iCustom(NULL,0,"VininI LRMA color",period,price,Shift,2,1); 
 
Poseidon:
Peut-on créer un EA qui ferme tous les ordres lorsque le take-profit du dernier ordre ouvert se déclenche ?
Je ne suis qu'un débutant et je ne sais pas comment m'y prendre. Vous pouvez le faire pour moi, si ça ne vous dérange pas ?
Raison: