All Projects → EA31337 → EA31337-classes

EA31337 / EA31337-classes

Licence: GPL-3.0 license
📦📈 EA31337 framework (MQL library for writing trading Expert Advisors, indicators and scripts)

Programming Languages

MQL5
34 projects
C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
MQL4
33 projects
HLSL
714 projects

Projects that are alternatives of or similar to EA31337-classes

TelegramTrader-MT4-MT5
Connect Telegram Messenger to Metatrader for Live Quotes, Charts, Trading, and Managing Robots(Expert Advisors)
Stars: ✭ 74 (-28.16%)
Mutual labels:  trading, forex, mt4, mt5
xapi-node
xStation5 Trading API for NodeJS/JS
Stars: ✭ 36 (-65.05%)
Mutual labels:  trading, trading-api, forex
TradingTool-Wiki
Wiki for all TradingToolCrypto Products. MetaTrader 5 trading tools: Indicators, robots, risk management, signals, custom coding, CrptoBridgePro , and more
Stars: ✭ 26 (-74.76%)
Mutual labels:  mql, mt4, mt5
mt4-expander
DLL extension for the MetaTrader MQL4 framework
Stars: ✭ 25 (-75.73%)
Mutual labels:  trading, forex, mql
copyfactory-python-sdk
Python SDK for CopyFactory trade copying API. Can copy trades both between MetaTrader 5 (MT5) and MetaTrader 4 (MT4)
Stars: ✭ 19 (-81.55%)
Mutual labels:  trading, mt4, mt5
Metatrader
Expert advisors, scripts, indicators and code libraries for Metatrader.
Stars: ✭ 99 (-3.88%)
Mutual labels:  trading, forex, mt4
mt4-mql
MetaTrader MQL4 framework
Stars: ✭ 205 (+99.03%)
Mutual labels:  trading, forex, mql
Account-Protector
Automate emergency position closing and autotrading termination using a multi-setting expert advisor.
Stars: ✭ 47 (-54.37%)
Mutual labels:  mt4, mt5
gym-mtsim
A general-purpose, flexible, and easy-to-use simulator alongside an OpenAI Gym trading environment for MetaTrader 5 trading platform (Approved by OpenAI Gym)
Stars: ✭ 196 (+90.29%)
Mutual labels:  trading, forex
Sequence-to-Sequence-Learning-of-Financial-Time-Series-in-Algorithmic-Trading
My bachelor's thesis—analyzing the application of LSTM-based RNNs on financial markets. 🤓
Stars: ✭ 64 (-37.86%)
Mutual labels:  trading, forex
binaryapi
Binary.com & Deriv.com API for Python
Stars: ✭ 32 (-68.93%)
Mutual labels:  trading, forex
Median-and-Turbo-Renko-indicator-bundle
MQL5 header file for 'Median and Turbo renko indicator bundle' available for MT5 via MQL5 Market. The file lets you easily create a Renko EA in MT5 using the Median Renko indicator.
Stars: ✭ 68 (-33.98%)
Mutual labels:  forex, mql
Algotrading
Algorithmic trading framework for cryptocurrencies.
Stars: ✭ 249 (+141.75%)
Mutual labels:  trading, trading-api
Jiji2
Forex algorithmic trading framework using OANDA REST API.
Stars: ✭ 211 (+104.85%)
Mutual labels:  trading, forex
Shioaji
Shioaji all new cross platform api for trading ( 跨平台證券交易API )
Stars: ✭ 203 (+97.09%)
Mutual labels:  trading, trading-api
ibkr
Interactive Brokers wrapper 🚩
Stars: ✭ 34 (-66.99%)
Mutual labels:  market, trading-api
dukascopy-tools
✨ Download historical price tick data for Crypto, Stocks, ETFs, CFDs, Forex via CLI and Node.js ✨
Stars: ✭ 128 (+24.27%)
Mutual labels:  trading, forex
Mida
The open-source and cross-platform trading framework
Stars: ✭ 263 (+155.34%)
Mutual labels:  trading, forex
ForEx
Using ML to create a ForEx trader to invest my personal finances to get rid of student debt
Stars: ✭ 17 (-83.5%)
Mutual labels:  trading, trading-api
Quantrade
Quantitative strategies portfolio index [DEPRECATED].
Stars: ✭ 14 (-86.41%)
Mutual labels:  trading, forex

EA31337 Framework

Tag License Status Status Status Channel Twitter

