Bibliothèque: Expert - page 8

 
Stanislav Korotky:

Je ne comprends toujours pas pourquoi le nom constant Expert.mqh.tpl est plus "pratique" (pratique ?) que les modèles nommés d'après le programme qui les engendre ? Disons qu'il y a un programme A.mq5 et un programme B.mq5 qui utilisent bibla. S'ils généraient des modèles portant leur propre nom, il serait plus pratique, premièrement, d'avoir la dernière "empreinte" des actions de _chaque_ programme, au lieu d'écraser l'un par l'autre. Deuxièmement, vous pourriez immédiatement voir qui est le générateur par son nom (particulièrement utile si les programmes sont étrangers). Aujourd'hui, il est impossible de le savoir à partir du fichier Expert.mqh.tpl tant que l'on n'y est pas entré. La solution universelle que j'ai donnée est de prendre le nom du programme MQL + horodatage + aléatoire. Et je ne vois pas la nécessité de laisser le fichier à sync=true. Je pense que tout a été testé et débogué depuis longtemps. En cas d'erreurs et de besoin de débogage, il y a une option sync=false. Dans ce cas, le fichier doit être laissé. Je pense que tout est logique. Et les modifications sont simples.

Je suis d'accord que dans la pratique la collision peut se produire rarement, à moins que quelqu'un n'utilise la biblio en parallèle dans plusieurs programmes. Je ne l'ai pas, mais je viens de jeter un coup d'œil rapide au code, et mon regard a été attiré par Expert.mqh.tpl dans le dossier Files. Tout cela n'est que pure imho.

Je ne voulais pas supprimer de fichiers, donc j'ai pensé qu'un nom commun était suffisant, en tenant compte de la fiabilité du travail dans la pratique.

Je ne voulais pas voir un zoo de fichiers tpl dans le dossier Files. Supprimer quelque chose volontairement - de la même manière. Je n'ai supprimé qu'ici.

Возможность вызова DLL в Маркет-продуктах.
Возможность вызова DLL в Маркет-продуктах.
  • 2019.07.20
  • www.mql5.com
Возможно написание EX5 с вызовом DLL, который пройдет все проверки Маркета и будет там опубликован.В прицепе такой EX5-скрипт. Он запускает указанные приложения/документы.В прицепе еще один вариант
 
Vitaly Muzichenko:

Comment est-il possible d'exécuter un Expert Advisor au format .ex4 en le connectant à un Expert Advisor portant un nom différent, et il est nécessaire d'afficher les paramètres d'entrée, c'est-à-dire de pouvoir travailler pleinement avec lui.

Nous avons un Expert Advisor compilé avec le nom "Trade.ex4".

Créer un nouveau conseiller expert avec le nom "Hand.ex4".

Comment les combiner de sorte que lorsque "Hand.ex4" est lancé, "Trade.ex4" fonctionne pleinement et que "Trade.ex4" soit intégré dans "Hand.ex4".

En d'autres termes, nous n'avons que le fichier Hand.ex4 sur la machine, mais nous utilisons Trade.ex4 dans le cadre de notre travail.

Nous vous remercions de votre attention.

Avez-vous trouvé une solution ?

 
Vitaly Muzichenko:

Comment le combiner de manière à ce que lorsque "Hand.ex4" est lancé, "Trade.ex4" soit entièrement fonctionnel et que "Trade.ex4" soit intégré dans "Hand.ex4" ?

En d'autres termes, nous n'avons que le fichier Hand.ex4 sur la machine, mais nous utilisons Trade.ex4 dans le cadre de notre travail.

Cela devrait fonctionner avec les indicateurs. Il semble que les Expert Advisors ne soient pas cousus dans d'autres Expert Advisors.

 
fxsaber:

Il devrait fonctionner avec les indicateurs. Il semble que les Expert Advisors ne soient pas reliés à d'autres Expert Advisors.

Oui, le conseiller expert n'a pas pu être intégré, aucune solution n'a été trouvée.

 
Merci les gars !
 
