MQL 커넥터 라이브러리

이 장에서는 MT2Trading 라이브러리를 사용하여 MQL 코드(인디케이터 또는 EA)에서 직접 시그널을 보내는 방법을 알아봅니다.

요구 사항:

MT2Trading 라이브러리를 사용하려면 라이브러리(MT4/5의 mt2trading_library)가 MetaTrader 터미널의 라이브러리 폴더(MQL4/라이브러리 또는 MQL5/라이브러리)에 복사되어 있는지 확인합니다.

코드 상단에 있는 Indicator 또는 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
};
라이브러리 가져오기 섹션
#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는 시그널을 서명하는 데 사용되는 식별 매개 변수이며 나중에 traderesult (signalID) 라이브러리 기능으로 거래 결과를 수신하는 데 사용할 수 있습니다. 또는 signalID는 마틴 시그널 시퀀스의 트랙을 유지하는 데 사용됩니다. OnNextExpiry 시그널에는 고유 ID가 있을 수 있지만 OnNextSignal 시그널에는 반드시 고유한 ID가 있어야 하며 봇이 신호를 하나의 마틴시퀀스로 인식할 수 있도록 합니다.
  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() – 섹션

Up_Arrow_조건 및 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”. CALL거래는 매수(방향 UP)를 의미하며, PUT 거래는 매도(방향 DOWN)를 의미합니다.
  3. 거래 금액: 브로커 계정 금액입니다.
  4. 만료 시간: 만료 시간 (분 단위)
  5. 마틴게일 타입: 적용해야 하는 마틴게일 유형을 정의합니다(마틴게일을 사용하지 않는 경우 무시됨).
  6. 마틴 스텝: 마틴 단계의 수입니다.
  7. 마틴게일 계수: 모든 martingale 단계에 대해 거래 금액 계산에 적용해야하는 계수 (martingale을 사용하지 않는 경우 무시 됨)
  8. 브로커: 브로커(선택 사항) 또는 모든 브로커를 정의합니다.
  9. 신호 이름: 거래 테이블에 표시 될 인디케이터의 이름. (선택 사항)
  10. 시그널 ID: 모든 거래에는 나중에 거래 결과를 검색하는 데 사용할 수있는 자체 ID가 있습니다. 또한 ID는 마틴 시퀀스를 구축하는 데 사용됩니다. 하나의 마틴 시퀀스의 모든 거래는 동일한 ID를 가있습니다.