EA31337 framework is designed for writing trading robots for MetaTrader 4 and 5 platforms. It can be also used to convert your MQL4 code into MQL5 with minimum code changes.

Table of contents

Projects

Projects implementing this framework:

Conversion

MQL4 to MQL5 conversion

This framework can be used to convert your MQL4 code to be compatible with both MQL4 and MQL5.

Find below the table of conversion (replace code on left with the right one):

MQL4 (original) MQL4 & MQL5 (replace with) Required include file
WindowRedraw() Chart::WindowRedraw() Chart.mqh
Day() DateTime::Day() DateTime.mqh
TimeDayOfWeek() DateTime::DayOfWeek() DateTime.mqh
DayOfWeek() DateTime::DayOfWeek() DateTime.mqh
DayOfYear() DateTime::DayOfYear() DateTime.mqh
Hour() DateTime::Hour() DateTime.mqh
Month() DateTime::Month() DateTime.mqh
TimeDay() DateTime::TimeDay() DateTime.mqh
TimeDayOfYear() DateTime::TimeDayOfYear() DateTime.mqh
TimeToStr() DateTime::TimeToStr() DateTime.mqh
Year() DateTime::Year() DateTime.mqh
iAC() Indi_AC::iAC() Indicators/Indi_AC.mqh
iAD() Indi_AD::iAD() Indicators/Indi_AD.mqh
iADX() Indi_ADX::iADX() Indicators/Indi_ADX.mqh
iAO() Indi_AO::iAO() Indicators/Indi_AO.mqh
iATR() Indi_ATR::iATR() Indicators/Indi_ATR.mqh
iBWMFI() Indi_BWMFI::iBWMFI() Indicators/Indi_BWMFI.mqh
iBands() Indi_Bands::iBands() Indicators/Indi_Bands.mqh
iBearsPower() Indi_BearsPower::iBearsPower() Indicators/Indi_BearsPower.mqh
iBullsPower() Indi_BullsPower::iBullsPower() Indicators/Indi_BullsPower.mqh
iCCI() Indi_CCI::iCCI() Indicators/Indi_CCI.mqh
iDeMarker() Indi_DeMarker::iDeMarker() Indicators/Indi_DeMarker.mqh
iEnvelopes() Indi_Envelopes::iEnvelopes() Indicators/Indi_Envelopes.mqh
iForce() Indi_Force::iForce() Indicators/Indi_Force.mqh
iFractals() Indi_Fractals::iFractals() Indicators/Indi_Fractals.mqh
iGator() Indi_Gator::iGator() Indicators/Indi_Gator.mqh
iIchimoku() Indi_Ichimoku::iIchimoku() Indicators/Indi_Ichimoku.mqh
iMA() Indi_MA::iMA() Indicators/Indi_MA.mqh
iMACD() Indi_MAcD::iMACD() Indicators/Indi_MACD.mqh
iMFI() Indi_MFI::iMFI() Indicators/Indi_MFI.mqh
iMomentum() Indi_Momentum::iMomentum() Indicators/Indi_Momentum.mqh
iOBV() Indi_OBV::iOBV() Indicators/Indi_OBV.mqh
iOsMA() Indi_OsMA::iOsMA() Indicators/Indi_OsMA.mqh
iRSI() Indi_RSI::iRSI() Indicators/Indi_RSI.mqh
iRVI() Indi_RVI::iRVI() Indicators/Indi_RVI.mqh
iSAR() Indi_SAR::iSAR() Indicators/Indi_SAR.mqh
iStdDev() Indi_StdDev::iStdDev() Indicators/Indi_StdDev.mqh
iStochastic() Indi_Stochastic::iStochastic() Indicators/Indi_Stochastic.mqh
iWPR() Indi_WPR::iWPR() Indicators/Indi_WPR.mqh
RefreshRates() Market::RefreshRates() Market.mqh
delete object Object::Delete(object) Object.mqh
GetOrderProfit() Order::GetOrderProfit() Order.mqh
OrderClose() OrderStatic::Close() Order.struct.h
OrderCloseTime() OrderStatic::CloseTime() Order.struct.h
OrderCommission() OrderStatic::Commission() Order.struct.h
OrderLots() OrderStatic::Lots() Order.struct.h
OrderMagicNumber() OrderStatic::MagicNumber() Order.struct.h
OrderOpenPrice() OrderStatic::OpenPrice() Order.struct.h
OrderOpenTime() OrderStatic::OpenTime() Order.struct.h
OrderPrint() OrderStatic::Print() Order.struct.h
OrderSelect() OrderStatic::Select() Order.struct.h
OrderStopLoss() OrderStatic::StopLoss() Order.struct.h
OrderSymbol() OrderStatic::Symbol() Order.struct.h
OrderTicket() OrderStatic::Ticket() Order.struct.h
OrderType() OrderStatic::Type() Order.struct.h
OrdersTotal() TradeStatic::TotalActive() Trade.mqh

