MQL कनेक्टर लाइब्रेरी

इस अध्याय में हम MQL कोड (या तो संकेतक या विशेषज्ञ सलाहकार) से सीधे संकेत भेजने के लिए MT2Trading पुस्तकालय का उपयोग करना सीखेंगे।

आवश्यकताएँ:

MT2Trading लाइब्रेरी का उपयोग करने के लिए सुनिश्चित करें कि लाइब्रेरी (MT4 / 5 के लिए mt2trading_library) को आपके मेटाट्रेडर टर्मिनल के लाइब्रेरी फ़ोल्डर (MQL4 / लाइब्रेरीज़ या MQL5 / लाइब्रेरीज़) में कॉपी किया गया है।

अपने संकेतक या ई.ए के साथ अपने कोड के शीर्ष पर कार्यों को घोषित करें आयात

अनुभाग निर्धारित करता है
enum broker {
     All = 0,
     IQOption = 1,
     Binary = 2,
     Spectre = 3,
     Alpari = 4
};
enum martingale {
     NoMartingale = 0,
     OnNextExpiry = 1,
     OnNextSignal = 2,
     Anti_OnNextExpiry = 3,
     Anti_OnNextSignal = 4,
     OnNextSignal_Global= 5,
     Anti_OnNextSignal_Global = 6
};

enum result {
     TIE = 0,
     WIN = 1,
     LOSS = 2
};
पुस्तकालय आयात अनुभाग
#import "mt2trading_library.ex4" // Please use only library version 12.4 or higher !!!

bool mt2trading (string symbol, string direction, double amount, int expiryMinutes);
bool mt2trading (string symbol, string direction, double amount, int expiryMinutes, string signalname);
bool mt2trading (string symbol, string direction, double amount, int expiryMinutes,
                 martingale martingaleType, int martingaleSteps, double martingaleCoef, 
                 broker myBroker, string signalName, string signalid);
int traderesult (string signalid);

#import
#import "mt2trading_library.ex5" // Please use only library version 12.4 or higher !!!

bool mt2trading (string symbol, string direction, double amount, int expiryMinutes);
bool mt2trading (string symbol, string direction, double amount, int expiryMinutes, string signalname);
bool mt2trading (string symbol, string direction, double amount, int expiryMinutes,
                 martingale martingaleType, int martingaleSteps, double martingaleCoef, 
                 broker myBroker, string signalName, string signalid);
int traderesult (string signalid);

#import
इनपुट पैरामीटर्स सेक्शन
extern broker Broker = All;
extern string SignalName = "My Signal";             // Signal Name (optional)
extern double TradeAmount = 1;                      // Trade Amount
extern int ExpiryMinutes = 5;                       // Expiry Time [minutes]
extern martingale MartingaleType = NoMartingale;    // Martingale
extern int MartingaleSteps = 2;                     // Martingale Steps
extern double MartingaleCoef = 2.0;                 // Martingale Coefficient
OnInit () अनुभाग में महत्वपूर्ण आरंभीकरण हैं।
  1. सेंडऑन एक टाइमस्टैम्प वैरिएबल है, जिसमें प्रति मोमबत्ती एक से अधिक सिग्नल भेजने से रोका जाता है।
  2. signalID संकेत पर हस्ताक्षर करने के लिए प्रयोग किया जाता है और traderesult (signalID) पुस्तकालय समारोह के साथ व्यापार परिणाम प्राप्त करने के लिए बाद में इस्तेमाल किया जा सकता है कि पहचान पैरामीटर है. इसके अलावा signalID Martingale संकेत अनुक्रम का ट्रैक रखने के लिए प्रयोग किया जाता है। OnNextExpiry संकेतों एक अद्वितीय आईडी हो सकता है, OnNextSignal संकेतों अद्वितीय आईडी होना चाहिए, आदेश में बॉट एक martingale अनुक्रम के रूप में संकेतों को पहचान सकते हैं.
  3. परिसंपत्ति चार्ट की मुद्रा जोड़ी है. इसमें 6 वर्ण (उदा. EURUSD) होने चाहिए.
int OnInit()
{
     // Initialize the time flag
     sendOnce = TimeCurrent();
     // Generate a unique signal id for signals management (based on timestamp, chart id and some random number)
     MathSrand(GetTickCount());
     if (MartingaleType == OnNextSignal || MartingaleType == Anti_OnNextSignal)
          signalID = IntegerToString(GetTickCount()) + IntegerToString(MathRand()); // indicator-wide id
     else if (MartingaleType = OnNextSignal_Global || MartingaleType == Anti_OnNextSignal_Global)
          signalID = IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN))
                     + IntegerToString(TerminalInfoInteger(TERMINAL_BUILD))
                     + AccountInfoString(ACCOUNT_NAME);   // terminal-wide id
     if (StringLen(Symbol()) >= 6)
          asset = StringSubstr(Symbol(),0,6);
     else
          asset = Symbol();
}
OnCalculate () – अनुभाग

