Bibliotheken: Expert - Seite 8

 
Stanislav Korotky:

Ich verstehe immer noch nicht, warum der konstante Name Expert.mqh.tpl "praktischer" (praktischer?) ist als Vorlagen, die nach dem Programm benannt sind, das sie hervorbringt? Nehmen wir an, es gibt ein Programm A.mq5 und B.mq5, die bibla verwenden. Wenn sie Vorlagen mit ihren eigenen Namen generieren würden, wäre es erstens praktischer, den letzten "Fingerabdruck" der Aktionen von _jedem_ Programm zu haben, anstatt eine durch die andere zu überschreiben. Zweitens könnte man anhand des Namens sofort erkennen, wer der Generator ist (besonders nützlich, wenn es sich um ausländische Programme handelt). Jetzt kann man das in der Datei Expert.mqh.tpl erst erkennen, wenn man hinein geht. Die universelle Lösung, die ich angegeben habe, besteht darin, den Namen des MQL-Programms+Zeitstempel+Zufall zu nehmen. Und ich sehe nicht die Notwendigkeit, die Datei auf sync=true zu belassen. Ich denke, dass alles schon vor langer Zeit getestet und debuggt wurde. Im Falle von Fehlern und der Notwendigkeit der Fehlersuche gibt es die Option sync=false. Dann sollte die Datei belassen werden. Ich denke, alles ist logisch. Und die Bearbeitungen sind einfach.

Ich stimme zu, dass die Kollision in der Praxis selten vorkommt, es sei denn, jemand verwendet die Biblio parallel in mehreren Programmen. Ich habe sie nicht, aber ich habe gerade einen kurzen Blick in den Code geworfen, und dabei ist mir die Datei Expert.mqh.tpl im Ordner Files ins Auge gefallen. Alles ist rein imho.

Ich wollte keine Dateien löschen, also dachte ich, dass ein gemeinsamer Name ausreicht, wenn man die Zuverlässigkeit der Arbeit in der Praxis berücksichtigt.

Ich wollte keinen Zoo von tpl-Dateien im Ordner "Files" sehen. Um etwas absichtlich zu löschen - ähnlich. Ich habe nur hier gelöscht.

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

Wie ist es möglich, einen Expert Advisor im .ex4-Format auszuführen, indem man ihn in einen Expert Advisor mit einem anderen Namen einbindet, und es ist notwendig, die Eingabeparameter anzuzeigen, d.h. vollständig mit ihm arbeiten zu können.

Wir haben einen kompilierten Expert Advisor mit dem Namen "Trade.ex4".

Erstellen Sie einen neuen Expert Advisor mit dem Namen "Hand.ex4".

Wie kann man sie kombinieren, so dass beim Start von "Hand.ex4" "Trade.ex4" vollständig funktioniert und "Trade.ex4" in "Hand.ex4" eingebettet wird?

Das heißt, wir haben nur die Datei "Hand.ex4" auf dem Rechner, aber wir verwenden "Trade.ex4" bei der Arbeit

Vielen Dank für Ihre Hilfe!

Haben Sie eine Lösung gefunden?

 
Vitaly Muzichenko:

Wie kann man es so kombinieren, dass beim Start von "Hand.ex4" "Trade.ex4" voll funktionsfähig ist und "Trade.ex4" in "Hand.ex4" eingebettet ist?

Das heißt, wir haben nur die Datei "Hand.ex4" auf dem Rechner, aber wir verwenden "Trade.ex4" bei der Arbeit

Es sollte mit Indikatoren funktionieren. Es scheint, dass Expert Advisors nicht in andere Expert Advisors eingebettet sind.

 
fxsaber:

Es sollte mit Indikatoren funktionieren. Es scheint, dass Expert Advisors nicht mit anderen Expert Advisors verbunden sind.

Ja, der Expert Advisor konnte nicht eingebettet werden, es wurde keine Lösung gefunden

 
Danke, Leute!
 
Vitaly Muzichenko:

Ja, die Beraterin konnte nicht eingenäht werden, keine Lösung gefunden

Es gibt höchstwahrscheinlich eine Lösung, und es sieht so aus, als hätte ich sie hier einmal in einer der Varianten verwendet. Aber ich habe völlig vergessen, wie ich es gemacht habe.

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

Es gibt wahrscheinlich eine Lösung, und ich glaube, ich habe sie hier einmal in einer der Varianten verwendet. Aber ich habe gedankenverloren vergessen, wie ich es gemacht habe.

Hier bin ich, als ich es versucht habe, habe ich keinen einzigen Weg gefunden. Es war für 4, ich habe es nicht für 5 ausprobiert.

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Besonderheiten der mql5 Sprache, Feinheiten und Techniken der Arbeit

fxsaber, 2020.05.21 09:13

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

// Entlädt sich selbst, wenn nach dem Kontowechsel kein Symbol vorhanden ist.
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(); // Das wird nicht helfen.
      // ChartClose(); // Nicht die beste Lösung.
    }
// sonst
      // Für benutzerdefinierte und andere Fälle, ergänzen Sie den Code mit der folgenden Lösung.
      // https://www.mql5.com/ru/forum/170952/page175#comment_16365819 
  }  
}
 
fxsaber:
Coole Bibliothek! Ich hätte nicht daran gedacht, den Expert Advisor auf diese Weise zu implementieren. Könnten Sie mir sagen, wie man ein aktives Diagramm mit mql definiert, ohne dll zu verwenden. Ich habe einige Arbeit auf winapi getan, aber es stellte sich heraus, zu mühsam sein:
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;
  }

Vielleicht wissen Sie, wie man diesen Fall auf mql oder zumindest mit dll, aber einfacher zu implementieren?

 
vek_y4icb:
wie man ein aktives Diagramm mit mql tools ohne dll definiert.

Ich erinnere mich nicht mehr genau. Ich glaube, dieses Problem wurde gelöst. Vielleicht hilft eine Suche weiter.