Here are the special predefined variables conversion:

MQL4 (original) MQL4 & MQL5 (replace with) Required include file
Ask SymbolInfo::GetAsk() SymbolInfo.struct.static.h
Bars ChartStatic::iBars() Chart.struct.static.h
Bid SymbolInfo::GetBid() SymbolInfo.struct.static.h
Close[] ChartStatic::iClose() Chart.struct.static.h
Digits SymbolInfo::GetDigits() SymbolInfo.struct.static.h
High[] ChartStatic::iHigh() Chart.struct.static.h
Low[] ChartStatic::iLow() Chart.struct.static.h
Open[] ChartStatic::iOpen() Chart.struct.static.h
Point SymbolInfo::GetPointSize() SymbolInfo.struct.static.h
Time[] ChartStatic::iTime() Chart.struct.static.h
Volume[] ChartStatic::iVolume() Chart.struct.static.h

Classes

Account class

The class for managing the current trading account.

Example 1 - Managing account (dynamic calls)

Account *acc = new Account();
double _balance = acc.GetBalance();
double _credit = acc.GetCredit();
double _equity = acc.GetEquity();
double _margin_free = acc.GetMarginFree();
double _margin_used = acc.GetMarginUsed();
if (acc.IsExpertEnabled() && acc.IsTradeAllowed()) {
  // Some trade code.
}
delete acc;

Example 2 - Managing account (static calls)

double _balance = Account::AccountBalance();
double _credit = Account::AccountCredit();
double _equity = Account::AccountEquity();
double _margin_free = Account::AccountFreeMargin();
double _margin_used = Account::AccountMargin();
if (Account::IsExpertEnabled() && Account::IsTradeAllowed()) {
  // Some trade code.
}

Collection class

This class is for storing various type of objects. Here is the example usage:

// Define custom classes of Object type.
class Stack : Object {
  public:
    virtual string GetName() = NULL;
};
class Foo : Stack {
  public:
    string GetName() { return "Foo"; };
    double Weight() { return 0; };
};
class Bar : Stack {
  public:
    string GetName() { return "Bar"; };
    double Weight() { return 1; };
};
class Baz : Stack {
  public:
    string GetName() { return "Baz"; };
    double Weight() { return 2; };
};

int OnInit() {
  // Define and add items.
  Collection *stack = new Collection();
  stack.Add(new Foo);
  stack.Add(new Bar);
  stack.Add(new Baz);
  // Print the lowest and the highest items.
  Print("Lowest: ", ((Stack *)stack.GetLowest()).GetName());
  Print("Highest: ", ((Stack *)stack.GetHighest()).GetName());
  // Print all the items.
  for (uint i = 0; i < stack.GetSize(); i++) {
    Print(i, ": ", ((Stack *)stack.GetByIndex(i)).GetName());
  }
  // Clean up.
  Object::Delete(stack);
  return (INIT_SUCCEEDED);
}

Dict class

Use this class to store the values in form of a collective attribute–value pairs, in similar way as associative arrays with a hash table work.

Example 1 - Storing string-int data structures

Example of storing key-value data with string as a key:

Dict<string, int> data1;
data1.Set("a", 1);
data1.Set("b", 2);
data1.Set("c", 3);
data1.Unset("c");
Print(data1.GetByKey("a"));

Mail class

The purpose of Mail class is to provide common functionality for managing e-mails.

Example 1 - Send e-mail on trade execution

Example sending e-mail on trade execution:

int OnInit() { // @see: https://www.mql5.com/en/docs/event_handlers/oninit
  Mail *mail = new Mail();
  mail.SetSubjectPrefix("Trading");
}
void OnTrade() { // @see: https://www.mql5.com/en/docs/event_handlers/ontrade
  if (!Terminal::IsRealtime()) {
    mail.SendMailExecuteOrder();
  }
}
int OnDeinit() { // @see: https://www.mql5.com/en/docs/event_handlers/ondeinit
  delete mail;
}

