MQL සම්බන්ධක library

මෙම පරිච්ඡේදයේ දී අපි MQL කේතයෙන් (දර්ශකය හෝ විශේෂ expert advisor) සෘජුවම සංඥා යැවීමට MT2Trading library භාවිතා කරන්නේ කෙසේදැයි ඉගෙන ගනිමු.

අවශ්‍යතා:

MT2Trading library භාවිතා කිරීම සඳහා library (MT4 / 5 සඳහා mt2trading_library) ඔබේ මෙටා ට්‍රේඩර් පර්යන්තයේ library ෆෝල්ඩරයට (MQL4 / library හෝ MQL5 / library) පිටපත් කර ඇති බවට වග බලා ගන්න.

ඔබේ දර්ශකයේ හෝ EA හි ඇති කාර්යයන් ඔබේ කේතයේ ඉහළින් #import ‍යොදන්න

කොටස් අර්ථ දැක්වීම
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
};
Library ආනයන කොටස
#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. sendOnce කැන්ඩ්ල් එකක සංඥාවකට වඩා යැවීම වැළැක්වීම සඳහා කාලරාමු විචල්‍යයකි.
  2. signalID යනු සංඥා හදුනා ගැනීම සඳහා භාවිතා කරන හඳුනාගැනීමේ පරාමිතිය වන අතර පසුව ට්‍රේඩ් ප්‍රතිපල ලබා ගැනීම සඳහා ට්‍රේඩ් ප්‍රතිපල (signalID) library function සමඟ භාවිතා කළ හැකිය. මාටින්ගේල් සංඥා අනුපිළිවෙල නිරීක්ෂණය කිරීම සඳහා signalID භාවිතා කරයි. OnNextExpiry සංඥා වලට අවේනික වූ හැඳුනුම්පතක් තිබිය හැකි අතර, OnNextSignal සංඥා වලට අවේනික වූ හැඳුනුම්පතක් තිබිය යුතුය.
  3. asset ප්‍රස්ථාරයේ මුදල් යුගලය වේ. එය අක්ෂර 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() – කොටස

Up_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 function වල පරාමිතීන්:
  1. Asset: මුදල් යුගලය (අක්ෂර 6 ක් දිග, උදා: EURUSD).
  2. Direction: “CALL” / “PUT”. call trade යනු මිලදී ගැනීම (දිශාව ඉහළට), put trade යනු විකිණීම (දිශාව පහළට) යන්නයි.
  3. Trade Amount: ඔබගේ තැරැව්කරු ගිණුමේ මුදල.
  4. Expiration time: කල් ඉකුත් වීමේ කාලය මිනිත්තු වලින්.
  5. Martingale Type: යෙදිය යුතු මාටින්ගේල් වර්ගය නිර්වචනය කරන්න (නොසලකා හැරීම, මාටින්ගේල් භාවිතා නොකරන්නේ නම්).
  6. Martingale Steps:මාටින්ගේල් පියවර ගණන.
  7. Martingale Coefficient: සෑම මාටින්ගේල් පියවරක් සඳහාම ට්‍රේඩ් ප්‍රමාණ ගණනය කිරීම සඳහා යෙදිය යුතු සංගුණකය (නොසලකා හැරීම, මාටින්ගේල් භාවිතා නොකරන්නේ නම්).
  8. Broker: තැරැව්කරු (විකල්ප) හෝ සියලු තැරැව්කරුවන් නිර්වචනය කරන්න.
  9. Signal Name: ට්‍රේඩ් වගුවේ දර්ශනය වන සංඥා වේ නම පමණි. (විකල්ප)
  10. Signal ID: සෑම ට්‍රේඩ් එකකටම තමන්ගේම හැඳුනුම්පතක් ඇති අතර එය පසුව ට්‍රේඩ් ප්‍රතිපල ලබා ගැනීම සඳහා භාවිතා කළ හැකිය. මාටින්ගේල් අනුක්‍රමයක් තැනීම සඳහා හැඳුනුම්පත භාවිතා කරයි. එක් මාටින්ගේල් අනුක්‍රමයක සියලුම ගනුදෙනු සදහා එකම හැඳුනුම්පතක් ඇත.