ऊपर/नीचे ट्रेडों को ऊपर[Arrow]Condition और Down[Arrow]Condition पर रखने के लिए उदाहरण:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{

// Reinitialization of signalID if no martingale is used or martingale type is OnNextExpiry

if (MartingaleType == NoMartingale || MartingaleType == OnNextExpiry || MartingaleType == Anti_OnNextExpiry)
     signalID = IntegerToString(GetTickCount()) + IntegerToString(MathRand()); // candle-wide unique id

//...

bool Up_Arrow_Condition = ...
bool Down_Arrow_Condition = ...

if (UP_Arrow_Condition && signaltime != time[0])
{
     mt2trading (asset, "CALL", TradeAmount, ExpiryMinutes, MartingaleType, MartingaleSteps,
                 MartingaleCoef, Broker, SignalName, signalID);
     signaltime = time[0];
}

if (DOWN_Arrow_Condition && signaltime != time[0])
{
     mt2trading (asset, "PUT", TradeAmount, ExpiryMinutes, MartingaleType, MartingaleSteps,
                 MartingaleCoef, Broker, SignalName, signalID);
     signaltime = time[0];
}

//...
return(rates_total);
}
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{

// Reinitialization of signalID if no martingale is used or martingale type is OnNextExpiry

if (MartingaleType == NoMartingale || MartingaleType == OnNextExpiry || MartingaleType == Anti_OnNextExpiry)
     signalID = IntegerToString(GetTickCount()) + IntegerToString(MathRand()); // candle-wide unique id

//...

ArraySetAsSeries(time,true); // ---> only in MQL5

bool Up_Arrow_Condition = ...
bool Down_Arrow_Condition = ...

if (UP_Arrow_Condition && signaltime != time[0])
{
     mt2trading (asset, "CALL", TradeAmount, ExpiryMinutes, MartingaleType, MartingaleSteps,
                 MartingaleCoef, Broker, SignalName, signalID);
     signaltime = time[0];
}

if (DOWN_Arrow_Condition && signaltime != time[0])
{
     mt2trading (asset, "PUT", TradeAmount, ExpiryMinutes, MartingaleType, MartingaleSteps,
                 MartingaleCoef, Broker, SignalName, signalID);
     signaltime = time[0];
}

//...
return(rates_total);
}
MT2Trading समारोह के पैरामीटर:
  1. संपत्ति: मुद्रा जोड़ी (6 वर्ण लंबे, उदा. EURUSD).
  2. दिशा: “CALL” / “PUT”. एक कॉल व्यापार (दिशा ऊपर) खरीदने का मतलब है, एक डाल व्यापार बेचने का मतलब है (दिशा नीचे).
  3. व्यापार राशि: अपने दलाल खाते की मुद्रा में राशि.
  4. समय सीमा समाप्ति समय: मिनट में समय सीमा समाप्ति.
  5. मार्टिनगल प्रकार: Martingale प्रकार है कि लागू किया जाना चाहिए परिभाषित करें (अनिवार्य, अगर martingale उपयोग नहीं किया जाता है).
  6. मार्टिनगैले कदम: Martingale चरणों की संख्या.
  7. मार्टिनगेल गुणांक: प्रत्येक martingale चरण के लिए गणना व्यापार मात्रा के लिए लागू किया जाना चाहिए गुणांक (अज्ञेय, अगर martingale उपयोग नहीं किया जाता है).
  8. ब्रोकर: दलाल (वैकल्पिक), या सभी दलालों को परिभाषित करें।
  9. सिग्नल का नाम: बस संकेत है कि ट्रेडों तालिका में प्रदर्शित किया जाएगा का एक नाम. (वैकल्पिक)
  10. सिग्नल आईडी: हर व्यापार के लिए बाद में व्यापार परिणाम पुनः प्राप्त करने के क्रम में इस्तेमाल किया जा सकता है कि अपनी आईडी है. इसके अलावा आईडी एक martingale अनुक्रम बनाने के लिए प्रयोग किया जाता है. एक martingale अनुक्रम के सभी ट्रेडों एक ही आईडी है.