TradingBoxing: Innovatieve EA voor MetaTrader 5

Mike 2018.06.18 22:58 16 0 0
Bijlage

Bij de ontwikkeling van deze Expert Advisor hebben we inspiratie gehaald uit TradingBoxing. De onderstaande code is echter volledig gebaseerd op deze inspiratie, met een implementatie in MQL5 en nieuwe handelsklassen.

Het handelspaneel heeft slechts één invoerparameter: magic number - de unieke identificatie voor de EA.

Hieronder zie je het uiterlijk van het handelspaneel:

TradingBoxing

Om de volumes (voor posities en openstaande orders) weer te geven, hebben we de standaard klasse CSpinEdit licht aangepast en opgeslagen als CSpinEditDouble. Helaas is het ons niet gelukt om dit via overerving te creëren, aangezien we de klasseleden moesten wijzigen die als "private" waren gedeclareerd.

Zoals je aan de naam van de klasse kunt zien, is deze gemaakt om gegevens van het type double weer te geven. We hebben daarom de methode DisplayedDigits toegevoegd, die de nauwkeurigheid van de tekstweergave in de controle bepaalt.

Het tekstveld in deze controle is ook bewerkbaar gemaakt. Dit kan handig zijn wanneer je een prijs of volume moet invoeren die sterk verschilt van de waarde in het tekstveld. Om de tekst uit het tekstveld als waarde op te slaan, is de methode EndEdit toegevoegd aan de klasse CSpinEditDouble:

   int               m_digits;              // weergegeven cijfers
   //---
   void              EndEdit() { Value(StringToDouble(Text())); }

public:
                     CSpinEditDouble(void);

Deze methode onthoudt de ingevoerde tekst als waarde.


De methode EndEdit wordt aangeroepen vanuit de OnEvent klasse CSpinEditDouble:

//+------------------------------------------------------------------+
//| Algemene handler van grafiek gebeurtenissen                                   |
//+------------------------------------------------------------------+
EVENT_MAP_BEGIN(CSpinEditDouble)
  ON_EVENT(ON_CLICK,m_inc,OnClickInc)
  ON_EVENT(ON_CLICK,m_dec,OnClickDec)
  ON_EVENT(ON_END_EDIT,m_edit,EndEdit)
EVENT_MAP_END(CWndContainer)

Om ervoor te zorgen dat handelsorders zo snel mogelijk worden verwerkt (zelfs op een zeer rustige markt waar ticks met grote tussenpozen binnenkomen), wordt elke klik op de knop van het handelspaneel geforceerd om de interne handler CTradingBoxingDialog::OnTick() aan te roepen.

Lijst
Reactie 0