Librerie: Esperto - pagina 8

 
Stanislav Korotky:

Non ho ancora capito, perché il nome costante Expert.mqh.tpl è più "pratico" (pratico?) rispetto ai template che prendono il nome dal programma che li genera? Supponiamo che ci sia un programma A.mq5 e un programma B.mq5 che usano bibla. Se generassero modelli con i loro nomi sarebbe più pratico, in primo luogo, avere l'ultima "impronta digitale" delle azioni di _ogni_ programma, invece di sovrascriverne una dall'altra. In secondo luogo, si potrebbe vedere immediatamente chi è il generatore in base al nome (utile soprattutto se i programmi sono stranieri). Ora non è possibile capirlo dal file Expert.mqh.tpl finché non ci si entra dentro. La soluzione universale che ho dato è quella di prendere il nome del programma MQL+timestamp+random. E non vedo la necessità di lasciare il file a sync=true. Penso che tutto sia stato testato e debuggato molto tempo fa. In caso di errori e di necessità di debug, esiste un'opzione sync=false. In questo caso il file dovrebbe essere lasciato. Penso che tutto sia logico. E le modifiche sono semplici.

Sono d'accordo che in pratica la collisione può verificarsi raramente, a meno che qualcuno non usi la biblio in parallelo in diversi programmi. Non ce l'ho, ma ho dato una rapida occhiata al codice e il mio occhio è stato catturato da Expert.mqh.tpl nella cartella Files. Tutto è puramente imho.

Non volevo cancellare i file, quindi ho pensato che un nome comune fosse sufficiente, tenendo conto dell'affidabilità del lavoro nella pratica.

Non volevo vedere uno zoo di file tpl nella cartella Files. Cancellare qualcosa di proposito - allo stesso modo. Ho cancellato solo qui.

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

Come è possibile eseguire un Expert Advisor in formato .ex4 collegandolo a un Expert Advisor con un nome diverso, ed è necessario visualizzare i parametri di input, cioè essere in grado di lavorare completamente con esso.

Abbiamo un Expert Advisor compilato con il nome "Trade.ex4".

Creare un nuovo Expert Advisor con il nome "Hand.ex4".

Come combinarli in modo che quando viene lanciato "Hand.ex4", "Trade.ex4" funzioni completamente e "Trade.ex4" sia incorporato in "Hand.ex4".

Cioè, abbiamo solo il file Hand.ex4 sulla macchina, ma utilizziamo Trade.ex4 nel lavoro.

Grazie!

Hai trovato una soluzione?

 
Vitaly Muzichenko:

Come combinarlo in modo che quando viene lanciato "Hand.ex4", "Trade.ex4" sia completamente funzionante e "Trade.ex4" sia incorporato in "Hand.ex4".

Cioè, abbiamo solo il file Hand.ex4 sulla macchina, ma usiamo Trade.ex4 nel lavoro.

Dovrebbe funzionare con gli indicatori. Sembra che gli Expert Advisor non vengano inseriti in altri Expert Advisor.

 
fxsaber:

Dovrebbe funzionare con gli indicatori. Sembra che gli Expert Advisor non siano collegati ad altri Expert Advisor.

Sì, non è stato possibile incorporare l'Expert Advisor, ma non è stata trovata alcuna soluzione.

 
Grazie ragazzi!
 
Vitaly Muzichenko:

Sì, non è stato possibile cucire il consulente, non è stata trovata una soluzione.

Molto probabilmente esiste una soluzione e sembra che io l'abbia usata una volta in una delle varianti. Ma ho completamente dimenticato come l'ho fatto.

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

Probabilmente c'è una soluzione, e mi sembra di averla usata qui una volta in una delle varianti. Ma ho distrattamente dimenticato come l'ho fatto.

Ecco, quando l'ho provato, non ho trovato un solo modo. Era per la 4, non l'ho provato per la 5.

 

Forum sul trading, sui sistemi di trading automatico e sulla verifica delle strategie di trading

Peculiarità del linguaggio mql5, sottigliezze e tecniche di lavoro

fxsaber, 2020.05.21 09:13

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

// Si scarica se non c'è alcun simbolo dopo la modifica del conto.
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(); // Non servirà a nulla.
      // ChartClose(); // Non è la soluzione migliore.
    }
// altrimenti
      // Per i casi personalizzati e di altro tipo, integrare il codice con la seguente soluzione.
      // https://www.mql5.com/ru/forum/170952/page175#comment_16365819 
  }  
}
 
fxsaber:
Bella libreria! Non avrei mai pensato di implementare l'apertura di un EA in questo modo. Potresti dirmi come definire un grafico attivo usando mql senza usare la dll. Ho fatto un po' di lavoro su winapi, ma si è rivelato troppo macchinoso:
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;
  }

Forse sai come implementare questo caso su mql o almeno con la dll, ma in modo più semplice?

 
vek_y4icb:
come definire un grafico attivo con gli strumenti mql senza usare la dll.

Non ricordo esattamente. Credo che questo problema sia stato risolto. Forse una ricerca può aiutare.