Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 186

 
HistorySelect.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

MT5 e la velocità in azione

fxsaber, 2020.09.02 00:32

Se qualcuno cerca di usare librerie condivise in cui il parametro from-input non corrisponde, otterrete dei rallentamenti.


L'altro HistorySelect.

Forum sul trading, sistemi di trading automatico e test di strategia

MT5 e la velocità in azione

fxsaber, 2020.09.02 00:52

HistoryDealSelect e HistoryOrderSelect devono necessariamente essere scritti così.

  static bool HistorySelectOrder( const ulong Ticket )
  {
    return((::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) || ::HistoryOrderSelect(Ticket));
  }

  static bool HistorySelectDeal( const ulong &Ticket )
  {
    return((::HistoryDealGetInteger(Ticket, DEAL_TICKET) == Ticket) || ::HistoryDealSelect(Ticket));
  }

Altrimenti, è garantito che incontrerete dei rallentamenti.

Forum sul trading, sistemi di trading automatico e test di strategie di trading

MT5 e la velocità in azione

Renat Fatkhullin, 2020.09.02 00:40

Quando lavorate con volumi enormi (e avete mostrato migliaia e decine di migliaia di affari nella storia per una ragione), che richiedono un accesso atomico/snapshot, dovete capire il loro costo.

 
Se l'EA ha MessageBox in OnInit, ci sono diverse cose da fare per aggirare il potenziale problema del re-logging.
 
È consigliabile minimizzare il numero di chiamate alle funzioni interne per ridurre la probabilità di incontrare i loro non infrequenti ritardi.
 

Non può vincere

2020.04.01 11:49:34 fallita vendita istantanea 0,32 EURUSD a 1,09539 [volume non valido].

Ho un controllo sul limite del volume totale nel mercato.

Non so perché ho ricevuto un tale errore

Nel validatore del mercato
 
Vladimir Pastushak:

Non può vincere

2020.04.01 11:49:34 fallita vendita istantanea 0,32 EURUSD a 1,09539 [volume non valido].

Ho un controllo sul limite del volume totale nel mercato.

Non capisco perché ho ricevuto un tale errore.

Nel validatore del mercato

Non è riuscito a raggiungere il limite dell'ordine? Penso che sia stato così.

 
Edgar Akhmadeev:

Potrebbe aver incontrato un limite nei mandati? Credo di averlo fatto.

Dice che il volume è sbagliato, viene controllata la disponibilità di fondi, viene controllato anche il superamento del limite del lotto. Continua a scavare...

 
Vladimir Pastushak:

Non c'è scritto il volume giusto.

Edgar Akhmadeev:

Mi sembra di averla avuta.

...che un piccolo volume non si è aperto con un grande deposito. Non ricordo i dettagli, ma uno dei broker sul cent aveva un limite d'ordine molto piccolo sullo strumento.

 

C'è il seguente problema in MT5. Ho bisogno di testare il funzionamento del pannello di trading nello strategy tester in modalità visiva. Il pannello di trading ha dei campi di input (OBJ_EDIT). Quando cambiate il testo nel campo di inserimento e premete ENTER, il nuovo testo non appare, invece, appare il testo originale che è stato impostato quando il campo di inserimento è stato creato. Cioè, non è possibile cambiare il testo nel campo di input durante il test visivo del pannello.

Come si può risolvere questo problema?

Codice di esempio:

void OnTick()
  {
   string name="EDIT";
   if(ObjectFind(0,name)==-1)
     {
      ObjectCreate(0,name,OBJ_EDIT,0,0,0);
      ObjectSetString(0,name,OBJPROP_TEXT,"EURUSD");
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_XSIZE,50);
      ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
      ObjectSetInteger(0,name,OBJPROP_READONLY,false);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clrBlack);
      ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrWhite);
     }
  }
 

Ho creato questo script auto-hotkey per nascondere le barre dei titoli durante la codifica. Funziona per tutte le finestre su Windows. Non sono sicuro delle altre piattaforme.



; 
Hide borders, title bar 









#IfWinNotActive ahk_class Progman 









#IfWinNotActive ahk_class Shell_TrayWnd 









^] :: 









WinGet Style, Style, A 









if (Style & 0xC40000) { 









WinSet, Style, -0xC40000, A 









WinMaximize, A 













} 









else { 









WinSet, Style, + 0xC40000, A 









WinRestore, A 









} 









return 

Il risultato è uno schermo del desktop perfettamente riempito.

Basta salvare il file come nome_file.ahk. Salvatelo nella vostra directory preferita, poi scaricate e installate https://www.autohotkey.com.

Creare un collegamento dello script e tagliarlo. Premere win + r

Digita shell: startup e incolla il collegamento nella finestra pop.

In questo modo, lo script partirà con windows dopo il riavvio. Per lanciare lo script ora, fate doppio clic su di esso, poi potete nascondere le barre del titolo della finestra con ctrl +]

Assicurati che la finestra non sia massimizzata mentre usi la scorciatoia. Non ha senso massimizzare una finestra massimizzata, e non ho gestito questo caso.

Godetevi

modifica:

Il formattatore di codice si comporta in modo strano. Continua a espandere il codice con un'enorme interlinea. Lol!

AutoHotkey
  • www.autohotkey.com
AutoHotkey provides a simple, flexible syntax allowing you to focus more on the task at hand rather than every single little technicality. It supports not only the popular imperative-procedural paradigm, but also...
File:
 

Forum sul trading, sistemi di trading automatico e test di strategia

Biblioteche: Benchmark

fxsaber, 2020.10.01 23:49

// Возвращает true в некоторых ситуациях, когда чарт не виден.
bool IsInvisible( long chartID = 0 )
{
  bool Res = ::ChartGetInteger(chartID, CHART_IS_MINIMIZED);
  
  if (!Res && !::ChartGetInteger(chartID, CHART_IS_MAXIMIZED) && ::ChartGetInteger(chartID, CHART_IS_DOCKED))
  {
    if (!chartID)
      chartID = ::ChartID();

    for (long Chart = ::ChartFirst(); (Chart != -1) && !Res; Chart = ::ChartNext(Chart))
      Res = (Chart != chartID) && ::ChartGetInteger(Chart, CHART_IS_MAXIMIZED);
  }
  
  return(Res);
}

I pannelli di trading e altre informazioni sui grafici non si aggiornano se ritorna true.

Motivazione: