Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1106

 
Igor Makanu :

ça va marcher :

Il est fort probable que vous ayez décrit la structure au niveau global, et qu'au niveau global vous vouliez attribuer des valeurs aux champs de la structure, cela ne fonctionnera pas.

Merci pour la réponse.

Pouvez-vous me dire, lorsque j'écris #define FXT_HEADER.intSize 70, pourquoi cela donne une erreur ?

 
//+------------------------------------------------------------------+
//|  Функция A/D                       |
//+------------------------------------------------------------------+
double A_D(ENUM_TIMEFRAMES tf, int shift)
  {
   double res=0;
   res=iAD(NULL,tf, shift);
   return res;
  }

//+------------------------------------------------------------------+
//|  Функция A/D  средняя                     |
//+------------------------------------------------------------------+
double A_D_moving(ENUM_TIMEFRAMES tf, int period, int shift)
  {
   double res=0;
   double a[1];
  
   
   for(int i=period-1; i>=0; i--)
     {
   ArrayResize(a,period,0);
      a[i]= A_D(tf, i);    
     }
   for(int j=shift; j>=1; j--)
     {
      res=iMAOnArray(a,0, period,0,MODE_SMA,j);
     }
   return res;
  }

Bonjour !

J'essaie de créer une fonction de moyenne mobile à partir de iAD(). Ça n'a pas marché jusqu'à la fin. La fonction dans la version ci-dessus sort la valeur de la moyenne mobile de iAD() sur la barre courante. Il ne dépend pas de la valeur de la variable shift.

Mais j'ai besoin que la variable shift soit l'index de la barre où la fonction renvoie la valeur correspondante de la moyenne mobile de iAD(). L'erreur décrite a été détectée par le code suivant inséré dans OnTick() :

   Comment("\n  #0= ", DoubleToString(A_D_moving(0, 20, 0)),
           "\n  ++++++++++++++",
           "\n  #1= ", DoubleToString(A_D_moving(0, 20, 1)),
           "\n  ----------------------",
           "\n  #2= ", DoubleToString(A_D_moving(0, 20, 2)));
   

Si quelqu'un peut le faire, veuillez indiquer comment réparer l'erreur.

 

Pouvez-vous m'aider à réaliser une tâche primitive ?
- l'indicateur a un contrôle pour le numéro de compte... si le numéro de compte n'est pas celui spécifié - l'indicateur donne un message (l'indicateur est juste pour les amis, etc.)
- après l'installation de l 'indicateur sur le graphique - tout fonctionne bien ... le chèque passe par... l'indicateur fonctionne

Mais après avoir redémarré le terminal - l'indicateur échoue le test ... Je comprends que le code de l'indicateur est chargé avant la connexion au courtier ? Je dois le réinstaller sur la carte... Ce n'est pas une option...
Pouvez-vous me dire à quel endroit il faut insérer ce code correctement ? Je veux pouvoir le mettre sur le tableau une fois, l'enregistrer comme modèle et tout ...

 {

   if (AccountInfoInteger(ACCOUNT_LOGIN)  != 123456) {

      Alert("Если не работает: блаблабла");

      return(INIT_FAILED);

   }
 
Roman Agafonkin:

Savez-vous où insérer ce code ? Pour que vous puissiez le mettre une fois sur le tableau, l'enregistrer comme modèle et c'est tout...

Essayez de mettre while() avant, en attendant la connexion dans certaines limites. Je ne sais pas quelle fonctionAccountInfoInteger(ACCOUNT_LOGIN) donne si la connexion n'a pas encore été faite - imprimez-la et collez-la à la place des points d'interrogation.

while (AccountInfoInteger(ACCOUNT_LOGIN)==????) Sleep (100);
 
Igor Zakharov:

Essayez while() avant cela, en attendant que la connexion soit dans certaines limites. Je ne sais pas quelle fonctionAccountInfoInteger(ACCOUNT_LOGIN) donne si la connexion n'a pas encore eu lieu - imprimez-la et collez-la à la place des points d'interrogation.

Vous ne pouvez pas exécuter quelque chose de long dans OnInit - le terminal peut décharger le code.

dans l'indicateur ne doit pas glisser pour travailler

je ne comprends pas pourquoi le code source ne fonctionne pas - soit votre courtier n'a pas de bons serveurs, soit l'internet est trop lent - généralement ce code est partagé par vos "amis" sur tous les forums ;)))


