Een van de voordelen van de MQL5 programmeertaal is de mogelijkheid om multivaluta-indicatoren en Expert Advisors (EA's) te gebruiken. Kijk eens naar de Multicurrency OnTickMarketWatch tick event handler in de MQL5 CodeBase.
De toepassing van het concept dat in het script wordt voorgesteld, is niet altijd handig. Bij veel evenementen kan er bijvoorbeeld een overflow van de evenementenqueue optreden.
Hier is een opmerking uit de MQL5 Referentie:
De clientterminal voegt nieuwe gebeurtenissen toe aan de evenementenqueue. Deze gebeurtenissen worden een voor een verwerkt in de volgorde waarin ze zijn ontvangen. Er is een uitzondering voor het NewTick-evenement. Als de queue al zo'n evenement bevat of als dit evenement momenteel wordt verwerkt, wordt het nieuwe NewTick-evenement niet in de queue geplaatst.
De queue van evenementen is beperkt in grootte. Bij overflow worden oude gebeurtenissen verwijderd zonder te worden verwerkt, om ruimte te maken voor nieuwe gebeurtenissen. Daarom is het aan te raden om efficiënte gebeurtenishandlers te schrijven en oneindige lussen te vermijden (behalve in scripts die alleen het Start-evenement verwerken).
Daarnaast is het soms nodig om de waarden van de indicator alleen opnieuw te berekenen wanneer er een nieuwe bar verschijnt. Een ander geval is wanneer je de trading 'on the fly' op een bepaald symbool in een multivaluta EA wilt uitschakelen, de tijdsperiode van een symbool wilt wijzigen of iets anders.
Het "iets anders" kan externe data zijn. Het MCM (MultiCurrency Mode) Controlepaneel is gebaseerd op dit idee.
Overigens kan het ook worden gebruikt voor trading met een enkele valuta.
De functies van het "MCM Controlepaneel" (wedstrijdversie):
Het heeft een minimaal aantal functies die nodig zijn om de multivaluta-modus in EA's en indicatoren te gebruiken:
- Voeg symbolen toe/verwijder voor trading en analyse.
- Het stelt je in staat om de "nieuwe tick" en "nieuwe bar" gebeurtenissen voor elk symbool en periode te volgen.
- Alle instellingen kunnen "on the fly" worden gewijzigd zonder de EA of indicator opnieuw op te starten.
- Het paneel kan worden gebruikt met onze EA's en indicatoren.
- Het kan ook in je code worden opgenomen, het wordt samen met hen geladen.
- Het is transparant. Je hoeft de code van het MCM Controlepaneel niet toe te voegen aan je EA's of indicatoren.
Met het "MCM Controlepaneel" kun je je eigen functies toevoegen. Zie hieronder voor details.
Het opslaan/herstellen van de instellingen van het Controlepaneel wordt in deze versie niet ondersteund.
Je kunt het "MCM Controlepaneel" op verschillende manieren starten:
- Bevestig de "iControl panel MCM" aan de grafiek.
- Start het "scControl panel MCM" script. Het script laadt de "iControl panel MCM" indicator.
- Laad het paneel vanuit je EA of indicator. Zie "exControl panel MCM" voor details.
In het derde geval wordt het paneel samen met onze EA of indicator geladen en aan de grafiek bevestigd.
Je EA moet een OnChartEvent() gebeurtenishandler hebben om de gebeurtenissen van het MCM Controlepaneel te verwerken.
Interface
De gebruikersinterface is eenvoudig en is geïmplementeerd als een menu. De grootte en kleuren van het menu kunnen worden geconfigureerd met invoerparameters.
Het ziet er als volgt uit:

Ontwerp
Het paneel wordt gebruikt om de gebeurtenissen voor de multivaluta EA's en indicatoren te configureren.
De grootte en positie van het paneel zijn afhankelijk van de grootte van de grafiek en de lettergrootte (gedefinieerd in invoerparameters). Om werkruimte vrij te maken, kan het paneel worden geminimaliseerd.

De grootte van het paneel kan worden gewijzigd door de lettergrootte in de invoerparameters te wijzigen (lettergrootte=10 standaard):

Je kunt elke kleur instellen die je wilt.
Bijvoorbeeld, het roze schema:

Het EMO schema:

Gebruiksvriendelijk
Het menu is intuïtief en gemakkelijk te gebruiken.
De knop "MCM Controlepaneel" bevat extra functies (niet inbegrepen in deze versie):

Met de knop "Grafiek" kun je eenvoudig het huidige symbool en de tijdsperiode wijzigen, kies gewoon:

De "Evenementen" knop stelt je in staat om evenementen "on the fly" in te schakelen/uit te schakelen (zonder de EA of indicator opnieuw op te starten) voor een bepaald symbool en het benodigde evenement op te geven. Deze evenementen kunnen worden verwerkt in de OnChartEvent() functie van de EA of indicator. Het symbolenmenu bevat alleen symbolen die zijn geselecteerd uit "Market Watch". Je kunt verschillende evenementen combineren, ze worden allemaal verwerkt.
Bijvoorbeeld, je hoeft je geen zorgen te maken over het verschijnen van een nieuwe tick/bar voor symbolen op tijdframes, de Panel-engine zal de evenementen verzenden:

Hier is de "Help":

Kennis en implementatie
Mijn oplossing is gepubliceerd in Multicurrency OnTickMarketWatch tick event handler, maar dit paneel heeft enkele extra functies:
- Het "MCM Controlepaneel" biedt de interface die niet direct in de clientterminal is geïmplementeerd. Het stelt je in staat de multivaluta-modus te gebruiken via de OnChartEvent() gebeurtenishandler. Een andere functie is de mogelijkheid om de instellingen "on the fly" te wijzigen.
- Om de evenementen voor de OnChartEvent() gebeurtenishandler te genereren, gebruikt het MCM Controlepaneel zijn eigen "agenten" (indicatoren die door het MCM Controlepaneel op een symbool worden uitgevoerd), waardoor de gebeurtenis voor multivaluta trading wordt geleverd.
- Het paneel kan worden opgenomen in EA's of indicatoren.
- Het MCM Controlepaneel biedt nieuwe mogelijkheden voor MQL5 ontwikkelaars.
- IMHO is het paneel een voorbeeld van een nieuwe structuur van EA's en indicatoren. Ik zal later een paar voorbeelden geven.
Informatie over evenementen en waarschuwingen
Het paneel heeft een statusbalk om evenementen weer te geven.
Installatie van het MCM Controlepaneel
Pak het archiefbestand mcm_control_panel.zip uit in de map van de clientterminal. Daarna verschijnen de volgende bestanden:
- /mql5/experts/exControl panel MCM.mq5 - voorbeeld van Expert Advisor;
- /mql5/scripts/scControl panel MCM.mq5 - voorbeeld van Script;
- /mql5/indicators/iControl panel MCM.mq5 - indicator, de belangrijkste "MCM Controlepaneel" engine;
- /mql5/indicators/Spy Control panel MCM.mq5 - indicator, "MCM Controlepaneel" agent
- /mql5/include/Control panel MCM.mqh - een set van "MCM Controlepaneel" klassen en functies.
Vervolgens compileer je de indicatoren, script en Expert Advisor.
Starten van het MCM Controlepaneel
Om het MCM Controlepaneel te starten, bevestig de iControl panel MCM.mq5 indicator aan een willekeurige grafiek.
Het paneel kan worden gestart vanuit de Expert Advisor, bevestig eenvoudig de "exControl panel MCM" Expert Advisor aan de grafiek:

Als voorbeeld van multivaluta heb ik de MultiTrend Expert Advisor geschreven. De indicator plot de USD-trend, gebaseerd op de analyse van 4 valutaparen:
Hier is de code:
//+------------------------------------------------------------------+ //| MultiTrend.mq5 | //| Copyright 2010, Lizar | //| https://www.mql5.com/ru/users/Lizar | //+------------------------------------------------------------------+ #define VERSION "1.00 Build 2 (09 Dec 2010)" #property copyright "Copyright 2010, Lizar" #property link "https://www.mql5.com/ru/users/Lizar" #property version VERSION #property description "Deze Expert Advisor gebruikt het MCM Controlepaneel" input color bg_color=Gray; // Menu kleur input color font_color=Gainsboro; // Tekstkleur input color select_color=Yellow; // Geselecteerde tekstkleur input int font_size=10; // Lettergrootte #include <Control panel MCM.mqh> //<--- Include bestand //+------------------------------------------------------------------+ //| Expert initialisatie functie | //+------------------------------------------------------------------+ int OnInit() { //--- Initialisatie MCM Controlepaneel. //--- Het is niet nodig om kleuren in te stellen, als ze niet zijn opgegeven, worden de standaardkleuren gebruikt. InitControlPanelMCM(bg_color,font_color,select_color,font_size); //--- return(0); } //+------------------------------------------------------------------+ //| Expert deinitialisatie functie | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { DeinitControlPanelMCM(); //<--- Deinitialisatie MCM Controlepaneel } //+------------------------------------------------------------------+ //| OnChartEvent gebeurtenishandler. | //| Zie MQL5 Referentie voor details. | //| Kan worden gebruikt met MCM Controlepaneel voor multivaluta trading | //+------------------------------------------------------------------+ void OnChartEvent(const int id, // gebeurtenis identificatie: // als id-CHARTEVENT_CUSTOM==0 - initialisatie gebeurtenis (wanneer prev_calculated==0) const long& lparam, // tijdsperiode const double& dparam, // prijs const string& sparam // symbool ) { if(id>=CHARTEVENT_CUSTOM) { Print(TimeToString(TimeCurrent(),TIME_SECONDS)," -> id=", id-CHARTEVENT_CUSTOM, ": ",sparam," ",EventDescription(lparam)," prijs=",dparam); } } //+------------------------------------------------------------------+
De parameters van OnChartEvent().
Het Controlepaneel genereert aangepaste evenementen. Deze evenementen kunnen worden verwerkt in de Expert Advisor of Indicator met behulp van de OnChartEvent() gebeurtenishandler.
De invoerparameters:
- id - gebeurtenis id:
als id-CHARTEVENT_CUSTOM !=0 - het is gelijk aan het symboolindex in het "Market Watch" venster; - lparam - gebeurtenis vlag. Zie de ENUM_CHART_EVENT_SYMBOL enumeratie in Control panel MCM.mqh.
- dparam - tickprijs of openingsprijs van de nieuwe bar op een bepaalde tijdsperiode.
- sparam - symboolnaam
Lijst van evenementen die worden ondersteund in het MCM Controlepaneel
Met de lparam parameter kan het Controlepaneel tot 64 verschillende aangepaste evenementen op symbool verzenden. In deze versie worden de volgende evenementen ondersteund :
- "Initialisatie" evenement (Initialisatie);
- "Nieuwe tick" evenement (tick);
- "Nieuwe bar" evenement op M1 grafiek (M1);
- "Nieuwe bar" evenement op M2 grafiek (M2);
- "Nieuwe bar" evenement op M3 grafiek (M3);
- "Nieuwe bar" evenement op M4 grafiek (M4);
- "Nieuwe bar" evenement op M5 grafiek (M5);
- "Nieuwe bar" evenement op M6 grafiek (M6);
- "Nieuwe bar" evenement op M10 grafiek (M10);
- "Nieuwe bar" evenement op M12 grafiek (M12);
- "Nieuwe bar" evenement op M15 grafiek (M15);
- "Nieuwe bar" evenement op M20 grafiek (M20);
- "Nieuwe bar" evenement op M30 grafiek (M30);
- "Nieuwe bar" evenement op H1 grafiek (H1);
- "Nieuwe bar" evenement op H2 grafiek (H2);
- "Nieuwe bar" evenement op H3 grafiek (H3);
- "Nieuwe bar" evenement op H4 grafiek (H4);
- "Nieuwe bar" evenement op H6 grafiek (H6);
- "Nieuwe bar" evenement op H8 grafiek (H8);
- "Nieuwe bar" evenement op H12 grafiek (H12);
- "Nieuwe bar" evenement op dagelijkse grafiek (D1);
- "Nieuwe bar" evenement op wekelijkse grafiek (W1);
- "Nieuwe bar" evenement op maandgrafiek (MN1);
De gebeurtenisbeschrijving, geretourneerd door EventDescription() wordt tussen haakjes gepresenteerd (Initialisatie, tick, Mxx enzovoorts). De functie EventDescription is te vinden in Control panel MCM.mqh (volgens de ENUM_CHART_EVENT_SYMBOL enumeratie).
Het "Initialisatie" evenement wordt gegenereerd wanneer prev_calculated=0, het kan worden gebruikt om de gegevens voor te bereiden, bijvoorbeeld om de waarden van de indicator te herberekenen.
Evenementen instellen
Om de benodigde evenementen in te stellen, klik je op de knop "Evenementen", selecteer het symbool en het evenementtype. De geselecteerde evenementen worden in het geel (of de geselecteerde kleur in invoerparameters van de indicator) weergegeven. Je kunt een of meerdere evenementen kiezen, ze worden allemaal verwerkt door onze multivaluta Expert Advisor. Om wijzigingen toe te passen, klik je op de knop "Evenementen in-/uitschakelen".
Hetzelfde proces kan worden uitgevoerd voor alle benodigde symbolen.

Hier is een logboek van het tabblad "Experts":

Gerelateerde berichten
- MQL5 Wizard: Creëer Handelsstrategieën met Bullish en Bearish Engulfing Candlestick Patronen en Stochastic
- MQL5 Wizard: Handelsignalen Geïnspireerd Door Morning/Evening Stars + MFI voor MetaTrader 5
- MQL5 Wizard: Handelsignalen Geïnspireerd door Morning/Evening Stars en RSI voor MetaTrader 5
- Efficiënt Trendvolgend Handelsysteem met Exp_X2MA_JFatl voor MetaTrader 5
- Close Cross MA: Efficiënt Orders Sluiten met MetaTrader 4