diff --git a/Experts/Nkanven/Framework EA/GoldenDeparture/GDea.mq4 b/Experts/Nkanven/Framework EA/GoldenDeparture/GDea.mq4 new file mode 100644 index 0000000..4492408 --- /dev/null +++ b/Experts/Nkanven/Framework EA/GoldenDeparture/GDea.mq4 @@ -0,0 +1,153 @@ +/* + + MA Crossover.mq4 + + Copyright 2013-2020, Orchard Forex + https://www.orchardforex.com + + Description: + +*/ + +#property copyright "Copyright 2013-2020, Orchard Forex" +#property link "https://www.orchardforex.com" +#property version "1.00" +#property strict + +// +// This is where we pull in the framework +// +#include + +// +// Input Section +// +// Fast moving average +input int InpFastPeriods = 10; // Fast periods +input ENUM_MA_METHOD InpFastMethod = MODE_SMA; // Fast method +input ENUM_APPLIED_PRICE InpFastAppliedPrice = PRICE_CLOSE; // Fast price + +// Slow moving average +input int InpSlowPeriods = 20; // Slow periods +input ENUM_MA_METHOD InpSlowMethod = MODE_SMA; // Slow method +input ENUM_APPLIED_PRICE InpSlowAppliedPrice = PRICE_CLOSE; // Slow price + +// Bar numbers for comparison +//input int InpBar2 = 2; // Base bar number +//input int InpBar1 = 1; // Crossover bar number + +// +// Some standard inputs, +// remember to change the default magic for each EA +// +input double InpVolume = 0.01; // Default order size +input string InpComment = __FILE__; // Default trade comment +input int InpMagicNumber = 20200701; // Magic Number + +// +// Declare the expert, use the child class name +// +#define CExpert CExpertBase +CExpert *Expert; + +// +// Signals, use the child class names if applicable +// +CSignalBase *EntrySignal; +CSignalBase *ExitSignal; + +// +// Indicators - use the child class name here +// +CIndicatorMA *FastIndicator; +CIndicatorMA *SlowIndicator; + +int OnInit() { + + // + // Instantiate the expert + // + Expert = new CExpert(); + + // + // Assign the default values to the expert + // + Expert.SetVolume(InpVolume); + Expert.SetTradeComment(InpComment); + Expert.SetMagic(InpMagicNumber); + + // + // Create the indicators + // + FastIndicator = new CIndicatorMA(InpFastPeriods, 0, InpFastMethod, InpFastAppliedPrice); + SlowIndicator = new CIndicatorMA(InpSlowPeriods, 0, InpSlowMethod, InpSlowAppliedPrice); + + // + // Set up the signals + // + EntrySignal = new CSignalCrossover(); + EntrySignal.AddIndicator(FastIndicator, 0); + EntrySignal.AddIndicator(SlowIndicator, 0); + + //ExitSignal = Not needed, using the same signal as entry + + // + // Add the signals to the expert + // + Expert.AddEntrySignal(EntrySignal); + Expert.AddExitSignal(EntrySignal); // Same signal + + // + // Finish expert initialisation and check result + // + int result = Expert.OnInit(); + + return(result); + +} + +void OnDeinit(const int reason) { + + EventKillTimer(); + + delete Expert; + //delete ExitSignal; + delete EntrySignal; + delete FastIndicator; + delete SlowIndicator; + + return; + +} + +void OnTick() { + + Expert.OnTick(); + return; + +} + +void OnTimer() { + + Expert.OnTimer(); + return; + +} + +double OnTester() { + + return(Expert.OnTester()); + +} + +void OnChartEvent(const int id, + const long &lparam, + const double &dparam, + const string &sparam) { + + Expert.OnChartEvent(id, lparam, dparam, sparam); + return; + +} + + diff --git a/Experts/Nkanven/Framework EA/GoldenDeparture/GDea.mq5 b/Experts/Nkanven/Framework EA/GoldenDeparture/GDea.mq5 new file mode 100644 index 0000000..fcacfe4 --- /dev/null +++ b/Experts/Nkanven/Framework EA/GoldenDeparture/GDea.mq5 @@ -0,0 +1,197 @@ +/* + + MA Crossover.mq5 + + Copyright 2013-2020, Orchard Forex + https://www.orchardforex.com + + Description: + +*/ + +#property copyright "Copyright 2013-2020, Orchard Forex" +#property link "https://www.orchardforex.com" +#property version "1.00" +#property strict + +// +// This is where we pull in the framework +// +#include + +// +// Input Section +// +// Fast moving average +input int InpFastPeriods = 10; // Fast periods +input ENUM_MA_METHOD InpFastMethod = MODE_SMA; // Fast method +input ENUM_APPLIED_PRICE InpFastAppliedPrice = PRICE_CLOSE; // Fast price + +// Slow moving average +input int InpSlowPeriods = 20; // Slow periods +input ENUM_MA_METHOD InpSlowMethod = MODE_SMA; // Slow method +input ENUM_APPLIED_PRICE InpSlowAppliedPrice = PRICE_CLOSE; // Slow price + +// Bar numbers for comparison +//input int InpBar2 = 2; // Base bar number +//input int InpBar1 = 1; // Crossover bar number + +// +// Some standard inputs, +// remember to change the default magic for each EA +// +input double InpVolume = 0.01; // Default order size +input string InpComment = __FILE__; // Default trade comment +input int InpMagicNumber = 20200701; // Magic Number + +// +// Declare the expert, use the child class name +// +#define CExpert CExpertBase +CExpert *Expert; + +// +// Signals, use the child class names if applicable +// +CSignalBase *EntrySignal; +CSignalBase *ExitSignal; + +// +// Indicators - use the child class name here +// +CIndicatorMA *FastIndicator; +CIndicatorMA *SlowIndicator; + +int OnInit() { + + // + // Instantiate the expert + // + Expert = new CExpert(); + + // + // Assign the default values to the expert + // + Expert.SetVolume(InpVolume); + Expert.SetTradeComment(InpComment); + Expert.SetMagic(InpMagicNumber); + + // + // Create the indicators + // + FastIndicator = new iMA(Symbol(), PERIOD_CURRENT, InpFastPeriods, 0, InpFastMethod, InpFastAppliedPrice); + SlowIndicator = new iMA(Symbol(), PERIOD_CURRENT, InpSlowPeriods, 0, InpSlowMethod, InpSlowAppliedPrice); + + // + // Set up the signals + // + EntrySignal = new CSignalCrossover(); + EntrySignal.AddIndicator(FastIndicator, 0); + EntrySignal.AddIndicator(SlowIndicator, 0); + + //ExitSignal = Not needed, using the same signal as entry + + // + // Add the signals to the expert + // + Expert.AddEntrySignal(EntrySignal); + Expert.AddExitSignal(EntrySignal); // Same signal + + // + // Finish expert initialisation and check result + // + int result = Expert.OnInit(); + + return(result); + +} + +void OnDeinit(const int reason) { + + EventKillTimer(); + + delete Expert; + //delete ExitSignal; + delete EntrySignal; + delete FastIndicator; + delete SlowIndicator; + + return; + +} + +void OnTick() { + + Expert.OnTick(); + return; + +} + +void OnTimer() { + + Expert.OnTimer(); + return; + +} + +void OnTrade() { + + Expert.OnTrade(); + return; + +} + +void OnTradeTransaction(const MqlTradeTransaction& trans, + const MqlTradeRequest& request, + const MqlTradeResult& result) { + + Expert.OnTradeTransaction(trans, request, result); + return; + +} + +double OnTester() { + + return(Expert.OnTester()); + +} + +void OnTesterInit() { + + Expert.OnTesterInit(); + return; + +} + +void OnTesterPass() { + + Expert.OnTesterPass(); + return; + +} + +void OnTesterDeinit() { + + Expert.OnTesterDeinit(); + return; + +} + +void OnChartEvent(const int id, + const long &lparam, + const double &dparam, + const string &sparam) { + + Expert.OnChartEvent(id, lparam, dparam, sparam); + return; + +} + +void OnBookEvent(const string &symbol) { + + Expert.OnBookEvent(); + return; + +} + + diff --git a/Experts/Nkanven/Framework EA/Grid/SnT Bot.ex5 b/Experts/Nkanven/Framework EA/Grid/SnT Bot.ex5 new file mode 100644 index 0000000..40a16b7 Binary files /dev/null and b/Experts/Nkanven/Framework EA/Grid/SnT Bot.ex5 differ diff --git a/Experts/Nkanven/Framework EA/Grid/SnT Bot.mq5 b/Experts/Nkanven/Framework EA/Grid/SnT Bot.mq5 new file mode 100644 index 0000000..d9d57a6 --- /dev/null +++ b/Experts/Nkanven/Framework EA/Grid/SnT Bot.mq5 @@ -0,0 +1,284 @@ +//+------------------------------------------------------------------+ +//| SnT Bot.mq5 | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.salixnigra.com" +#property version "1.0" + +#include + +// +// Input Section +// + +//This is where you should include the input parameters for your entry and exit signals +input string Comment_strategy="=========="; //Entry And Exit Settings +//Add in this section the parameters for the indicators used in your entry and exit + +//General input parameters +input string Comment_0="=========="; //Risk Management Settings +input ENUM_RISK_DEFAULT_SIZE InpRiskDefaultSize=RISK_DEFAULT_AUTO; //Position Size Mode +input double InpDefaultLotSize=1; //Position Size (if fixed or if no stop loss defined) +input ENUM_RISK_BASE InpRiskBase=RISK_BASE_BALANCE; //Risk Base +input double InpMaxRiskPerTrade=0.5; //Percentage To Risk Each Trade +input double InpProfitPercent=1; +input double InpMinLotSize=0.01; //Min Lot Size +input double InpMaxLotSize=100; //Max Lot Size + + +input string Comment_1="=========="; //Trading Hours Settings +input bool InpUseTradingHours=false; //Activate Trading Hours +input string InpTradingHourStart="01"; //Trading Start Hour (Broker Server Hour) +input string InpTradingStartMin="30"; //Trading Start minute +input string InpTradingHourEnd="23"; //Trading End Hour (Broker Server Hour) +input string InpTradingEndMin="00"; //Trading End minute +input bool InpUseTradingSession=true; +input ENUM_TRADING_SESSION InpTradingSession = LONDON_SESSION; //Trading session + +input string Comment_2="=========="; //Trading Hours Settings +input int InpGridGap = 1000; + +input double InpVolume = 0.01; //Default order size +input string InpComment = __FILE__; //Default trade comment +input int InpMagicNumber = 20200701; //Magic Number +input int InpBrokerTimeZoneGMT = 2; //Broker timezone from GMT +input int InpSlippage = 2; //Slippage +input int not_used; + +int londonSession[] = {7, 17}; +int newyorkSession[] = {13, 23}; +int tokyoSession[] = {0, 6}; + +// +// Declare the expert +// +#define CExpert CExpertBase +CExpert *Expert; + +// +// Signals +// +CSignalGrid *EntrySignal; +CSignalGrid *ExitSignal; + +// +// TPSL - use child class names instead of CTPSLBase +// +GridTPSL *TPObject; +GridTPSL *SLObject; + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +int OnInit() + { + +// +// Instantiate the expert, use the child class name +// + Expert = new CExpert(); + +// +// Assign the default values to the expert +// + Expert.SetVolume(InpVolume); + Expert.SetTradeComment(InpComment); + Expert.SetMagic(InpMagicNumber); + Expert.SetDefaultLotSize(InpDefaultLotSize); + Expert.SetGridGap(InpGridGap); + Expert.SetGridNumber(10); + Expert.SetMaxLotSize(InpMaxLotSize); + Expert.SetMaxRiskPerTrade(InpMaxRiskPerTrade); + Expert.SetMinLotSize(InpMinLotSize); + Expert.SetRiskBase(InpRiskBase); + Expert.SetRiskDefaultSize(InpRiskDefaultSize); + Expert.SetUseTradingSession(InpTradingSession); + Expert.SetSlippage(InpSlippage); + Expert.SetProfitPercent(InpProfitPercent); + +// +// Set up the signals +// + //EntrySignal = new CSignalGrid(); + //EntrySignal.SetMaxRiskPerTrade(InpMaxRiskPerTrade); + //EntrySignal.setMmagic(InpMagicNumber); +//EntrySignal.AddIndicator(Indicator1, 0); + + //ExitSignal = new CSignalGrid(); + //ExitSignal.SetMaxRiskPerTrade(InpMaxRiskPerTrade); + //ExitSignal.setMmagic(InpMagicNumber); +//ExitSignal.AddIndicator(Indicator1, 0); + +// +// Add the signals to the expert +// + //Expert.AddEntrySignal(EntrySignal); + //Expert.AddExitSignal(ExitSignal); + +// +// If using fixed tp and sl set them here in points +// + Expert.SetTakeProfitValue(0); + Expert.SetStopLossValue(0); + +// +// Set up the Take Profit and Stop Loss objects +// Remember to create child class names, not base +// + TPObject = new GridTPSL(); // Create the object +//IndicatorTPSL1 = new CIndicatorBase(); // Create an indicator for the tp object +//TPObject.AddIndicator(IndicatorTPSL1, 0); // Add the indicator to tp +// Set any other properties needed + +// And for the SL object + SLObject = new GridTPSL(); +//IndicatorTPSL2 = new CIndicatorBase(); +//SLObject.AddIndicator(IndicatorTPSL2, 0); + + Expert.SetTakeProfitObj(TPObject); + Expert.SetStopLossObj(SLObject); + +// +// Finish expert initialisation and check result +// + int result = Expert.OnInit(); + + return(result); + + } + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { + + EventKillTimer(); + + delete Expert; + delete ExitSignal; + delete EntrySignal; + delete TPObject; + delete SLObject; + + return; + + } + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnTick() + { + + Expert.OnTick(); + return; + + } + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnTimer() + { + + Expert.OnTimer(); + return; + + } + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnTrade() + { + + Expert.OnTrade(); + return; + + } + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnTradeTransaction(const MqlTradeTransaction& trans, + const MqlTradeRequest& request, + const MqlTradeResult& result) + { + + Expert.OnTradeTransaction(trans, request, result); + return; + + } + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +/*double OnTester() + { + + return(Expert.OnTester()); + + } + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnTesterInit() + { + + Expert.OnTesterInit(); + return; + + } + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnTesterPass() + { + + Expert.OnTesterPass(); + return; + + } + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnTesterDeinit() + { + + Expert.OnTesterDeinit(); + return; + + } +*/ +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnChartEvent(const int id, + const long &lparam, + const double &dparam, + const string &sparam) + { + + Expert.OnChartEvent(id, lparam, dparam, sparam); + return; + + } + +//+------------------------------------------------------------------+ +//| | +//+------------------------------------------------------------------+ +void OnBookEvent(const string &symbol) + { + + Expert.OnBookEvent(); + return; + + } + +//+------------------------------------------------------------------+ diff --git a/Experts/Nkanven/GDeaLite.ex5 b/Experts/Nkanven/GDeaLite.ex5 new file mode 100644 index 0000000..863557e Binary files /dev/null and b/Experts/Nkanven/GDeaLite.ex5 differ diff --git a/Experts/Nkanven/GDeaLite.mq5 b/Experts/Nkanven/GDeaLite.mq5 new file mode 100644 index 0000000..4cdf40f --- /dev/null +++ b/Experts/Nkanven/GDeaLite.mq5 @@ -0,0 +1,83 @@ +//+------------------------------------------------------------------+ +//| GDeaLite.mq5 | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" +#property version "1.00" + +#include // Description of variables +#include // Error library +#include // Prechecks +#include // +#include +#include // Scan for opened positions +#include //Check transaction history +#include //Manage trade dynamic open and close conditions +#include // Check buy and sell entries signals and execute them +#include // Lot size calculate +#include // Close opened positions +//+------------------------------------------------------------------+ +//| Expert initialization function | +//+------------------------------------------------------------------+ +int OnInit() + { +//--- + +//--- + return(INIT_SUCCEEDED); + } +//+------------------------------------------------------------------+ +//| Expert deinitialization function | +//+------------------------------------------------------------------+ +void OnDeinit(const int reason) + { +//--- + + } +//+------------------------------------------------------------------+ +//| Expert tick function | +//+------------------------------------------------------------------+ +void OnTick() + { +//--- + + } +//+------------------------------------------------------------------+ + +//Initialize variables +void InitializeVariables() + { + IsNewCandle=false; + IsTradedThisBar=false; + IsOperatingHours=false; + IsSpreadOK=false; + + LotSize=DefaultLotSize; + TickValue=0; + + TotalOpenBuy=0; + TotalOpenSell=0; + + SignalEntry=SIGNAL_ENTRY_NEUTRAL; + SignalExit=SIGNAL_EXIT_NEUTRAL; + Print("Variables intialized"); + } + +//Check and return if the spread is not too high +void CheckSpread() + { +//Get the current spread in points, the (int) transforms the double coming from MarketInfo into an integer to avoid a warning when compiling + double SpreadCurr=SymbolInfoInteger(mSymbol, SYMBOL_SPREAD); + Print("Spread ", SpreadCurr); + if(SpreadCurr<=MaxSpread) + { + IsSpreadOK=true; + } + else + { + IsSpreadOK=false; + } + } +//+------------------------------------------------------------------+ diff --git a/Include/Nkanven/Frameworks/GDea/CommonBase.mqh b/Include/Nkanven/Frameworks/GDea/CommonBase.mqh new file mode 100644 index 0000000..46edb6a --- /dev/null +++ b/Include/Nkanven/Frameworks/GDea/CommonBase.mqh @@ -0,0 +1,78 @@ +/* + CommonBase.mqh + For framework version 1.0 + + Copyright 2013-2020, Orchard Forex + https://www.orchardforex.com + +*/ + +#define _INIT_CHECK_FAIL if (mInitResult!=INIT_SUCCEEDED) return(mInitResult); +#define _INIT_ERROR(msg) return(InitError(msg, INIT_PARAMETERS_INCORRECT)); +#define _INIT_ASSERT(condition, msg) if (!condition) return(InitError(msg, INIT_FAILED)); + +class CCommonBase { + +private: + +protected: // Members + + int mDigits; + string mSymbol; + ENUM_TIMEFRAMES mTimeframe; + + string mInitMessage; + int mInitResult; + +protected: // Constructors + + // + // Constructors + // + CCommonBase() { Init(_Symbol, (ENUM_TIMEFRAMES)_Period); } + CCommonBase(string symbol) { Init(symbol, (ENUM_TIMEFRAMES)_Period); } + CCommonBase(int timeframe) { Init(_Symbol, (ENUM_TIMEFRAMES)timeframe); } + CCommonBase(ENUM_TIMEFRAMES timeframe) { Init(_Symbol, timeframe); } + CCommonBase(string symbol, int timeframe) { Init(symbol, (ENUM_TIMEFRAMES)timeframe); } + CCommonBase(string symbol, ENUM_TIMEFRAMES timeframe) { Init(symbol, timeframe); } + + // + // Destructors + // + ~CCommonBase() {}; + + int Init(string symbol, ENUM_TIMEFRAMES timeframe); + +protected: // Functions + + int InitError(string initMessage, int initResult) + { mInitMessage = initMessage; + mInitResult = initResult; + if (initMessage!="") Print(initMessage); + return(initResult); } + + double PointsToDouble(int points) { return(points*SymbolInfoDouble(mSymbol, SYMBOL_POINT)); } + +public: // Properties + + int InitResult() { return(mInitResult); } + string InitMessage() { return(mInitMessage); } + +public: // Functions + + bool TradeAllowed() { return(SymbolInfoInteger(mSymbol, SYMBOL_TRADE_MODE)!=SYMBOL_TRADE_MODE_DISABLED); } + +}; + +int CCommonBase::Init(string symbol, ENUM_TIMEFRAMES timeframe) { + + InitError("", INIT_SUCCEEDED); + + mSymbol = symbol; + mTimeframe = timeframe; + mDigits = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS); + + return(INIT_SUCCEEDED); + +} + diff --git a/Include/Nkanven/Frameworks/GDea/ExpertBase.mqh b/Include/Nkanven/Frameworks/GDea/ExpertBase.mqh new file mode 100644 index 0000000..e5afc1d --- /dev/null +++ b/Include/Nkanven/Frameworks/GDea/ExpertBase.mqh @@ -0,0 +1,380 @@ +/* + ExpertBase.mqh + + Copyright 2013-2020, Orchard Forex + https://www.orchardforex.com + +*/ + + +#include "CommonBase.mqh" +#include "SignalBase.mqh" +#include "TPSLBase.mqh" +#include "Trade/Trade.mqh" + +class CExpertBase : public CCommonBase { + +protected: + + int mMagicNumber; + string mTradeComment; + + double mVolume; + + datetime mLastBarTime; + datetime mBarTime; + + ////Changed + // Arrays to hold the signal objects + CSignalBase *mEntrySignals[]; + CSignalBase *mExitSignals[]; + ////CSignalBase *mEntrySignal; + ////CSignalBase *mExitSignal; + + double mTakeProfitValue; + double mStopLossValue; + CTPSLBase *mTakeProfitObj; + CTPSLBase *mStopLossObj; + + CTradeCustom Trade; + +private: + +protected: + + virtual bool LoopMain(bool newBar, bool firstTime); + +protected: + + int Init(int magicNumber, string tradeComment); + +public: + + // + // Constructors + // + CExpertBase() : CCommonBase() + { Init(0, ""); } + CExpertBase(string symbol, int timeframe, int magicNumber, string tradeComment) + : CCommonBase(symbol, timeframe) + { Init(magicNumber, tradeComment); } + CExpertBase(string symbol, ENUM_TIMEFRAMES timeframe, int magicNumber, string tradeComment) + : CCommonBase(symbol, timeframe) + { Init(magicNumber, tradeComment); } + CExpertBase(int magicNumber, string tradeComment) + : CCommonBase() + { Init(magicNumber, tradeComment); } + + // + // Destructors + // + ~CExpertBase(); + +public: // Default properties + + // + // Assign the default values to the expert + // + virtual void SetVolume(double volume) { mVolume = volume; } + + virtual void SetTakeProfitValue(int takeProfitPoints) + { mTakeProfitValue = PointsToDouble(takeProfitPoints); } + virtual void SetTakeProfitObj(CTPSLBase *takeProfitObj) + { mTakeProfitObj = takeProfitObj; } + + virtual void SetStopLossValue(int stopLossPoints) + { mStopLossValue = PointsToDouble(stopLossPoints); } + virtual void SetStopLossObj(CTPSLBase *stopLossObj) + { mStopLossObj = stopLossObj; } + + virtual void SetTradeComment(string comment) { mTradeComment = comment; } + virtual void SetMagic(int magicNumber) { mMagicNumber = magicNumber; + Trade.SetExpertMagicNumber(magicNumber); } + +public: // Setup + + ////Changed + virtual void AddEntrySignal(CSignalBase *signal) { AddSignal(signal, mEntrySignals); } + virtual void AddExitSignal(CSignalBase *signal) { AddSignal(signal, mExitSignals); } + virtual void AddSignal(CSignalBase *signal, CSignalBase* &signals[]); + ////virtual void AddEntrySignal(CSignalBase *signal) { mEntrySignal=signal; } + ////virtual void AddExitSignal(CSignalBase *signal) { mExitSignal=signal; } + +public: // Event handlers + + virtual int OnInit(); + virtual void OnTick(); + virtual void OnTimer() { return; } + virtual double OnTester() { return(0.0); } + virtual void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {}; + +#ifdef __MQL5__ + virtual void OnTrade() { return; } + virtual void OnTradeTransaction(const MqlTradeTransaction& trans, + const MqlTradeRequest& request, + const MqlTradeResult& result) + { return; } + virtual int OnTesterInit() { return(INIT_SUCCEEDED); } + virtual void OnTesterPass() { return; } + virtual void OnTesterDeinit() { return; } + virtual void OnBookEvent() { return; } +#endif + +public: // Functions + + virtual void GetMarketPrices(ENUM_ORDER_TYPE orderType, MqlTradeRequest &request); + ////New + virtual ENUM_OFX_SIGNAL_DIRECTION GetCurrentSignal(CSignalBase* &signals[], + ENUM_OFX_SIGNAL_TYPE signalType); + +}; + +CExpertBase::~CExpertBase() { + +} + +int CExpertBase::OnInit() { + + int i = 0; + for (i=ArraySize(mEntrySignals)-1; i>=0; i--) { + if (mEntrySignals[i].InitResult()!=INIT_SUCCEEDED) return(mEntrySignals[i].InitResult()); + } + for (i=ArraySize(mExitSignals)-1; i>=0; i--) { + if (mExitSignals[i].InitResult()!=INIT_SUCCEEDED) return(mExitSignals[i].InitResult()); + } + if (mTakeProfitObj!=NULL) { + if (mTakeProfitObj.InitResult()!=INIT_SUCCEEDED) return(mTakeProfitObj.InitResult()); + } + if (mStopLossObj!=NULL) { + if (mStopLossObj.InitResult()!=INIT_SUCCEEDED) return(mStopLossObj.InitResult()); + } + + return(INIT_SUCCEEDED); + +} + +int CExpertBase::Init(int magicNumber, string tradeComment) { + + if (mInitResult!=INIT_SUCCEEDED) return(mInitResult); + + mTradeComment = tradeComment; + SetMagic(magicNumber); + + mTakeProfitValue = 0.0; + mStopLossValue = 0.0; + + mLastBarTime = 0; + + ////New + ArrayResize(mEntrySignals, 0); // Just make sure these are initialised + ArrayResize(mExitSignals, 0); + + return(INIT_SUCCEEDED); + +} + +void CExpertBase::OnTick(void) { + + if (!TradeAllowed()) return; + + mBarTime = iTime(mSymbol, mTimeframe, 0); + + bool firstTime = (mLastBarTime==0); + bool newBar = (mBarTime!=mLastBarTime); + + if (LoopMain(newBar, firstTime)) { + mLastBarTime = mBarTime; + } + + return; + +} + +bool CExpertBase::LoopMain(bool newBar,bool firstTime) { + + // + // To start I will only trade on a new bar + // and not on the first bar after start + // + if (!newBar) return(true); + if (firstTime) return(true); + + // + // Update the signals + // + ////Changed + ENUM_OFX_SIGNAL_DIRECTION entrySignal = GetCurrentSignal(mEntrySignals, OFX_ENTRY_SIGNAL); + ENUM_OFX_SIGNAL_DIRECTION exitSignal = GetCurrentSignal(mExitSignals, OFX_EXIT_SIGNAL); + ////if (mEntrySignal!=NULL) mEntrySignal.UpdateSignal(); + ////if (mEntrySignal!=mExitSignal) { + //// if (mExitSignal!=NULL) mExitSignal.UpdateSignal(); + ////} + + // + // Should any trades be closed + // + ////Changed + if (exitSignal==OFX_SIGNAL_BOTH) { + Trade.PositionCloseByType(mSymbol, POSITION_TYPE_BUY); + Trade.PositionCloseByType(mSymbol, POSITION_TYPE_SELL); + } else + if (exitSignal==OFX_SIGNAL_BUY) { + Trade.PositionCloseByType(mSymbol, POSITION_TYPE_BUY); + } else + if (exitSignal==OFX_SIGNAL_SELL) { + Trade.PositionCloseByType(mSymbol, POSITION_TYPE_SELL); + } + ////if (mExitSignal!=NULL) { + //// if (mExitSignal.ExitSignal()==OFX_SIGNAL_BOTH) { + //// Trade.PositionCloseByType(mSymbol, POSITION_TYPE_BUY); + //// Trade.PositionCloseByType(mSymbol, POSITION_TYPE_SELL); + //// } else + //// if (mExitSignal.ExitSignal()==OFX_SIGNAL_BUY) { + //// Trade.PositionCloseByType(mSymbol, POSITION_TYPE_BUY); + //// } else + //// if (mExitSignal.ExitSignal()==OFX_SIGNAL_SELL) { + //// Trade.PositionCloseByType(mSymbol, POSITION_TYPE_SELL); + //// } + ////} + + // + // Should a trade be opened + // + MqlTradeRequest request = {}; // Just initialising + ////Changed + if (entrySignal==OFX_SIGNAL_BOTH) { + + GetMarketPrices(ORDER_TYPE_BUY, request); + Trade.Buy(mVolume, mSymbol, request.price, request.sl, request.tp); + + GetMarketPrices(ORDER_TYPE_SELL, request); + Trade.Sell(mVolume, mSymbol, request.price, request.sl, request.tp); + + } else + if (entrySignal==OFX_SIGNAL_BUY) { + + GetMarketPrices(ORDER_TYPE_BUY, request); + Trade.Buy(mVolume, mSymbol, request.price, request.sl, request.tp); + + } else + if (entrySignal==OFX_SIGNAL_SELL) { + + GetMarketPrices(ORDER_TYPE_SELL, request); + Trade.Sell(mVolume, mSymbol, request.price, request.sl, request.tp); + + } +//// if (mEntrySignal!=NULL) { +//// if (mEntrySignal.EntrySignal()==OFX_SIGNAL_BOTH) { +//// +//// GetMarketPrices(ORDER_TYPE_BUY, request); +//// Trade.Buy(mVolume, mSymbol, request.price, request.sl, request.tp); +//// +//// GetMarketPrices(ORDER_TYPE_SELL, request); +//// Trade.Sell(mVolume, mSymbol, request.price, request.sl, request.tp); +//// +//// } else +//// if (mEntrySignal.EntrySignal()==OFX_SIGNAL_BUY) { +//// +//// GetMarketPrices(ORDER_TYPE_BUY, request); +//// Trade.Buy(mVolume, mSymbol, request.price, request.sl, request.tp); +//// +//// } else +//// if (mEntrySignal.EntrySignal()==OFX_SIGNAL_SELL) { +//// +//// GetMarketPrices(ORDER_TYPE_SELL, request); +//// Trade.Sell(mVolume, mSymbol, request.price, request.sl, request.tp); +//// +//// } +//// } + + return(true); + +} + +void CExpertBase::GetMarketPrices(ENUM_ORDER_TYPE orderType, MqlTradeRequest &request) { + + double sl = (mStopLossObj==NULL) ? mStopLossValue : mStopLossObj.GetStopLoss(); + double tp = (mTakeProfitObj==NULL) ? mTakeProfitValue : mTakeProfitObj.GetTakeProfit(); + + if (orderType==ORDER_TYPE_BUY) { + if (request.price==0.0) request.price = SymbolInfoDouble(mSymbol, SYMBOL_ASK); + request.tp = (tp==0.0) ? 0.0 : NormalizeDouble(request.price+tp, mDigits); + request.sl = (sl==0.0) ? 0.0 : NormalizeDouble(request.price-sl, mDigits); + } + + if (orderType==ORDER_TYPE_SELL) { + if (request.price==0.0) request.price = SymbolInfoDouble(mSymbol, SYMBOL_BID); + request.tp = (tp==0.0) ? 0.0 : NormalizeDouble(request.price-tp, mDigits); + request.sl = (sl==0.0) ? 0.0 : NormalizeDouble(request.price+sl, mDigits); + } + + return; + +} + +////New +void CExpertBase::AddSignal(CSignalBase *signal, CSignalBase* &signals[]) { + + int index = ArraySize(signals); + ArrayResize(signals, index+1); + signals[index] = signal; + +} + +////New +ENUM_OFX_SIGNAL_DIRECTION CExpertBase::GetCurrentSignal(CSignalBase* &signals[], + ENUM_OFX_SIGNAL_TYPE signalType) { + + ENUM_OFX_SIGNAL_DIRECTION result = OFX_SIGNAL_NONE; + ENUM_OFX_SIGNAL_DIRECTION r2 = OFX_SIGNAL_NONE; // Just working value + int index = ArraySize(signals); + + if (index<=0) { + + return(result); + + } else { + + signals[0].UpdateSignal(); + result = signals[0].GetSignal(signalType); + + // I have chosen to update all signals in case there is some + // behavour that needs it. The penalty is some performance + // If performance is an issue just add an exit inside the loop + // as the commented line + for (int i = 1; i0); +} + +bool CTradeCustom::Sell(const double volume,const string symbol=NULL,double price=0.0,const double sl=0.0,const double tp=0.0,const string comment="") { + if (price==0.0) price = SellPrice(symbol); + int ticket = OrderSend(symbol, ORDER_TYPE_SELL, volume, price, 0, sl, tp, comment, mMagic); + return(ticket>0); +} + +bool CTradeCustom::PositionCloseByType(const string symbol, ENUM_POSITION_TYPE positionType, const int deviation=ULONG_MAX) { + + int slippage = (deviation==ULONG_MAX) ? 0 : deviation; + + bool result = true; + int cnt = OrdersTotal(); + for (int i = cnt-1; i>=0; i--) { + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + if (OrderSymbol()==symbol && OrderMagicNumber()==mMagic && OrderType()==positionType) { + result &= OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage); + } + } + } + + return(result); + +} + +////New +void CTradeCustom::PositionCountByType(const string symbol, int &count[]) { + + ArrayResize(count, 6); + ArrayInitialize(count, 0); + int cnt = OrdersTotal(); + for (int i = cnt-1; i>=0; i--) { + if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { + if (OrderSymbol()==symbol && OrderMagicNumber()==mMagic) { + count[(int)OrderType()]++; + } + } + } + + return; + +} diff --git a/Include/Nkanven/Frameworks/GDea/Trade/Trade_mql5.mqh b/Include/Nkanven/Frameworks/GDea/Trade/Trade_mql5.mqh new file mode 100644 index 0000000..3bae1c9 --- /dev/null +++ b/Include/Nkanven/Frameworks/GDea/Trade/Trade_mql5.mqh @@ -0,0 +1,66 @@ +/* + Trade.mqh + (For MQL5) + + Copyright 2013-2020, Orchard Forex + https://www.orchardforex.com + +*/ + +#include + +class CTradeCustom : public CTrade { + +private: + +protected: // member variables + +public: // constructors + +public: + + bool PositionCloseByType(const string symbol, ENUM_POSITION_TYPE positionType,const ulong deviation=ULONG_MAX); + ////New + void PositionCountByType(const string symbol, int &count[]); + +}; + +bool CTradeCustom::PositionCloseByType(const string symbol, ENUM_POSITION_TYPE positionType, const ulong deviation=ULONG_MAX) { + + bool result = true; + int cnt = PositionsTotal(); + for (int i = cnt-1; i>=0; i--) { + ulong ticket = PositionGetTicket(i); + if (PositionSelectByTicket(ticket)) { + if (PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_TYPE)==positionType && PositionGetInteger(POSITION_MAGIC)==m_magic) { + result &= PositionClose(ticket, deviation); + } + } else { + m_result.retcode=TRADE_RETCODE_REJECT; + result = false; + } + } + + return(result); + +} + +////New +void CTradeCustom::PositionCountByType(const string symbol, int &count[]) { + + ArrayResize(count, 6); + ArrayInitialize(count, 0); + + int cnt = PositionsTotal(); + for (int i = cnt-1; i>=0; i--) { + ulong ticket = PositionGetTicket(i); + if (PositionSelectByTicket(ticket)) { + if (PositionGetString(POSITION_SYMBOL)==symbol && PositionGetInteger(POSITION_MAGIC)==m_magic) { + count[(int)PositionGetInteger(POSITION_TYPE)]++; + } + } + } + + return; + +} diff --git a/Include/Nkanven/Frameworks/GDea/Updates.txt b/Include/Nkanven/Frameworks/GDea/Updates.txt new file mode 100644 index 0000000..281bf10 --- /dev/null +++ b/Include/Nkanven/Frameworks/GDea/Updates.txt @@ -0,0 +1,7 @@ +Version 2.03 + +Added macros to CommonBase to standardise init checking + +Moved base classes up one level and removed unnecessary folders + +Updated framework number \ No newline at end of file diff --git a/Include/Nkanven/Frameworks/GDeaFramework.mqh b/Include/Nkanven/Frameworks/GDeaFramework.mqh new file mode 100644 index 0000000..d2d0187 --- /dev/null +++ b/Include/Nkanven/Frameworks/GDeaFramework.mqh @@ -0,0 +1,12 @@ +//+------------------------------------------------------------------+ +//| GDeaFramework.mqh | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" + + +#ifndef _FRAMEWORK_VERSION_ + #include "GDea/Framework.mqh" +#endif diff --git a/Include/Nkanven/GDea/CheckHistory.mqh b/Include/Nkanven/GDea/CheckHistory.mqh new file mode 100644 index 0000000..8c5f1b0 --- /dev/null +++ b/Include/Nkanven/GDea/CheckHistory.mqh @@ -0,0 +1,27 @@ +//+------------------------------------------------------------------+ +//| CheckHistory.mqh | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" +//+------------------------------------------------------------------+ +//| defines | +//+------------------------------------------------------------------+ +// #define MacrosHello "Hello, world!" +// #define MacrosYear 2010 +//+------------------------------------------------------------------+ +//| DLL imports | +//+------------------------------------------------------------------+ +// #import "user32.dll" +// int SendMessageA(int hWnd,int Msg,int wParam,int lParam); +// #import "my_expert.dll" +// int ExpertRecalculate(int wParam,int lParam); +// #import +//+------------------------------------------------------------------+ +//| EX5 imports | +//+------------------------------------------------------------------+ +// #import "stdlib.ex5" +// string ErrorDescription(int error_code); +// #import +//+------------------------------------------------------------------+ diff --git a/Include/Nkanven/GDea/ClosePositions.mqh b/Include/Nkanven/GDea/ClosePositions.mqh new file mode 100644 index 0000000..e2357b9 --- /dev/null +++ b/Include/Nkanven/GDea/ClosePositions.mqh @@ -0,0 +1,27 @@ +//+------------------------------------------------------------------+ +//| ClosePositions.mqh | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" +//+------------------------------------------------------------------+ +//| defines | +//+------------------------------------------------------------------+ +// #define MacrosHello "Hello, world!" +// #define MacrosYear 2010 +//+------------------------------------------------------------------+ +//| DLL imports | +//+------------------------------------------------------------------+ +// #import "user32.dll" +// int SendMessageA(int hWnd,int Msg,int wParam,int lParam); +// #import "my_expert.dll" +// int ExpertRecalculate(int wParam,int lParam); +// #import +//+------------------------------------------------------------------+ +//| EX5 imports | +//+------------------------------------------------------------------+ +// #import "stdlib.ex5" +// string ErrorDescription(int error_code); +// #import +//+------------------------------------------------------------------+ diff --git a/Include/Nkanven/GDea/EntriesManager.mqh b/Include/Nkanven/GDea/EntriesManager.mqh new file mode 100644 index 0000000..2b66cbe --- /dev/null +++ b/Include/Nkanven/GDea/EntriesManager.mqh @@ -0,0 +1,27 @@ +//+------------------------------------------------------------------+ +//| EntriesManagement.mqh | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" +//+------------------------------------------------------------------+ +//| defines | +//+------------------------------------------------------------------+ +// #define MacrosHello "Hello, world!" +// #define MacrosYear 2010 +//+------------------------------------------------------------------+ +//| DLL imports | +//+------------------------------------------------------------------+ +// #import "user32.dll" +// int SendMessageA(int hWnd,int Msg,int wParam,int lParam); +// #import "my_expert.dll" +// int ExpertRecalculate(int wParam,int lParam); +// #import +//+------------------------------------------------------------------+ +//| EX5 imports | +//+------------------------------------------------------------------+ +// #import "stdlib.ex5" +// string ErrorDescription(int error_code); +// #import +//+------------------------------------------------------------------+ diff --git a/Include/Nkanven/GDea/LotSizeCal.mqh b/Include/Nkanven/GDea/LotSizeCal.mqh new file mode 100644 index 0000000..f3042e7 --- /dev/null +++ b/Include/Nkanven/GDea/LotSizeCal.mqh @@ -0,0 +1,27 @@ +//+------------------------------------------------------------------+ +//| LotSizeCal.mqh | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" +//+------------------------------------------------------------------+ +//| defines | +//+------------------------------------------------------------------+ +// #define MacrosHello "Hello, world!" +// #define MacrosYear 2010 +//+------------------------------------------------------------------+ +//| DLL imports | +//+------------------------------------------------------------------+ +// #import "user32.dll" +// int SendMessageA(int hWnd,int Msg,int wParam,int lParam); +// #import "my_expert.dll" +// int ExpertRecalculate(int wParam,int lParam); +// #import +//+------------------------------------------------------------------+ +//| EX5 imports | +//+------------------------------------------------------------------+ +// #import "stdlib.ex5" +// string ErrorDescription(int error_code); +// #import +//+------------------------------------------------------------------+ diff --git a/Include/Nkanven/GDea/Parameters.mqh b/Include/Nkanven/GDea/Parameters.mqh new file mode 100644 index 0000000..d2b8ef1 --- /dev/null +++ b/Include/Nkanven/GDea/Parameters.mqh @@ -0,0 +1,150 @@ +//+------------------------------------------------------------------+ +//| Parameters.mqh | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" + +//Enumerative for the entry signal value +enum ENUM_SIGNAL_ENTRY + { + SIGNAL_ENTRY_NEUTRAL=0, //SIGNAL ENTRY NEUTRAL + SIGNAL_ENTRY_BUY=1, //SIGNAL ENTRY BUY + SIGNAL_ENTRY_SELL=-1, //SIGNAL ENTRY SELL + }; + +//Enumerative for the exit signal value +enum ENUM_SIGNAL_EXIT + { + SIGNAL_EXIT_NEUTRAL=0, //SIGNAL EXIT NEUTRAL + SIGNAL_EXIT_BUY=1, //SIGNAL EXIT BUY + SIGNAL_EXIT_SELL=-1, //SIGNAL EXIT SELL + SIGNAL_EXIT_ALL=2, //SIGNAL EXIT ALL + }; + +//Enumerative for the allowed trading direction +enum ENUM_TRADING_ALLOW_DIRECTION + { + TRADING_ALLOW_BOTH=0, //ALLOW BOTH BUY AND SELL + TRADING_ALLOW_BUY=1, //ALLOW BUY ONLY + TRADING_ALLOW_SELL=-1, //ALLOW SELL ONLY + }; + +//Enumerative for the base used for risk calculation +enum ENUM_RISK_BASE + { + RISK_BASE_EQUITY=1, //EQUITY + RISK_BASE_BALANCE=2, //BALANCE + RISK_BASE_FREEMARGIN=3, //FREE MARGIN + }; + +//Enumerative for the default risk size +enum ENUM_RISK_DEFAULT_SIZE + { + RISK_DEFAULT_FIXED=1, //FIXED SIZE + RISK_DEFAULT_AUTO=2, //AUTOMATIC SIZE BASED ON RISK + }; + +//Enumerative for the Stop Loss mode +enum ENUM_MODE_SL + { + SL_FIXED=0, //FIXED STOP LOSS + SL_AUTO=1, //AUTOMATIC STOP LOSS + }; + +//Enumerative for the Take Profit Mode +enum ENUM_MODE_TP + { + TP_FIXED=0, //FIXED TAKE PROFIT + TP_AUTO=1, //AUTOMATIC TAKE PROFIT + }; + +//Enumerative for the stop loss calculation +enum ENUM_MODE_SL_BY + { + SL_BY_POINTS=0, //STOP LOSS PASSED IN POINTS + SL_BY_PRICE=1, //STOP LOSS PASSED BY PRICE + }; + +//Enumerative for candle type +enum ENUM_CANDLE_TYPE + { + NEUTRAL_CANDLE=0, + BEARISH_CANDLE=1, + BULLISH_CANDLE=2, + }; + +//Enumerative for price momentum +enum ENUM_PRICE_MOMENTUM + { + UP=2, + DOWN=1, + NEUTRAL=0, + }; + +struct LastTransaction + { + string time; + int type; + double profit; + } lt; + +// +// Input Section +// +// Fast moving average +input int InpFastPeriods = 10; // Fast periods +input ENUM_MA_METHOD InpFastMethod = MODE_SMA; // Fast method +input ENUM_APPLIED_PRICE InpFastAppliedPrice = PRICE_CLOSE; // Fast price + +// Slow moving average +input int InpSlowPeriods = 20; // Slow periods +input ENUM_MA_METHOD InpSlowMethod = MODE_SMA; // Slow method +input ENUM_APPLIED_PRICE InpSlowAppliedPrice = PRICE_CLOSE; // Slow price + +// Bar numbers for comparison +//input int InpBar2 = 2; // Base bar number +//input int InpBar1 = 1; // Crossover bar number + +input string Comment_0="=========="; //Risk Management Settings +input ENUM_RISK_DEFAULT_SIZE RiskDefaultSize=RISK_DEFAULT_AUTO; //Position Size Mode +input double DefaultLotSize=1; //Position Size (if fixed or if no stop loss defined) +input ENUM_RISK_BASE RiskBase=RISK_BASE_BALANCE; //Risk Base +input double MaxRiskPerTrade=0.5; //Percentage To Risk Each Trade +input double MinLotSize=0.01; //Minimum Position Size Allowed +input double MaxLotSize=100; //Maximum Position Size Allowed +input double MaxSpread=10.0; //Maximum Spread Allowed +input int Slippage=5; //Maximum Slippage Allowed in points + +// Trading time +input int InStartHour = 12; // Trading starting hour +input int InStartMin = 30; // Trading starting minute +input int InEndHour = 12; // Trading starting hour +input int InEndMin = 30; // Trading starting minute + +// +// Some standard inputs, +// remember to change the default magic for each EA +// +input double InpVolume = 0.01; // Default order size +input string InpComment = __FILE__; // Default trade comment +input int InpMagicNumber = 198901; // Magic Number + + +bool IsNewCandle=false; +bool IsTradedThisBar=false; +bool IsOperatingHours=false; +bool IsSpreadOK=false; + +double LotSize=DefaultLotSize; +int TickValue=0; + +int TotalOpenBuy=0; +int TotalOpenSell=0; +string mSymbol = Symbol(); + +MqlTick last_tick; + +ENUM_SIGNAL_ENTRY SignalEntry=SIGNAL_ENTRY_NEUTRAL; //Entry signal variable +ENUM_SIGNAL_EXIT SignalExit=SIGNAL_EXIT_NEUTRAL; \ No newline at end of file diff --git a/Include/Nkanven/GDea/Prechecks.mqh b/Include/Nkanven/GDea/Prechecks.mqh new file mode 100644 index 0000000..aedb074 --- /dev/null +++ b/Include/Nkanven/GDea/Prechecks.mqh @@ -0,0 +1,27 @@ +//+------------------------------------------------------------------+ +//| Prechecks.mqh | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" +//+------------------------------------------------------------------+ +//| defines | +//+------------------------------------------------------------------+ +// #define MacrosHello "Hello, world!" +// #define MacrosYear 2010 +//+------------------------------------------------------------------+ +//| DLL imports | +//+------------------------------------------------------------------+ +// #import "user32.dll" +// int SendMessageA(int hWnd,int Msg,int wParam,int lParam); +// #import "my_expert.dll" +// int ExpertRecalculate(int wParam,int lParam); +// #import +//+------------------------------------------------------------------+ +//| EX5 imports | +//+------------------------------------------------------------------+ +// #import "stdlib.ex5" +// string ErrorDescription(int error_code); +// #import +//+------------------------------------------------------------------+ diff --git a/Include/Nkanven/GDea/ScanPositions.mqh b/Include/Nkanven/GDea/ScanPositions.mqh new file mode 100644 index 0000000..061ea76 --- /dev/null +++ b/Include/Nkanven/GDea/ScanPositions.mqh @@ -0,0 +1,27 @@ +//+------------------------------------------------------------------+ +//| ScanPositions.mqh | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" +//+------------------------------------------------------------------+ +//| defines | +//+------------------------------------------------------------------+ +// #define MacrosHello "Hello, world!" +// #define MacrosYear 2010 +//+------------------------------------------------------------------+ +//| DLL imports | +//+------------------------------------------------------------------+ +// #import "user32.dll" +// int SendMessageA(int hWnd,int Msg,int wParam,int lParam); +// #import "my_expert.dll" +// int ExpertRecalculate(int wParam,int lParam); +// #import +//+------------------------------------------------------------------+ +//| EX5 imports | +//+------------------------------------------------------------------+ +// #import "stdlib.ex5" +// string ErrorDescription(int error_code); +// #import +//+------------------------------------------------------------------+ diff --git a/Include/Nkanven/GDea/TradeManager.mqh b/Include/Nkanven/GDea/TradeManager.mqh new file mode 100644 index 0000000..3bf43bd --- /dev/null +++ b/Include/Nkanven/GDea/TradeManager.mqh @@ -0,0 +1,27 @@ +//+------------------------------------------------------------------+ +//| TradeManager.mqh | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" +//+------------------------------------------------------------------+ +//| defines | +//+------------------------------------------------------------------+ +// #define MacrosHello "Hello, world!" +// #define MacrosYear 2010 +//+------------------------------------------------------------------+ +//| DLL imports | +//+------------------------------------------------------------------+ +// #import "user32.dll" +// int SendMessageA(int hWnd,int Msg,int wParam,int lParam); +// #import "my_expert.dll" +// int ExpertRecalculate(int wParam,int lParam); +// #import +//+------------------------------------------------------------------+ +//| EX5 imports | +//+------------------------------------------------------------------+ +// #import "stdlib.ex5" +// string ErrorDescription(int error_code); +// #import +//+------------------------------------------------------------------+ diff --git a/Include/Nkanven/GDea/TradingHour.mqh b/Include/Nkanven/GDea/TradingHour.mqh new file mode 100644 index 0000000..db311c7 --- /dev/null +++ b/Include/Nkanven/GDea/TradingHour.mqh @@ -0,0 +1,27 @@ +//+------------------------------------------------------------------+ +//| TradingHour.mqh | +//| Copyright 2021, Nkondog Anselme Venceslas | +//| https://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "Copyright 2021, Nkondog Anselme Venceslas" +#property link "https://www.mql5.com" +//+------------------------------------------------------------------+ +//| defines | +//+------------------------------------------------------------------+ +// #define MacrosHello "Hello, world!" +// #define MacrosYear 2010 +//+------------------------------------------------------------------+ +//| DLL imports | +//+------------------------------------------------------------------+ +// #import "user32.dll" +// int SendMessageA(int hWnd,int Msg,int wParam,int lParam); +// #import "my_expert.dll" +// int ExpertRecalculate(int wParam,int lParam); +// #import +//+------------------------------------------------------------------+ +//| EX5 imports | +//+------------------------------------------------------------------+ +// #import "stdlib.ex5" +// string ErrorDescription(int error_code); +// #import +//+------------------------------------------------------------------+