Indicator class

The purpose of Indicator class is to provide common functionality across all indicators such as storing and searching for values.

This class is used as a base class to handle technical indicator classes which can be found in Indicators/ folder.

Indicators/ classes

In Indicators/ folder there is collection of indicator classes.

Example 1 - AC indicator

The example reading value from AC indicator:

#include <EA31337-classes/Indicators/Indi_AC.mqh>
int OnInit() {
  Indi_AC ac = new Indi_AC();
  PrintFormat("%g", ac.GetValue());
  delete ac;
}

Example 2 - Alligator indicator

The example reading values from Alligator indicator:

#include <EA31337-classes/Indicators/Indi_Alligator.mqh>
int OnInit() {
  AlligatorParams alli_params(13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN);
  Indi_Alligator alli = new Indi_Alligator(alli_params));
  AlligatorEntry values = alli.GetEntry(0);
  if (alli.GetFlag(INDI_ENTRY_FLAG_IS_VALID)) {
    Print("Alligator values: ", values.ToString());
  }
  delete alli;
}

IndicatorData class

The purpose of IndicatorData class is to store indicator data. It is basically alternative implementation of Indicator class.

For more details, please read: Class to hold indicator values.

For implementation example, check tests/IndicatorDataTest.mq4.

Profiler class

The purpose of Profiler class is to profile functions by measuring its time of execution. The minimum threshold can be set, so only slow execution can be reported.

Example 1 - Measure execution time of function multiple times

Example to measure execution time of function multiple times, then printing the summary of all calls which took 5ms or more.

#include "Profiler.mqh"

void MyFunction() {
  PROFILER_START
  Sleep(rand()%10);
  PROFILER_STOP
}

int OnInit() {
  for (uint i = 0; i < 10; i++) {
    MyFunction();
  }
  // Set minimum threshold of 5ms.
  PROFILER_SET_MIN(5)
  // Print summary of slow executions above 5ms.
  PROFILER_PRINT
  return (INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {
  PROFILER_DEINIT
}

Example 2 - Measure execution time of function multiple times

Example to measure execution time of function multiple times, then automatically printing all calls which took 5ms or more.

#include "Profiler.mqh"

void MyFunction() {
  PROFILER_START
  Sleep(rand()%10);
  // Automatically prints slow executions.
  PROFILER_STOP_PRINT
}

int OnInit() {
  // Set minimum threshold of 5ms.
  PROFILER_SET_MIN(5);
  for (uint i = 0; i < 10; i++) {
    MyFunction();
  }
  return (INIT_SUCCEEDED);
}

void OnDeinit(const int reason) {
  PROFILER_DEINIT
}

SymbolInfo class

The class to manage the symbol's information.

Example 1 - Accessing symbol's data (dynamic)

SymbolInfo *si = new SymbolInfo();
string symbol = si.GetSymbol();
MqlTick tick = si.GetTick()
double ask = si.GetLastAsk();
double bid = si.GetLastBid();
uint spread = si.GetSpread();
Print("MARKET: ", si.ToString());
delete si;

Example 2 - Accessing symbol's data (static)

string symbol = SymbolInfo::GetCurrentSymbol();
MqlTick tick = SymbolInfo::GetTick(symbol)
double ask = SymbolInfo::GetAsk(symbol);
double bid = SymbolInfo::GetBid(symbol);
uint spread = SymbolInfo::GetSpread(symbol);

Timer class

The purpose ofTimer class is to measure time between starting and stopping points.

Example 1 - Single timer

Single timer:

#include "Timer.mqh"

Timer *timer = new Timer("mytimer");
timer.Start();
// Some code to measure here.
timer.Stop();
Print("Time (ms): ", timer.GetSum());
timer.PrintSummary();
delete timer;

Example 2 - Multiple timers

Multiple measurements:

#include "Timer.mqh"

Timer *timer = new Timer(__FUNCTION__);
  for (uint i = 0; i < 5; i++) {
    timer.Start();
    Sleep(10); // Some code to measure here.
    PrintFormat("Current time elapsed before stop (%d/5): %d", i + 1, timer.GetTime());
    timer.Stop();
    PrintFormat("Current time elapsed after stop (%d/5): %d", i + 1, timer.GetTime(i));
  }
timer.PrintSummary();
delete timer;

Support

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].