[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 662

 
drknn:


Correct, car le premier paramètre renvoie un nombre et le second paramètre est une valeur entière dans des limites acceptables. Toute la question est de savoir ce qui entrera exactement dans la variable. Essayez de l'imprimer tel quel et essayez cette construction :

C'est intéressant... Je l'ai fait comme ça :

int Trend_BBOsMA (string sy, int tf)
{
   if (sy=="" || sy=="0") sy=Symbol();
double
   BB    =iCustom(sy,tf,"BB_MA",13,13,0,1),
   OsMA  =iOsMA  (sy,tf,9,21,5,PRICE_CLOSE,1),
   AC1   =NormalizeDouble(iAC(sy,tf,1),8),
   AC2   =NormalizeDouble(iAC(sy,tf,2),8),
   AC3   =NormalizeDouble(iAC(sy,tf,3),8);
   
   Comment("\n","AC1 = ",AC1," AC2=",AC2);
   string str1=AC1;
   Print("str1 = ",str1);
   string str2=AC2;
   Print("str2 = ",str2);
   
   if (BB>0 && OsMA>0 && AC1>AC2) return(1);
   if (BB<0 && OsMA<0 && AC1<AC2) return(-1);
   else return(0);
}
Le commentaire affiche

AS1 = 0,001 AS2 = 0,001,

Dans la fenêtre de données, AC1 = 0,001008, AC2 = 0,001020,

et dans le journal, il est indiqué (les deux dernières valeurs) :

0.00100029
0.00100771

 
IgorM:

Je n'arrive pas à trouver comment trouver les extrema d'une fonction

J'ai un tableau de données qui stocke des valeurs :

Comment trouver les fractures - extrema en utilisant un tableau de données de 250 éléments et en ne stockant que les numéros des éléments où se trouvent ces extrema ?


Les gars, c'est un peu compliqué :)
Vous pourriez esquisser une méthode simple :

//+------------------------------------------------------------------+
void searchExtremums(double base[], double &find[]){
   int step = 1;
   for(int loop = 0; loop < ArraySize(base)-2; loop++){
      if((base[loop] > base[loop+1] && base[loop+1] < base[loop+2]) || (base[loop] < base[loop+1] && base[loop+1] > base[loop+2])){
         ArrayResize(find, step);
         find[step - 1] = base[loop+1];
         step++;
      }
   }   
}
//+------------------------------------------------------------------+

Vous passez le tableau dans lequel vous voulez trouver les extrema (base) et le tableau dans lequel les écrire (find), un exemple d'appel pour le tableau Vladimir :

double res[];
searchExtremum(my_array, res);

Et nous vous montrons le résultat :

for(int s = 0; s < ArraySize(res); s++)Alert(res[s])
Cela semble plus facile de cette façon :)
 
ToLik_SRGV:


Cela semble plus simple :)


OK, je vais essayer de vérifier aujourd'hui, c'est peut-être plus simple, mais je n'arrive pas à trouver la bonne combinaison dans ma tête.

void searchExtremums(double base[], double & find[]){

Je dois maintenant vérifier des fonctions comme celles-ci

 
IgorM:

OK, je vais essayer de vérifier aujourd'hui, c'est peut-être plus simple, mais je n'arrive pas à trouver la bonne combinaison dans ma tête.

void searchExtremums(double base[], double & find[]){

maintenant je dois vérifier ces fonctions

Igor, j'ai déjà écrit à ce sujet dans ce fil :))))

Lorsque vous transmettez une variable à une fonction, par le biais de son paramètre, la variable est transmise par valeur, ce qui signifie que le fait de modifier la variable dans la fonction elle-même n'entraînera pas son écrasement.
Essayez de le passer par référence, insérez un "&" devant le nom du paramètre.

void simple(string &s){
//                 ^
//       спец сим. & перед именем переменной задает передачу по ссылке, а не по значению
//
}
 
Mathemat:

Le message de Volfram a été supprimé pour s'être propagé dans plusieurs fils.

Volfram, vous avez créé votre propre fil de discussion spécifiquement dans ce but. On vous a déjà répondu ; n'est-ce pas suffisant ?

P.S. Je vais te dire un secret, Volfram: l'absence d'intérêt manifeste pour ton idée suggère implicitement que cette idée ne mérite aucune attention. Par conséquent, personne n'était disposé à le mettre en œuvre "contre rémunération".

Vous avez annulé l'option de notification par courriel...

Comment pouvez-vous savoir si quelqu'un a répondu ou non sans cela ? Quand le récupérerez-vous ?

 
artmedia70:

C'est intéressant... J'ai fait ça :

Le commentaire est affiché en même temps

AS1 = 0,001 AS2 = 0,001,

Dans la fenêtre de données AC1 = 0.001008, AC2 = 0.001020,

et dans le journal, il est indiqué (les deux dernières valeurs) :

0.00100029
0.00100771


C'est probablement aux développeurs d'en décider ;)
 
artmedia70:

C'est intéressant... J'ai fait ça :

Le commentaire est affiché en même temps

AS1 = 0,001 AS2 = 0,001,

Dans la fenêtre de données AC1 = 0.001008, AC2 = 0.001020,

et dans le journal, il est indiqué (les deux dernières valeurs) :

0.00100029
0.00100771

J'ai essayé aussi, tout semble correct, dans le commentaire :
AC = -0.0004, dans le journal -0.00035586
AC2 = -0.0007, journaux -0.00068589
 
ToLik_SRGV:
J'ai essayé aussi, tout semble bien, dans le commentaire :
AC = -0.0004, dans le journal -0.00035586
AC2 = -0.0007, dans le juranle -0.00068589

Comment() semble arrondir les valeurs en interne... Et comme il est parfois pratique de les voir directement à l'écran pendant les tests visuels... Cependant, pas exactement... :)

Oui, et, d'ailleurs, ici sur un forum sur la normalisation lire ainsi de quelques heures à 7h30 du matin ....
La normalisation doit être effectuée aussi près que possible de l'opération de comparaison... Par conséquent, je pense que je devrais changer certaines choses dans certaines fonctions et codes... Et alors le test montrera la différence...

 
artmedia70:

Comment() semble arrondir les valeurs en interne... Et comme il est parfois pratique de les voir directement à l'écran pendant les tests visuels... Cependant, pas exactement... :)

Lorsque j'écrivais une fonction de gestion de lot, j'ai dû créer une bibliothèque de dll en Delphi, car la tâche dont j'avais besoin en utilisant MQL4 était impossible à résoudre...
 

Bonjour ! Pouvez-vous s'il vous plaît m'expliquer, à moi qui suis un super naze en MQL4, quelle est la bonne chose à faire. Je suis en train d'écrire ma première évaluation environnementale. Je place un ordre SellStop et après son déclenchement, l'ordre BuyStop est placé. Je pense que je dois utiliser OrdeCloseTime. J'ai essayé de nombreuses variantes mais l'EA ne voit l'ordre que lorsque OrdeCloseTime==0. Après la fermeture de SellStop, SellStop est à nouveau ouvert. Je vous fournis le code. Dans cette variante, le SellStop et le BuyStop sont ouverts simultanément. Aidez-moi, s'il vous plaît. Merci d'avance.

int I = 0 ;

int start()

{

si (I < 1)

{

ticket=OrderSend(Symbol(),OP_SELLSTOP,Lot,OP_SS,Slippage,SL,CP_SS) ;

si (ticket>0)

{ Alert("OrderSend"," ",ticket) ; } else { Alert("!OrderSend","",GetLastError()) ; }

//--------------------------------------------------------------------------

si (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{ Alert("OrderSelect", ",ticket) ; } else { Alert("!OrderSelect"," ",GetLastError()) ; }

//--------------------------------------------------------------------------

OrderSend(Symbol(),OP_BUYSTOP,Lot,OP_BS,Slippage,SL,CP_BS) ;

}

I=1 ;

}

retour (0) ;

//--------------------------------------------------------------------------