Organize project in different folders

This commit is contained in:
Nkondog A. Venceslas
2022-11-28 16:07:29 +01:00
parent 2f87fb5e3f
commit cbb412a720
244 changed files with 9 additions and 4 deletions
Binary file not shown.
+267
View File
@@ -0,0 +1,267 @@
//+------------------------------------------------------------------+
//| AreaBreaker.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 <A_Parameters.mqh> // Description of variables
#include <DL_ErrorHandling.mqh> // Error library
#include <DL_PreChecks.mqh> // Prechecks
#include <DL_CheckOperationHours.mqh> //
#include <Trade\Trade.mqh>
#include <A_PositionsManager.mqh> // Scan for opened positions
#include <A_HistoryChecker.mqh> //Check transaction history
#include <A_TradeManager.mqh> //Manage trade dynamic open and close conditions
#include <A_EntriesManagement.mqh> // Check buy and sell entries signals and execute them
#include <A_LotSizeCal.mqh> // Lot size calculate
//#include <DL_TradingBoundaries.mqh> //Draw trading range boundaries on chart
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
//Zigzag drawing inputs
string prefix = "SRLevel_"; //Object name prefix
color lineColor = clrYellow;
int lineWeight = 2;
double SRLevels[];
double Buffer[];
int Handle;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Handle = iCustom(Symb, PERIOD_CURRENT, "Examples\\ZigZag", Depth, Deviation, Backstep);
if(Handle==INVALID_HANDLE)
{
Print("Could not create a handle to ZigZag indicator");
return(INIT_FAILED);
}
//Clean up any SR levels left from earlier indicators
ObjectsDeleteAll(0, prefix, 0, OBJ_HLINE);
ChartRedraw(0);
ArrayResize(SRLevels, LookBack);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
IndicatorRelease(Handle);
ObjectsDeleteAll(0, prefix, 0, OBJ_HLINE);
ChartRedraw(0);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
ArraySetAsSeries(Buffer,true);
CopyBuffer(Handle, 0, 0, 3, Buffer);
if(candleChanged())
if(Buffer[0]>0)
Print("Zigzag level ", Buffer[0]);
//DrawLevels();
SymbolInfoTick(_Symbol,last_tick);
if(!ScanPositions())
return;
CheckHistory();
CheckSpread();
EvaluateEntry();
ProfitRunner();
CloseOpenPositions();
ExecuteEntry();
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
/*
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[])
{
//One time convert points to a price gap
static double levelGap = GapPoint*SymbolInfoDouble(Symb, SYMBOL_POINT);
if(rates_total ==prev_calculated)
return(rates_total);
//Get most recent lookback peaks
double zz =0;
double zzPeaks[];
int zzCount = 0;
ArrayResize(zzPeaks, LookBack);
ArrayInitialize(zzPeaks, 0.0);
int count = CopyBuffer(Handle, 0, 0, rates_total, Buffer);
if(count < 0)
{
int err = GetLastError();
return(0);
}
for(int i=1; i<rates_total && zzCount<LookBack; i++)
{
zz = Buffer[i];
Print(Buffer[i]);
if(zz != 0 && zz != EMPTY_VALUE)
{
zzPeaks[zzCount] = zz;
zzCount++;
}
}
ArraySort(zzPeaks);
//Search for grouping and set levels
int srCounter =0; //Number of support and resistance found
double price =0; //Average peaks price
int priceCount =0; //How many peaks are found
ArrayInitialize(SRLevels, 0.0);
for(int i=LookBack-1; i>=0; i--)
{
price += zzPeaks[i];
priceCount++;
if(i=0 || (zzPeaks[i]-zzPeaks[i-1]) > GapPoint)
{
if(priceCount >= Sensitivity)
{
price = price/priceCount;
SRLevels[srCounter] = price;
srCounter++;
}
price =0;
priceCount=0;
}
}
DrawLevels();
//--- return value of prev_calculated for next call
return(rates_total);
}
*/
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void DrawLevels()
{
for(int i=0; i<LookBack; i++)
{
string name = "prefix_" + IntegerToString(i);
Print("Drawing SR Lookback ", LookBack, " Find object ", ObjectFind(0, name), " SRLevel ", i, " ", SRLevels[i]);
if(SRLevels[i] == 0)
{
ObjectDelete(0, name);
continue;
}
Print("Peak ", SRLevels[i], " numero ", i);
if(ObjectFind(0, name) < 0)
{
ObjectCreate(0,name, OBJ_HLINE, 0, 0, SRLevels[i]);
ObjectSetInteger(0, name, OBJPROP_COLOR, lineColor);
ObjectSetInteger(0, name, OBJPROP_WIDTH, lineWeight);
ObjectSetInteger(0, name, OBJPROP_SELECTABLE, true);
ObjectMove(0, name, 0, iTime(Symb,_Period,0), SRLevels[i]);
}
else
{
ObjectSetDouble(0, name, OBJPROP_PRICE, SRLevels[1]);
}
}
ChartRedraw(0);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool candleChanged()
{
MqlRates priceData[];
ArraySetAsSeries(priceData, true);
CopyRates(Symb, PERIOD_CURRENT, 0, 3, priceData);
static datetime timeStampLastCheck;
static int candleCounter;
datetime timeStampCurrentCandle;
timeStampCurrentCandle = priceData[0].time;
if(timeStampCurrentCandle != timeStampLastCheck)
{
timeStampLastCheck = timeStampCurrentCandle;
candleCounter = candleCounter+1;
return true;
}
return false;
}
//+------------------------------------------------------------------+
//Initialize variables
void InitializeVariables()
{
IsNewCandle=false;
IsTradedThisBar=false;
IsOperatingHours=false;
IsSpreadOK=false;
LotSize=DefaultLotSize;
TickValue=0;
TotalOpenBuy=0;
TotalOpenSell=0;
TotalOpenOrders=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(Symb, SYMBOL_SPREAD);
Print("Spread ", SpreadCurr);
if(SpreadCurr<=MaxSpread)
{
IsSpreadOK=true;
}
else
{
IsSpreadOK=false;
}
}
//+------------------------------------------------------------------+
Binary file not shown.
Binary file not shown.
Binary file not shown.
+66
View File
@@ -0,0 +1,66 @@
//+------------------------------------------------------------------+
//| CandleCount.mq5 |
//| Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Nkanven\CandleCount\Parameters.mqh> //EA paramters
#include <Nkanven\CandleCount\TradingHour.mqh> //Trading hours checks
#include <Nkanven\CandleCount\Prechecks.mqh> //Trading conditions checks
#include <Nkanven\CandleCount\ScanPositions.mqh> //Trading conditions checks
#include <Nkanven\CandleCount\LotSizeCal.mqh> //Lot size calculator
#include <Nkanven\CandleCount\EntriesManager.mqh> //Lot size calculator
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
#include <Indicators/Trend.mqh>
CiMA* sma;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
//---
sma = new CiMA();
sma.Create(gSymbol, InpTimeFrame, InpPeriods, InpAppliedPrice, InpMethod, PRICE_CLOSE);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
TimeCurrent(dt);
SymbolInfoTick(InpInstrument1,last_tick);
SymbolInfoTick(InpInstrument2, blast_tick);
sma.Refresh(-1);
gSma = sma.Main(1);
CheckOperationHours();
CheckPreChecks();
ScanPositions();
if(!gIsPreChecksOk)
return;
Print("Good for trading...");
ExecuteEntry();
}
//+------------------------------------------------------------------+
Binary file not shown.
@@ -0,0 +1,155 @@
//+------------------------------------------------------------------+
//| EA_Template_1.0.mq5 |
//| Copyright 2021, Nkondog Anselme Venceslas |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
#include <Expert\ExpertBase.mqh>
//Input section
//Some standard inputs
input double inpVolume = 0.01; //Default order size
input string inpComment = __FILE__; //Default trade comment
input int inpMagicNumber = 12345; //Magic number
//Declare the Expert
#define CExpert CExpertBase
CExpert *Expert;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//Assign the default values to the expert
Expert = new CExpert();
Expert.SetVolume(inpVolume);
Expert.SetTradeComment(__FILE__);
Expert.SetMagic(inpMagicNumber);
//--- create timer
EventSetTimer(60);
int result = Expert.OnInit();
//---
return(result);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();
delete Expert;
return;
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
Expert.OnTick();
return;
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
Expert.OnTimer();
return;
}
//+------------------------------------------------------------------+
//| Trade function |
//+------------------------------------------------------------------+
void OnTrade()
{
//---
Expert.OnTrade();
return;
}
//+------------------------------------------------------------------+
//| TradeTransaction function |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
const MqlTradeRequest& request,
const MqlTradeResult& result)
{
//---
Expert.OnTradeTransaction(trans, request, result);
return;
}
//+------------------------------------------------------------------+
//| Tester function |
//+------------------------------------------------------------------+
double OnTester()
{
//---
//double ret=0.0;
//---
//---
//return(ret);
return(Expert.OnTester());
}
//+------------------------------------------------------------------+
//| TesterInit function |
//+------------------------------------------------------------------+
void OnTesterInit()
{
//---
Expert.OnTesterInit();
return;
}
//+------------------------------------------------------------------+
//| TesterPass function |
//+------------------------------------------------------------------+
void OnTesterPass()
{
//---
Expert.OnTesterPass();
return;
}
//+------------------------------------------------------------------+
//| TesterDeinit function |
//+------------------------------------------------------------------+
void OnTesterDeinit()
{
//---
Expert.OnTesterDeinit();
return;
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//---
Expert.OnChartEvent(id, lparam, dparam, sparam);
return;
}
//+------------------------------------------------------------------+
//| BookEvent function |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
//---
Expert.OnBookEvent();
return;
}
//+------------------------------------------------------------------+
+224
View File
@@ -0,0 +1,224 @@
/*
EA_Template.mq5
Copyright 2013-2020, Orchard Forex
https://www.orchardforex.com
Description:
*/
#property copyright "Copyright 2012-2020, Orchard Forex"
#property link "https://www.orchardforex.com"
#property version "1.00"
#property strict
//
// This is where we pull in the framework
//
// Use the following line for the current framework
#include <Orchard/Frameworks/Framework.mqh>
// Use the following line for a specific framework (replace x.x)
//#include <Orchard/Frameworks/Framework_x.x/Framework.mqh>
//
// Input Section
//
//
// 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
//
#define CExpert CExpertBase
CExpert *Expert;
//
// Indicators
//
CIndicatorBase *Indicator1;
//
// Signals
//
CSignalBase *EntrySignal;
CSignalBase *ExitSignal;
//
// TPSL - use child class names instead of CTPSLBase
//
CTPSLBase *TPObject;
CTPSLBase *SLObject;
//
// Indicators for TPSL - use child class names instead of CIndicatorBase
//
CIndicatorBase *IndicatorTPSL1;
CIndicatorBase *IndicatorTPSL2;
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);
//
// Set up the indicators
//
Indicator1 = new CIndicatorBase();
//
// Set up the signals
//
EntrySignal = new CSignalBase();
EntrySignal.AddIndicator(Indicator1, 0);
ExitSignal = new CSignalBase();
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 CTPSLBase(); // 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 CTPSLBase();
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 Indicator1;
delete TPObject;
delete SLObject;
delete IndicatorTPSL1;
delete IndicatorTPSL2;
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;
}
Binary file not shown.
+134
View File
@@ -0,0 +1,134 @@
//+------------------------------------------------------------------+
//| Equilibrium.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 <Indicators/Trend.mqh>
#include <Indicators\Oscilators.mqh>
CiIchimoku* ichimoku;
CiADX* adx;
CiATR* atr;
#include <E_Parameters.mqh> // Description of variables
#include <DL_ErrorHandling.mqh> // Error library
#include <DL_PreChecks.mqh> // Prechecks
#include <DL_CheckOperationHours.mqh> //
#include <Trade\Trade.mqh>
#include <DL_ScanPositions.mqh> // Scan for opened positions
#include <E_CheckHistory.mqh> //Check transaction history
#include <E_TradeManagement.mqh> //Manage trade dynamic open and close conditions
#include <E_EntriesManagement.mqh> // Check buy and sell entries signals and execute them
#include <DL_LotSizeCal.mqh> // Lot size calculate
//#include <DL_TradingBoundaries.mqh> //Draw trading range boundaries on chart
#include <E_ClosePositions.mqh> // Close opened positions
//TODO: Add ADX to filter ranging market
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
//---
ichimoku = new CiIchimoku();
ichimoku.Create(Symb, PERIOD_CURRENT, tenkan_sen, kijun_sen, senkou_span_b);
atr = new CiATR();
atr.Create(Symb, PERIOD_CURRENT, atr_period);
// adx = new CiADX();
// adx.Create(Symb, PERIOD_CURRENT, adx_period);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
ichimoku.Refresh(-1);
Tenkansen = ichimoku.TenkanSen(0);
Kijunsen = ichimoku.KijunSen(0);
Senkouspana = ichimoku.SenkouSpanA(-26);
Senkouspanb = ichimoku.SenkouSpanB(-26);
BwSenkouspana = ichimoku.SenkouSpanA(26);
BwSenkouspanb = ichimoku.SenkouSpanB(26);
Chinkouspan = ichimoku.ChinkouSpan(26);
atr.Refresh(-1);
Atr = atr.Main(1);
/*adx.Refresh(-1);
AdxMain = adx.Main(1);
AdxPlus = adx.Plus(1);
AdxMinus = adx.Minus(1);*/
SymbolInfoTick(_Symbol,last_tick);
//ScanPositions scans all the opened positions and collect statistics, if an error occurs it skips to the next price change
if(!ScanPositions())
return;
CloseOpenPositions();
CheckHistory();
CheckSpread();
EvaluateEntry();
ProfitRunner();
ExecuteEntry();
Comment(
"Expert Advisor by Anselme Nkondog (c) 2021\n");
return;
}
//+------------------------------------------------------------------+
//Initialize variables
void InitializeVariables()
{
IsNewCandle=false;
IsTradedThisBar=false;
IsOperatingHours=false;
IsSpreadOK=false;
LotSize=DefaultLotSize;
TickValue=0;
TotalOpenBuy=0;
TotalOpenSell=0;
TotalOpenOrders=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
long SpreadCurr=Spread;
Print("Spread ", SpreadCurr);
if(SpreadCurr<=MaxSpread)
{
IsSpreadOK=true;
}
else
{
IsSpreadOK=false;
}
}
//+------------------------------------------------------------------+
@@ -0,0 +1,21 @@
/*
EA_Template.mq4
Copyright 2013-2020, Orchard Forex
https://www.orchardforex.com
Description: Basic template for framework based MQ4 expert
Uses: framework_2.02 minimum
*/
#property copyright "Copyright 2013-2020, Orchard Forex"
#property link "https://www.orchardforex.com"
#property version "1.00"
#property strict
//
// Load the common code
//
#include "EA_Template.mqh" // Remember to change this
@@ -0,0 +1,64 @@
/*
EA_Template.mq5
Copyright 2013-2020, Orchard Forex
https://www.orchardforex.com
Description: Basic template for framework based MQ4 expert
Uses: framework_2.02 minimum
*/
#property copyright "Copyright 2012-2020, Orchard Forex"
#property link "https://www.orchardforex.com"
#property version "1.00"
#property strict
//
// Load the common code
//
#include "EA_Template.mqh" // Remember to change this
void OnTrade() {
Expert.OnTrade();
return;
}
void OnTradeTransaction(const MqlTradeTransaction& trans,
const MqlTradeRequest& request,
const MqlTradeResult& result) {
Expert.OnTradeTransaction(trans, request, result);
return;
}
void OnBookEvent(const string &symbol) {
Expert.OnBookEvent();
return;
}
int OnTesterInit() {
return(Expert.OnTesterInit());
}
void OnTesterPass() {
Expert.OnTesterPass();
return;
}
void OnTesterDeinit() {
Expert.OnTesterDeinit();
return;
}
@@ -0,0 +1,182 @@
/*
EA_Template.mqh
Copyright 2013-2020, Orchard Forex
https://www.orchardforex.com
Description: Holds common template code between MQ4 and MQ5
Uses: framework_2.02 minimum
*/
//
// This is where we pull in the framework
//
#include <Nkanven/Frameworks/Framework.mqh>
//
// Input Section
//
//
// 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 = 20202020; // Magic Number
//
// Declare the expert, use the child class name
// If the base class does everything needed then it's OK to
// just use CExpertBase
// Declare the name CExpert as the actual class name.
// This allows other files to just refer to CExpert
//
#define CExpert CExpertBase
CExpert *Expert;
//
// Indicators - use the child class name instead of CIndicatorBase
// Remove if not needed
//
CIndicatorBase *Indicator1;
//
// Signals - use the child class name instead of CSignalBase
// Remove if not needed
//
CSignalBase *EntrySignal;
CSignalBase *ExitSignal;
//
// TPSL - use child class names instead of CTPSLBase
// Remove if not needed
//
CTPSLBase *TPObject;
CTPSLBase *SLObject;
//
// Indicators for TPSL - use child class names instead of CIndicatorBase
// Remove if not needed
//
CIndicatorBase *IndicatorTPSL1;
CIndicatorBase *IndicatorTPSL2;
int OnInit() {
//
// Instantiate the expert
// Uses the declared class name
//
Expert = new CExpert();
//
// Assign the default values to the expert
//
Expert.SetVolume(InpVolume);
Expert.SetTradeComment(InpComment);
Expert.SetMagic(InpMagicNumber);
//
// Create the indicators - using your child class name
//
Indicator1 = new CIndicatorBase();
//
// Set up the signals - using your child class names
//
EntrySignal = new CSignalBase();
EntrySignal.AddIndicator(Indicator1, 0); // Add as many indicators as you need
ExitSignal = new CSignalBase();
ExitSignal.AddIndicator(Indicator1, 0); // Add as many indicators as you need
//
// Add the signals to the expert
//
Expert.AddEntrySignal(EntrySignal); // repeat for more signals
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 CTPSLBase(); // 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 CTPSLBase();
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 all objects created
delete Expert;
delete ExitSignal;
delete EntrySignal;
delete Indicator1;
delete TPObject;
delete SLObject;
delete IndicatorTPSL1;
delete IndicatorTPSL2;
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;
}
@@ -0,0 +1,181 @@
/*
EA_Template.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
//
// Use the following line for the current framework
#include <Orchard/Frameworks/Framework.mqh>
// Use the following line for a specific framework (replace x.x)
//#include <Orchard/Frameworks/Framework_x.x/Framework.mqh>
//
// Input Section
//
//
// 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
//
#define CExpert CExpertBase
CExpert *Expert;
//
// Indicators
//
CIndicatorBase *Indicator1;
//
// Signals
//
CSignalBase *EntrySignal;
CSignalBase *ExitSignal;
//
// TPSL - use child class names instead of CTPSLBase
//
CTPSLBase *TPObject;
CTPSLBase *SLObject;
//
// Indicators for TPSL - use child class names instead of CIndicatorBase
//
CIndicatorBase *IndicatorTPSL1;
CIndicatorBase *IndicatorTPSL2;
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);
//
// Set up the indicators
//
Indicator1 = new CIndicatorBase();
//
// Set up the signals
//
EntrySignal = new CSignalBase();
EntrySignal.AddIndicator(Indicator1, 0);
ExitSignal = new CSignalBase();
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 CTPSLBase(); // 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 CTPSLBase();
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 Indicator1;
delete TPObject;
delete SLObject;
delete IndicatorTPSL1;
delete IndicatorTPSL2;
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;
}
@@ -0,0 +1,224 @@
/*
EA_Template.mq5
Copyright 2013-2020, Orchard Forex
https://www.orchardforex.com
Description:
*/
#property copyright "Copyright 2012-2020, Orchard Forex"
#property link "https://www.orchardforex.com"
#property version "1.00"
#property strict
//
// This is where we pull in the framework
//
// Use the following line for the current framework
#include <Nkanven/Frameworks/Framework.mqh>
// Use the following line for a specific framework (replace x.x)
//#include <Orchard/Frameworks/Framework_x.x/Framework.mqh>
//
// Input Section
//
//
// 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
//
#define CExpert CExpertBase
CExpert *Expert;
//
// Indicators
//
CIndicatorBase *Indicator1;
//
// Signals
//
CSignalBase *EntrySignal;
CSignalBase *ExitSignal;
//
// TPSL - use child class names instead of CTPSLBase
//
CTPSLBase *TPObject;
CTPSLBase *SLObject;
//
// Indicators for TPSL - use child class names instead of CIndicatorBase
//
CIndicatorBase *IndicatorTPSL1;
CIndicatorBase *IndicatorTPSL2;
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);
//
// Set up the indicators
//
Indicator1 = new CIndicatorBase();
//
// Set up the signals
//
EntrySignal = new CSignalBase();
EntrySignal.AddIndicator(Indicator1, 0);
ExitSignal = new CSignalBase();
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 CTPSLBase(); // 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 CTPSLBase();
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 Indicator1;
delete TPObject;
delete SLObject;
delete IndicatorTPSL1;
delete IndicatorTPSL2;
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;
}
@@ -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 <Nkanven/Frameworks/GervisFrame.mqh>
//
// 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;
}
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;
}
@@ -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 <Orchard/Frameworks/Framework.mqh>
//
// 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;
}
@@ -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 <Nkanven/Frameworks/GDeaFramework.mqh>
//
// 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;
}
Binary file not shown.
Binary file not shown.
@@ -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 <Nkanven/Frameworks/GridFramework.mqh>
//
// 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;
}
//+------------------------------------------------------------------+
@@ -0,0 +1,176 @@
/*
MA Crossover ATR TPSL.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 <Orchard/Frameworks/Framework.mqh>
//
// 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
//
// For ATR based TPSL
//
input int InpATRPeriods = 14; // ATR Periods
input double InpATRMultiplier = 3.0; // ATR Multiplier
//
// 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 = 20200000; // 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;
//
// TPSL - use child class name
//
CTPSLSimple *TPSL;
//
// Indicators - use the child class name here
//
CIndicatorMA *FastIndicator;
CIndicatorMA *SlowIndicator;
// And for the TPSL
CIndicatorATR *IndicatorATR;
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
//
// Set up the ATR TPSL
//
TPSL = new CTPSLSimple();
IndicatorATR = new CIndicatorATR(InpATRPeriods);
TPSL.AddIndicator(IndicatorATR, 0);
TPSL.SetIndex(1);
TPSL.SetMultiplier(InpATRMultiplier);
Expert.SetTakeProfitObj(TPSL);
Expert.SetStopLossObj(TPSL);
//
// Finish expert initialisation and check result
//
int result = Expert.OnInit();
return(result);
}
void OnDeinit(const int reason) {
EventKillTimer();
delete Expert;
delete EntrySignal;
delete TPSL;
delete FastIndicator;
delete SlowIndicator;
delete IndicatorATR;
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;
}
@@ -0,0 +1,221 @@
/*
MA Crossover ATR TPSL.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 <Orchard/Frameworks/Framework.mqh>
//
// 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
//
// For ATR based TPSL
//
input int InpATRPeriods = 14; // ATR Periods
input double InpATRMultiplier = 3.0; // ATR Multiplier
//
// 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 = 20200000; // 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;
//
// TPSL
//
CTPSLSimple *TPSL;
//
// Indicators - use the child class name here
//
CIndicatorMA *FastIndicator;
CIndicatorMA *SlowIndicator;
// And for the TPSL
CIndicatorATR *IndicatorATR;
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
//
// Set up the ATR TPSL
//
TPSL = new CTPSLSimple();
IndicatorATR = new CIndicatorATR(InpATRPeriods);
TPSL.AddIndicator(IndicatorATR, 0);
TPSL.SetIndex(1);
TPSL.SetMultiplier(InpATRMultiplier);
Expert.SetTakeProfitObj(TPSL);
Expert.SetStopLossObj(TPSL);
//
// Finish expert initialisation and check result
//
int result = Expert.OnInit();
return(result);
}
void OnDeinit(const int reason) {
EventKillTimer();
delete Expert;
delete EntrySignal;
delete TPSL;
delete FastIndicator;
delete SlowIndicator;
delete IndicatorATR;
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;
}
@@ -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 <Orchard/Frameworks/Framework.mqh>
//
// 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;
}
@@ -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 <Nkanven/Frameworks/Framework.mqh>
//
// 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;
}
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;
}
Binary file not shown.
+115
View File
@@ -0,0 +1,115 @@
//+------------------------------------------------------------------+
//| 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 <Indicators/Trend.mqh>
#include <Indicators/Oscilators.mqh>
CiMA* fsma;
CiMA* ssma;
CiATR* atr;
#include <Nkanven\GDea\Parameters.mqh> // Description of variables
#include <DL_ErrorHandling.mqh> // Error library
#include <Nkanven\GDea\PreChecks.mqh> // Prechecks
#include <Nkanven\GDea\TradingHour.mqh> //
#include <Trade\Trade.mqh>
#include <Nkanven\GDea\ScanPositions.mqh> // Scan for opened positions
#include <Nkanven\GDea\CheckHistory.mqh> //Check transaction history
#include <Nkanven\GDea\TradeManager.mqh> //Manage trade dynamic open and close conditions
#include <Nkanven\GDea\EntriesManager.mqh> // Check buy and sell entries signals and execute them
#include <Nkanven\GDea\LotSizeCal.mqh> // Lot size calculate
#include <Nkanven\GDea\ClosePositions.mqh> // Close opened positions
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
fsma = new CiMA();
ssma = new CiMA();
fsma.Create(gSymbol, PERIOD_CURRENT, InpFastPeriods, InpFastAppliedPrice, InpFastMethod, PRICE_CLOSE);
ssma.Create(gSymbol, PERIOD_CURRENT, InpSlowPeriods, InpFastAppliedPrice, InpSlowMethod, PRICE_CLOSE);
atr = new CiATR();
atr.Create(gSymbol, PERIOD_CURRENT, InpAtrPeriod);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
fsma.Refresh(-1);
ssma.Refresh(-1);
gSsma = ssma.Main(1);
//isQualifiedCandle(0);
OrderClose();
if(!ScanPositions())
return;
if(OrdersTotal()>0)
return;
CheckSpread();
entryConditions();
EvaluateEntry();
ExecuteEntry();
Comment(
"Expert Advisor by Anselme Nkondog (c) 2021\n");
}
//+------------------------------------------------------------------+
//Initialize variables
void InitializeVariables()
{
gIsNewCandle=false;
gIsTradedThisBar=false;
gIsOperatingHours=false;
gIsSpreadOK=false;
gLotSize=InpDefaultLotSize;
gTickValue=0;
gTotalOpenBuy=0;
gTotalOpenSell=0;
gSignalEntry=SIGNAL_ENTRY_NEUTRAL;
gSignalExit=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
long SpreadCurr=SymbolInfoInteger(gSymbol, SYMBOL_SPREAD);
Print("Spread ", SpreadCurr);
if(SpreadCurr<=InpMaxSpread)
{
gIsSpreadOK=true;
}
else
{
gIsSpreadOK=false;
}
}
//+------------------------------------------------------------------+
Binary file not shown.
+81
View File
@@ -0,0 +1,81 @@
//+------------------------------------------------------------------+
//| GeminiHedge.mq5 |
//| Copyright 2022, Nkondog Anselme Venceslas. |
//| https://www.linkedin.com/in/nkondog |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, Nkondog Anselme Venceslas."
#property link "https://www.linkedin.com/in/nkondog"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Nkanven\GeminiHedge\Parameters.mqh> //EA paramters
#include <Nkanven\GeminiHedge\TradingHour.mqh> //Trading hours checks
#include <Nkanven\GeminiHedge\Prechecks.mqh> //Trading conditions checks
#include <Nkanven\GeminiHedge\ScanPositions.mqh> //Trading conditions checks
#include <Nkanven\GeminiHedge\DCAManager.mqh> //DCA manager
#include <Nkanven\GeminiHedge\LotSizeCal.mqh> //Lot size calculator
#include <Nkanven\GeminiHedge\EntriesManager.mqh> //Trade entries manager
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
TimeCurrent(dt);
string instruments[];
if(InpActivateDCAHedging)
{
Print("DCA Hedging is activated");
ArrayResize(instruments,2);
instruments[0] = InpInstrument1;
instruments[1] = InpInstrument2;
}
else
{
Print("DCA Hedging is not activated");
ArrayResize(instruments,1);
instruments[0] = InpInstrument1;
}
for(int i=0; i<ArraySize(instruments); i++)
{
Spread = SymbolInfoInteger(instruments[i], SYMBOL_SPREAD);
SymbolInfoTick(instruments[i],last_tick);
gSymbol = instruments[i];
point = SymbolInfoDouble(gSymbol, SYMBOL_POINT);
CheckOperationHours();
CheckPreChecks();
ScanPositions();
if(!gIsPreChecksOk)
return;
DcaManager();
Print("Good for trading...");
ExecuteEntry();
}
}
//+------------------------------------------------------------------+
Binary file not shown.
+115
View File
@@ -0,0 +1,115 @@
//+------------------------------------------------------------------+
//| Gervis.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 <Indicators/Trend.mqh>
#include <Indicators/Oscilators.mqh>
CiMA* sma;
CiMA* ssma;
#include <Nkanven\Gervis\Parameters.mqh> // Description of variables
#include <Nkanven\DL_ErrorHandling.mqh> // Error library
#include <Nkanven\Gervis\PreChecks.mqh> // Prechecks
#include <Nkanven\Gervis\TradingHour.mqh> //
#include <Trade\Trade.mqh>
#include <Nkanven\Gervis\ScanPositions.mqh> // Scan for opened positions
#include <Nkanven\Gervis\CheckHistory.mqh> //Check transaction history
#include <Nkanven\Gervis\TradeManager.mqh> //Manage trade dynamic open and close conditions
#include <Nkanven\Gervis\EntriesManagerDCA.mqh> // Check buy and sell entries signals and execute them
#include <Nkanven\Gervis\LotSizeCal.mqh> // Lot size calculate
#include <Nkanven\Gervis\ClosePositions.mqh> // Close opened positions
#include <Nkanven\Gervis\HighestPriceLevel.mqh>
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//sma = new CiMA();
//ssma = new CiMA();
//sma.Create(gSymbol, PERIOD_CURRENT, InpMAPeriods, InpMAAppliedPrice, InpMAMethod, PRICE_CLOSE);
//ssma.Create(gSymbol, PERIOD_CURRENT, 200, InpMAAppliedPrice, InpMAMethod, PRICE_CLOSE);
InitializeVariables();
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
SymbolInfoTick(_Symbol,last_tick);
TimeCurrent(dt);
CheckOperationHours();
//isQualifiedCandle(0);
OrderClose();
ScanPositions();
CheckSpread();
EvaluateEntry();
ExecuteEntry();
Comment(
"Expert Advisor by Anselme Nkondog (c) 2021\n "+
" Hour " + dt.hour + " Min "+ dt.min+"\n"
" Last Highest Price " + gLastHighestPrice + " Price %change "+ gPriceChange);
}
//+------------------------------------------------------------------+
//Initialize variables
void InitializeVariables()
{
gIsNewCandle=false;
gIsTradedThisBar=false;
gIsOperatingHours=false;
gIsSpreadOK=false;
gLotSize=InpDefaultLotSize;
gTickValue=0;
gTotalOpenBuy=0;
gTotalOpenSell=0;
gSignalEntry=SIGNAL_ENTRY_NEUTRAL;
gSignalExit=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
long SpreadCurr=SymbolInfoInteger(gSymbol, SYMBOL_SPREAD);
Print("Spread ", SpreadCurr);
if(SpreadCurr<=InpMaxSpread)
{
gIsSpreadOK=true;
}
else
{
gIsSpreadOK=false;
}
}
//+------------------------------------------------------------------+
Binary file not shown.
+95
View File
@@ -0,0 +1,95 @@
//+------------------------------------------------------------------+
//| HighTension.mq5 |
//| Copyright 2022, Nkondog Anselme Venceslas. |
//| https://www.linkedin/in/nkondog.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, Nkondog Anselme Venceslas."
#property link "https://www.linkedin/in/nkondog.com"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Nkanven\HighTension\Parameters.mqh> //EA paramters
#include <Nkanven\HighTension\Prechecks.mqh> //Trading conditions checks
#include <Nkanven\HighTension\ScanPositions.mqh> //Trading conditions checks
#include <Nkanven\HighTension\LotSizeCal.mqh> //Lot size calculator
#include <Nkanven\HighTension\EntriesManager.mqh> //Lot size calculator
#include <Nkanven\HighTension\CloseTransactions.mqh> //Emergency close of transaction
#include <Nkanven\HighTension\Notifications.mqh> //Handle notification
int handle;
const int indexMA = 0;
const int indexColor = 1;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
handle = iCustom(gSymbol, PERIOD_CURRENT, "Nkanven\MA-Slope", InpPeriods, InpMethod, InpAppliedPrice);
if(handle == INVALID_HANDLE)
{
PrintFormat("Error %i ", GetLastError());
return(INIT_FAILED);
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
IndicatorRelease(handle);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
TimeCurrent(dt);
SymbolInfoTick(_Symbol,last_tick);
CheckPreChecks();
Comment("Spread ", DoubleToString(Spread,0));
if(!gIsPreChecksOk)
return;
//Print("TF", PERIOD_CURRENT, " 1min ", PERIOD_M1, " 5min ", PERIOD_M5, " Period ", Period());
/*ScanPositions();*/
if(!newBar())
return;
int cnt = CopyBuffer(handle, indexMA, 0, 3, bufferMA);
if(cnt<3)
return;
cnt = CopyBuffer(handle, indexColor, 0, 3, bufferColor);
currentMA = bufferMA[1];
currentColor = bufferColor[1];
CloseTransactions();
ExecuteEntry();
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
bool newBar()
{
static datetime prevTime = 0;
datetime currentTime = iTime(gSymbol, PERIOD_CURRENT, 0);
if(currentTime != prevTime)
{
prevTime = currentTime;
return(true);
}
return(false);
}
//+------------------------------------------------------------------+
Binary file not shown.
Binary file not shown.
Binary file not shown.
+148
View File
@@ -0,0 +1,148 @@
//+------------------------------------------------------------------+
//| MAGrid.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"
// Moving Average grid strategy
/*
Set pending orders x point above and below price.
If price above SMA, buy and set buy orders x time the ATR above and below price.
If price below SMA, sell and set sell orders x time the ATR above and below price.
Close all position at the close of the first candle crossing the moving average.
Open positions and set orders if there's nothing. At take profit, close all pending orders and reopen others
*/
#include <Indicators/Trend.mqh>
#include <Indicators/Oscilators.mqh>
CiMA* ma;
CiATR* atr;
#include <Nkanven\MAGrid\Parameters.mqh> // Description of variables
//#include <DL_ErrorHandling.mqh> // Error library
//#include <Nkanven\MAGrid\PreChecks.mqh> // Prechecks
//#include <Nkanven\MAGrid\TradingHour.mqh> //
#include <Trade\Trade.mqh>
#include <Nkanven\MAGrid\ScanPositions.mqh> // Scan for opened positions
//#include <Nkanven\MAGrid\CheckHistory.mqh> //Check transaction history
//#include <Nkanven\MAGrid\TradeManager.mqh> //Manage trade dynamic open and close conditions
#include <Nkanven\MAGrid\EntriesManager.mqh> // Check buy and sell entries signals and execute them
#include <Nkanven\MAGrid\LotSizeCal.mqh> // Lot size calculate
#include <Nkanven\MAGrid\CloseTransactions.mqh> // Close opened positions
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
ma = new CiMA();
ma.Create(gSymbol, PERIOD_CURRENT, InpFastPeriods, InpFastAppliedPrice, InpFastMethod, PRICE_CLOSE);
atr = new CiATR();
atr.Create(gSymbol, PERIOD_CURRENT, InpAtrPeriod);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
SymbolInfoTick(_Symbol,last_tick);
//Get technical indicators values
ma.Refresh(-1);
gMa = ma.Main(1);
atr.Refresh(-1);
gAtr = atr.Main(1);
//Initial position scanning
ScanPositions();
Print("Price is below SMA. Price = ", iClose(gSymbol, PERIOD_CURRENT, 1), " SMA = ", gMa, " Total buy ", gTotalBuyPositions);
//Check closing signal
//Close all buy position and orders if price is below MA
if(iClose(gSymbol, PERIOD_CURRENT, 1) < gMa && gTotalTransactions > 0)
{
Print("Price is below SMA. Price = ", iClose(gSymbol, PERIOD_CURRENT, 1), " SMA = ", gMa);
CloseTransactions(SIGNAL_EXIT_BUY);
}
else
{
//Close all sell positions and orders if price is above MA
if(iClose(gSymbol, PERIOD_CURRENT, 1) > gMa && gTotalTransactions > 0)
{
Print("Price is above SMA. Price = ", iClose(gSymbol, PERIOD_CURRENT, 1), " SMA = ", gMa);
CloseTransactions(SIGNAL_EXIT_SELL);
}
}
//Rescan positions
ScanPositions();
Print("Total transaction ", gTotalTransactions, " gTotalBuyPositions ", gTotalBuyPositions);
//Do not open positions if there are positions or orders pending
if(gTotalTransactions>0)
{
//If there's no position, close all pending orders
if(gTotalBuyPositions == 0 && gTotalTransactions > 0)
{
Print("Delete all");
CloseTransactions(SIGNAL_EXIT_ALL);
}
else
{
if(gTotalSellPositions==0 && gTotalTransactions >0)
{
CloseTransactions(SIGNAL_EXIT_ALL);
}
else
{
return;
}
}
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
CheckSpread();
EvaluateEntry();
ExecuteEntry();
}
//+------------------------------------------------------------------+
//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
long SpreadCurr=SymbolInfoInteger(gSymbol, SYMBOL_SPREAD);
Print("Spread ", SpreadCurr);
if(SpreadCurr<=InpMaxSpread)
{
gIsSpreadOK=true;
}
else
{
gIsSpreadOK=false;
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,185 @@
//+------------------------------------------------------------------+
//| MuzzlingAlligatorWatcher.mq5 |
//| Copyright 2022, Nkondog Anselme Venceslas. |
//| https://www.linkedin.com/in/nkondog |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, Nkondog Anselme Venceslas."
#property link "https://www.linkedin.com/in/nkondog"
#property version "1.00"
#include <Indicators/BillWilliams.mqh>
#include <Indicators/Trend.mqh>
#include <Libraries/NavLib.mq5>
CiAlligator* alligator;
CiMA* ma;
input string Comment_0="=========="; //Alligator parameters
input ENUM_TIMEFRAMES inpTimeframe = PERIOD_CURRENT; //Timeframe
input int inpJawsPeriod = 13; //Jaws period
input int inpJawsShift = 8; //Jaws shift
input int inpTeethPeriod = 8; //Teeth period
input int inpTeethShift = 5; //Teeth shift
input int inpLipsPeriod = 5; //Lips period
input int inpLipsShift = 3; //Lips shift
input ENUM_MA_METHOD inpMethod = MODE_SMMA; //Method
input ENUM_APPLIED_PRICE inpApplyedTo = PRICE_MEDIAN; //Applied to
input string Comment_1="=========="; //Moving average parameters
input ENUM_MA_METHOD inpMAMethod = MODE_SMA; //MA method
input int inpMAPeriod = 200; //MA period
input int inpMASHift = 0; //MA shift
input ENUM_APPLIED_PRICE inpMAApplyedTo = PRICE_CLOSE; //MA applied to
double jaws, teeth, lips, sma, prevCandleHigh, prevCandleLow, currentPrice, openPrice, candleClose;
string symb = Symbol();
string comm = "";
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
alligator = new CiAlligator();
alligator.Create(symb, inpTimeframe, inpJawsPeriod, inpJawsShift, inpTeethPeriod, inpTeethShift, inpLipsPeriod, inpLipsShift, inpMethod, inpApplyedTo);
ma = new CiMA();
ma.Create(symb, inpTimeframe, inpMAPeriod, inpMASHift, inpMAMethod, inpMAApplyedTo);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
ObjectsDeleteAll(0);
Comment("");
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//Alligator variables initialization
alligator.Refresh(-1);
jaws = NormalizeDouble(alligator.Jaw(0), _Digits);
teeth = NormalizeDouble(alligator.Teeth(0), _Digits);
lips = NormalizeDouble(alligator.Lips(0), _Digits);
//Moving Average variable initialization
ma.Refresh(-1);
sma = NormalizeDouble(ma.Main(1), _Digits);
//Get previous candle
prevCandleHigh = iHigh(symb, PERIOD_CURRENT, 1);
prevCandleLow = iLow(symb, PERIOD_CURRENT, 1);
currentPrice = iClose(symb, PERIOD_CURRENT, 0);
candleClose = iLow(symb, PERIOD_CURRENT, 0);
//comm = "jaws " + (string)jaws + " teeth " + (string)teeth + " lips " + (string)lips + " sma " + (string)sma;
comm = "Trade alert on " + symb;
comm += "\n";
comm += "";
Notify(comm);
if(sma < currentPrice)
{
//Alert for bullish continuation signal
if(prevCandleHigh > jaws && prevCandleHigh > teeth && prevCandleHigh > lips)
{
if(prevCandleLow < jaws || prevCandleLow < teeth ||prevCandleLow < lips)
{
comm += "LONG CONTINUATION SIGNAL: Price above SMA just moves above Alligator. \n";
}
}
//Alert for bearish counter trend signal
if(lips > teeth && teeth > jaws)
{
if(candleClose < lips && candleClose < teeth && candleClose < jaws)
{
comm += "SHORT COUNTER TREND SIGNAL: Price above SMA moves below Alligator in a trending market \n";
}
}
}
if(sma > currentPrice)
{
//Alert for bearish continuation signal
if(prevCandleLow < jaws && prevCandleLow < teeth && prevCandleLow < lips)
{
if(prevCandleHigh > jaws || prevCandleHigh > teeth ||prevCandleHigh > lips)
{
comm += "SHORT CONTINUATION SIGNAL: Price below SMA just moves below Alligator. \n";
}
}
//Alert for bearish counter trend signal
if(lips < teeth && teeth < jaws)
{
if(candleClose > lips && candleClose > teeth && candleClose > jaws)
{
comm += "LONG COUNTER TREND SIGNAL: Price below SMA just closes above Alligator in a down trending market \n";
}
}
}
if(MQLInfoInteger(MQL_TESTER))
{
Comment(comm);
}
else
{
Notify(comm);
}
}
//+------------------------------------------------------------------+
void Notify(string message)
{
Print("Message sent ", message);
//SendNotification(message);
string headers;
string url = "https://api.telegram.org/bot5854676759:AAEGN1a1HQ-3uiVtv7FxEf7IXKrMATBzkQg/sendMessage?chat_id=-1001821417162&text="+message;
char data[],result[];
int res = WebRequest("GET",
url,
NULL,
NULL,
3000,
data,
0,
result,
headers
);
Print(CharArrayToString(result), " Res ", res, headers); // see the results
if(res==-1)
{
Print("Error in WebRequest. Error code =",GetLastError());
//--- Perhaps the URL is not listed, display a message about the necessity to add the address
MessageBox("Add the address '"+url+"' to the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION);
}
else
{
if(res==200)
{
//--- Successful download
Print("Telegran notification sent.");
}
}
}
//+------------------------------------------------------------------+
Binary file not shown.
+53
View File
@@ -0,0 +1,53 @@
//+------------------------------------------------------------------+
//| NYMidnightBreak.mq5 |
//| Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#include <Nkanven\NYMidnightBreak\Parameters.mqh> // EA paramters
#include <Nkanven\NYMidnightBreak\LotSizeCal.mqh> // Lot size calculator
#define SECONDSINADAY 86400
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
//--- The date is on Sunday
datetime time=D'2002.04.25 12:00';
string symbol="GBPUSD";
ENUM_TIMEFRAMES tf=PERIOD_H1;
bool exact=false;
//--- If there is no bar at the specified time, iBarShift will return the index of the nearest bar
int bar_index=iBarShift(symbol,tf,time,exact);
//--- Check the error code after the call of iBarShift()
datetime Midnight, StartOfNewYear;
Midnight = TimeCurrent() - ( TimeCurrent()%SECONDSINADAY ); // midnight today as a datetime
Print(" Hour ", dt.hour, " midnight " , Midnight);
}
//+------------------------------------------------------------------+
Binary file not shown.
+50
View File
@@ -0,0 +1,50 @@
//+------------------------------------------------------------------+
//| NewCandleAlert.mq5 |
//| Copyright 2022, Nkondog Anselme Venceslas. |
//| https://www.linkedin.com/in/nkondog |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, Nkondog Anselme Venceslas."
#property link "https://www.linkedin.com/in/nkondog"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
newBar();
}
//+------------------------------------------------------------------+
bool newBar()
{
static datetime prevTime = 0;
datetime currentTime = iTime(Symbol(), PERIOD_CURRENT, 0);
if(currentTime != prevTime)
{
prevTime = currentTime;
Alert("New candle");
return(true);
}
return(false);
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
+216
View File
@@ -0,0 +1,216 @@
//+------------------------------------------------------------------+
//| StarRiskCalculator.mq5 |
//| Copyright 2022, Nkondog Anselme Venceslas. |
//| https://www.linkedin.com/in/nkondog |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, Nkondog Anselme Venceslas."
#property link "https://www.linkedin.com/in/nkondog"
#property version "1.00"
//Parameters
MqlTick last_tick;
//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
RISK_BASE_INPUT=4, //INPUT BASE
};
//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
};
input ENUM_RISK_DEFAULT_SIZE InpRiskDefaultSize=RISK_DEFAULT_AUTO; //Position Size Mode
input double InpBalance=10000.0; //Balance
input double InpMaxLossPercent=4.0; //Max Account Risk %
input int InpLifeCount=20; //Number of losses
double InpDefaultLotSize=0.01; //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
double InpMinLotSize=0.01; //Minimum Position Size Allowed
double InpMaxLotSize=100; //Maximum Position Size Allowed
double RiskBaseAmount=0;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string Symb = Symbol();
string AccountCurr = AccountInfoString(ACCOUNT_CURRENCY);
double MaxRiskPerTrade=0.0; //Percentage To Risk Each Trade
double LotSize=InpDefaultLotSize;
double price=0.0;
double risk=0.0;
double StoplossPips=0.0;
double riskDiff=0.0;
double initialLoss=0.0;
double totalLoss=0.0;
double maxRiskPerLife=0.0;
//TickValue is the value of the individual price increment for 1 lot of the instrument, expressed in the account currenty
double TickValue=SymbolInfoDouble(Symb,SYMBOL_TRADE_TICK_VALUE);
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
Print("The Expert Advisor with name ",MQLInfoString(MQL_PROGRAM_NAME)," is running");
//--- enable object create events
ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_CREATE,true);
//--- enable object delete events
ChartSetInteger(ChartID(),CHART_EVENT_OBJECT_DELETE,true);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnTick()
{
LotSizeCalculate(price);
riskDiff = NormalizeDouble(RiskBaseAmount - InpBalance, 2);
initialLoss = (InpBalance * InpMaxLossPercent) / 100;
totalLoss = NormalizeDouble(riskDiff + initialLoss, 2);
maxRiskPerLife = NormalizeDouble(totalLoss /InpLifeCount, 2);
MaxRiskPerTrade = NormalizeDouble((maxRiskPerLife * 100) / RiskBaseAmount, 2);
Comment("Star Risk Calculator \nRiskDiff: " + riskDiff + " " + AccountCurr +"\nInitialLoss: " + initialLoss + " " + AccountCurr +"\nTotalLoss: " + totalLoss + " " + AccountCurr +"\nMaxRiskPerLife: " + maxRiskPerLife + " " + AccountCurr + "\nMaxRiskPerTrade: " + MaxRiskPerTrade +"%");
double StopAmount = StoplossPips * LotSize * TickValue;
string text ="Lot size for "+ MaxRiskPerTrade +"% = " + DoubleToString(LotSize,2) + " lot (" + NormalizeDouble(StopAmount, 2) + " " + AccountCurr + ")";
string name = "Lot";
string name2 = "risk";
ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0);
//ObjectSetText(name,text, 36, "Corbel Bold", YellowGreen);
ObjectSetInteger(0,name, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
ObjectSetInteger(0,name, OBJPROP_XDISTANCE, 550);
ObjectSetInteger(0,name, OBJPROP_YDISTANCE, 10);
ObjectSetString(0,name,OBJPROP_TEXT,text);
ObjectSetString(0,name,OBJPROP_FONT,"Arial");
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,14);
ObjectSetInteger(0,name,OBJPROP_COLOR,clrYellowGreen);
//LabelDelete(0, name);
}
//+------------------------------------------------------------------+
//| ChartEvent function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, // Event identifier
const long& lparam, // Event parameter of long type
const double& dparam, // Event parameter of double type
const string& sparam) // Event parameter of string type
{
//--- the object has been deleted
if(id==CHARTEVENT_OBJECT_DELETE)
{
Print("The object with name ",sparam," has been deleted");
}
//--- the object has been created
if(id==CHARTEVENT_OBJECT_CREATE)
{
Print("The object with name ",sparam," has been created");
}
//--- the object has been moved or its anchor point coordinates has been changed
if(id==CHARTEVENT_OBJECT_DRAG)
{
price = ObjectGetDouble(0, sparam, OBJPROP_PRICE, 0);
Print("The anchor point coordinates of the object with name ",sparam," has been changed. Price ", price);
}
}
//Lot Size Calculator
void LotSizeCalculate(double stopLoss)
{
SymbolInfoTick(_Symbol,last_tick);
double SL=0;
double PriceAsk=last_tick.ask;
double PriceBid=last_tick.bid;
if(stopLoss < PriceAsk)
{
SL = (PriceAsk-stopLoss)/_Point;
}
if(stopLoss > PriceAsk)
{
SL = (stopLoss-PriceBid)/_Point;
}
Print("Stop loss distance ", SL);
//If the position size is dynamic
if(InpRiskDefaultSize==RISK_DEFAULT_AUTO)
{
//If the stop loss is not zero then calculate the lot size
if(SL!=0)
{
//Define the base for the risk calculation depending on the parameter chosen
if(InpRiskBase==RISK_BASE_BALANCE)
RiskBaseAmount=AccountInfoDouble(ACCOUNT_BALANCE);
if(InpRiskBase==RISK_BASE_EQUITY)
RiskBaseAmount=AccountInfoDouble(ACCOUNT_EQUITY);
if(InpRiskBase==RISK_BASE_FREEMARGIN)
RiskBaseAmount=AccountInfoDouble(ACCOUNT_FREEMARGIN);
if(InpRiskBase==RISK_BASE_INPUT)
RiskBaseAmount=InpBalance;
//Calculate the Position Size
//Print("RiskBaseAmount ", RiskBaseAmount, " MaxRiskPerTrade ", InpMaxRiskPerTrade, "Stop loss ", SL, " TickValue ", TickValue);
LotSize=((RiskBaseAmount*MaxRiskPerTrade/100)/(SL*TickValue));
StoplossPips = SL;
}
//If the stop loss is zero then the lot size is the default one
if(SL==0)
{
LotSize=InpDefaultLotSize;
}
}
//Normalize the Lot Size to satisfy the allowed lot increment and minimum and maximum position size
LotSize=MathFloor(LotSize/SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP))*SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP);
//Limit the lot size in case it is greater than the maximum allowed by the user
if(LotSize>InpMaxLotSize)
LotSize=InpMaxLotSize;
//Limit the lot size in case it is greater than the maximum allowed by the broker
if(LotSize>SymbolInfoDouble(Symb,SYMBOL_VOLUME_MAX))
LotSize=SymbolInfoDouble(Symb,SYMBOL_VOLUME_MAX);
Print("Lot ", LotSize, " Max lot ", SymbolInfoDouble(Symb,SYMBOL_VOLUME_MAX));
//If the lot size is too small then set it to 0 and don't trade
if(LotSize < SymbolInfoDouble(Symb,SYMBOL_VOLUME_MIN))
{
LotSize=0;
Print("Lot size too small");
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Delete a text label |
//+------------------------------------------------------------------+
bool LabelDelete(const long chart_ID=0, // chart's ID
const string name="Label") // label name
{
//--- reset the error value
ResetLastError();
//--- delete the label
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": failed to delete a text label! Error code = ",GetLastError());
return(false);
}
//--- successful execution
return(true);
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+72
View File
@@ -0,0 +1,72 @@
//+------------------------------------------------------------------+
//| TheChallenger.mq5 |
//| Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
#include <Trade\Trade.mqh>
#include <Nkanven\TheChallenger\Parameters.mqh> //EA paramters
#include <Nkanven\TheChallenger\TradingHour.mqh> //Trading hours checks
#include <Nkanven\TheChallenger\Prechecks.mqh> //Trading conditions checks
#include <Nkanven\TheChallenger\ScanPositions.mqh> //Trading conditions checks
#include <Nkanven\TheChallenger\LotSizeCal.mqh> //Lot size calculator
#include <Nkanven\TheChallenger\EntriesManager.mqh> //Lot size calculator
#include <Nkanven\TheChallenger\CloseTransactions.mqh> //Emergency close of transaction
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
#include <Indicators/Oscilators.mqh>
CiATR* atr;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int OnInit()
{
//---
atr = new CiATR();
atr.Create(gSymbol, InpTimeFrame, InpAtrPeriod);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
TimeCurrent(dt);
SymbolInfoTick(_Symbol,last_tick);
CheckOperationHours();
CheckPreChecks();
ScanPositions();
//Get ATR values
atr.Refresh(-1);
gAtr = atr.Main(1);
if(!gIsPreChecksOk)
return;
if(InpActivateRiskWatcher)
{
drawdownWatcher();
CloseTransactions();
}
ExecuteEntry();
}
//+------------------------------------------------------------------+
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.