Vitaly Muzichenko:

Oui, le conseiller n'a pas pu être cousu, aucune solution n'a été trouvée.

Il existe très probablement une solution, et il semble que je l'ai utilisée ici une fois dans l'une des variantes. Mais j'ai complètement oublié comment je l'ai fait.

Возможность вызова DLL в Маркет-продуктах.
Возможность вызова DLL в Маркет-продуктах.
  • 2019.07.20
  • www.mql5.com
Возможно написание EX5 с вызовом DLL, который пройдет все проверки Маркета и будет там опубликован.В прицепе такой EX5-скрипт. Он запускает указанные приложения/документы.В прицепе еще один вариант
 
fxsaber:

Il y a probablement une solution, et il me semble que je l'ai utilisée ici une fois dans l'une des variantes. Mais j'ai oublié par inadvertance comment je l'ai fait.

Voilà, quand j'ai essayé, je n'ai pas trouvé la moindre solution. C'était pour le 4, je n'ai pas essayé pour le 5.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Particularités du langage mql5, subtilités et techniques de travail

fxsaber, 2020.05.21 09:13

#include <fxsaber\Expert.mqh> // https://www.mql5.com/fr/code/19003

// Se décharge s'il n'y a pas de symbole après le changement de compte.
void OnDeinit( const int Reason )
{
  if (Reason == REASON_ACCOUNT)
  {
    MqlTick Tick;
    
    if (!SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM) && !SymbolInfoTick(_Symbol, Tick))
    {
      Alert("Account is changed!");
      
      if (EXPERT::Remove())
        Alert("Expert is removed!");
      
      // ExpertRemove() ; // Cela ne servira à rien.
      // ChartClose() ; // Ce n'est pas la meilleure solution.
    }
// else
      // Pour les cas personnalisés et autres, complétez le code avec la solution suivante.
      // https://www.mql5.com/ru/forum/170952/page175#comment_16365819 
  }  
}
 
fxsaber:
Je n'aurais jamais pensé à implémenter l'ouverture d'un EA de cette manière. Pourriez-vous me dire comment définir un graphique actif en utilisant mql sans utiliser de dll. J'ai déjà travaillé sur winapi, mais cela s'est avéré trop lourd :
long                          Agent::ChartGetActiveID()
  {
   static long                terminal_wnd = ChartGetInteger(0,CHART_IS_DOCKED) ?
                              GetAncestor(ChartGetInteger(0, CHART_WINDOW_HANDLE), 2) :
                              GetParent(GetAncestor(ChartGetInteger(0, CHART_WINDOW_HANDLE), 2));

   static uint                process_id = 0;
   static uint                thread_id = GetWindowThreadProcessId(terminal_wnd, process_id);
   static long                mdi_wnd = GetDlgItem(terminal_wnd, 0xE900);
   static GUITHREADINFO       thread_info;


   thread_info.cbSize = sizeof(GUITHREADINFO);
   if(!GetGUIThreadInfo(thread_id, thread_info))
      return -1;

   long wnd_on_focus = 0, chart_id = -1;
   if(GetDlgItem(thread_info.hwndActive, 0xE900)== mdi_wnd)
      wnd_on_focus = GetWindow(SendMessageW(mdi_wnd, 0x0229, 0, 0), 5);
   else
      wnd_on_focus = GetWindow(thread_info.hwndActive, 5);

   for(long ch_id = ChartFirst(); ch_id != -1; ch_id = ChartNext(ch_id))
      if(ChartGetInteger(ch_id, CHART_WINDOW_HANDLE)==wnd_on_focus)
        {
         chart_id = ch_id;
         break;
        }
   return chart_id;
  }

Peut-être savez-vous comment mettre en œuvre ce cas sur mql ou au moins avec dll, mais plus simple ?

 
vek_y4icb:
Comment définir un graphique actif avec les outils mql sans utiliser de dll.

Je ne me souviens pas exactement. Je pense que ce problème a été résolu. Peut-être qu'une recherche vous aidera.