Je pense que vous devez ajouter une variable de contrôle statique dans le corps de l'indicateur, quand un tick arrive, il se connectera au broker et à l'autorisation, la seule chose que je donnerais au premier tick lors du chargement du graphique - mais cela peut être géré, d'ailleurs prev_calculated ==0 est une très bonne raison de vérifier la "licence".

 
J'ai commencé à apprendre à ma fille comment faire du commerce. Elle avait cette question : "Je comprends si, disons, j'achète une livre, mais je ne comprends pas comment je peux vendre une livre si je ne l'ai pas achetée et si je ne l'ai pas. Pour être honnête, je n'ai pas pu lui expliquer clairement, j'ai dit quelque chose de vague, qu'il s'agissait d'une transaction virtuelle, non monétaire, et qu'il n'était pas nécessaire d'avoir ces livres en stock pour les vendre. En général, je n'ai pas aimé ma propre réponse. Quelle serait la bonne réponse à une telle question ?
 
khorosh:
J'ai commencé à apprendre le commerce à ma fille. Elle avait cette question : je comprends si, disons, pour acheter une livre, mais il n'est pas clair comment vous pouvez vendre une livre, si je ne l'ai pas acheté et je ne l'ai pas. Pour être honnête, je ne pouvais pas l'expliquer clairement à elle, j'ai dit quelque chose de vague, que c'était un non-cash, transaction virtuelle et ont ces livres en stock pour vendre, pas nécessairement. En général, je n'ai pas aimé ma propre réponse. Et quelle aurait été la bonne réponse à une telle question ?

Vous n'avez pas besoin de comprendre les choses pour faire des bénéfices. Moins vous en savez, plus vous jouezfacilement . Je pense que oui.

C'est cool qu'elle puisse commencer à le faire si tôt) Au cours du processus, elle trouvera les réponses aux questions (qu'elle se posera elle-même), s'il y en a...
 
onedollarusd:

Vous n'avez pas besoin de comprendre les choses pour faire des bénéfices. Moins vous en savez, plus vous jouez facilement . Je pense.

Si je lui dis que lorsque le prix a baissé d'une distance décente et s'est retourné, appuyez sur le bouton d'achat, et vice versa. Pensez-vous que cela sera suffisant ? )

 
Igor Makanu:

vous ne pouvez pas exécuter quelque chose de long dans OnInit - le terminal peut décharger le code

dans l'indicateur ne doit pas fonctionner

je ne sais pas pourquoi le code source ne fonctionne pas - soit votre courtier n'a pas de bons serveurs, soit l'internet est trop lent - généralement ce code est partagé par vos "amis" sur tous les forums ;)))


Je pense que je dois ajouter une variable de contrôle statique dans le corps de l'indicateur, quand un tick arrive, il se connectera au broker et à l'autorisation ; la seule chose que je vois est que le premier tick est chargé sur le graphique par lui-même - mais cela peut être géré, d'ailleurs prev_calculated ==0 est une bonne occasion de vérifier la "licence".

J'ai résolu le même problème en insérant le code suivant au début de la fonction OnCalculate:

 if(account_number>0)
 {
   int akk;
   akk=AccountInfoInteger(ACCOUNT_LOGIN);
   if(akk==0)return(0);
   if(akk!=account_number)
   {
     Alert("Неверный номер счёта.");
     int window=ChartWindowFind();
     ChartIndicatorDelete(0,window,MeName);
     return(0);
   }
 }              

account_number est défini avec #define (une variable de visibilité globale est aussi possible), MeName est le même, mais en général c'est le nom court de l'indicateur.

 
Yurij Kozhevnikov:

J'ai résolu le même problème en insérant ce code au début de la fonction OnCalculate:

account_number est défini avec #define (vous pouvez utiliser une variable de visibilité globale), MeName - de la même manière, mais en général c'est un nom d'indicateur court.

Oui, vous avez un bon exemple, c'est ce que j'écris.

mais vous devez traiter le premier démarrage de l'indicateur - le premier démarrage peut être ou non une connexion, et si la licence n'est pas passée, vous devez décharger l'indicateur immédiatement, comme un compteur et 2-3 fois pas de licence, puis décharger l'indicateur

Raison: