//+------------------------------------------------------------------+
//|                                                   Parameters.mqh |
//|                        Copyright 2021, Nkondog Anselme Venceslas |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, Nkondog Anselme Venceslas"
#property link      "https://www.mql5.com"

//Enumerative for the entry signal value
enum ENUM_SIGNAL_ENTRY
  {
   SIGNAL_ENTRY_NEUTRAL=0,    //SIGNAL ENTRY NEUTRAL
   SIGNAL_ENTRY_ENTER=1,        //SIGNAL PENDING BUY/SELL
  };

//Enumerative for the exit signal value
enum ENUM_SIGNAL_EXIT
  {
   SIGNAL_EXIT_NEUTRAL=0,     //SIGNAL EXIT NEUTRAL
   SIGNAL_EXIT_BUY=1,         //SIGNAL EXIT BUY
   SIGNAL_EXIT_SELL=-1,       //SIGNAL EXIT SELL
   SIGNAL_EXIT_ALL=2,         //SIGNAL EXIT ALL
  };

//Enumerative for the allowed trading direction
enum ENUM_TRADING_ALLOW_DIRECTION
  {
   TRADING_ALLOW_BOTH=0,      //ALLOW BOTH BUY AND SELL
   TRADING_ALLOW_BUY=1,       //ALLOW BUY ONLY
   TRADING_ALLOW_SELL=-1,     //ALLOW SELL ONLY
  };

//Enumerative for the base used for risk calculation
enum ENUM_RISK_BASE
  {
   RISK_BASE_EQUITY=1,        //EQUITY
   RISK_BASE_BALANCE=2,       //BALANCE
   RISK_BASE_FREEMARGIN=3,    //FREE MARGIN
  };

//Enumerative for the default risk size
enum ENUM_RISK_DEFAULT_SIZE
  {
   RISK_DEFAULT_FIXED=1,      //FIXED SIZE
   RISK_DEFAULT_AUTO=2,       //AUTOMATIC SIZE BASED ON RISK
  };

//Enumerative for the Stop Loss mode
enum ENUM_MODE_SL
  {
   SL_FIXED=0,                //FIXED STOP LOSS
   SL_AUTO=1,                 //AUTOMATIC STOP LOSS
  };

//Enumerative for the Take Profit Mode
enum ENUM_MODE_TP
  {
   TP_FIXED=0,                //FIXED TAKE PROFIT
   TP_AUTO=1,                 //AUTOMATIC TAKE PROFIT
  };

//Enumerative for the stop loss calculation
enum ENUM_MODE_SL_BY
  {
   SL_BY_POINTS=0,            //STOP LOSS PASSED IN POINTS
   SL_BY_PRICE=1,             //STOP LOSS PASSED BY PRICE
  };

//Enumerative for candle type
enum ENUM_CANDLE_TYPE
  {
   NEUTRAL_CANDLE=0,
   BEARISH_CANDLE=1,
   BULLISH_CANDLE=2,
  };

//Enumerative for price momentum
enum  ENUM_PRICE_MOMENTUM
  {
   UP=2,
   DOWN=1,
   NEUTRAL=0,
  };

struct LastTransaction
  {
   string            time;
   int               type;
   double            profit;
  } lt;

//
//	Input Section
//
//	Fast moving average
input	int	InpFastPeriods								=	10;	//	Fast periods
input	ENUM_MA_METHOD	InpFastMethod					=	MODE_SMA;	//	Fast method
input	ENUM_APPLIED_PRICE	InpFastAppliedPrice	=	PRICE_CLOSE;	// Fast price

//	Slow moving average
input	int	InpSlowPeriods								=	20;	//	Slow periods
input	ENUM_MA_METHOD	InpSlowMethod					=	MODE_SMA;	//	Slow method
input	ENUM_APPLIED_PRICE	InpSlowAppliedPrice	=	PRICE_CLOSE;	// Slow price

input int   InpAtrPeriod                        = 14;    // ATR period
//	Bar numbers for comparison
//input	int	InpBar2									=	2;	   //	Base bar number
//input	int	InpBar1									=	1;	   //	Crossover bar number

input string Comment_0="==========";                                 //Risk Management Settings
input ENUM_RISK_DEFAULT_SIZE 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 InpMinLotSize=0.01;                                        //Minimum Position Size Allowed
input double InpMaxLotSize=100;                                         //Maximum Position Size Allowed
input int InpMaxSpread=20;                                         //Maximum Spread Allowed
input int InpSlippage=5;                                                //Maximum Slippage Allowed in points
input ENUM_MODE_SL InpStopLossMode=SL_AUTO;                            //Stop Loss Mode
input int InpDefaultStopLoss=0;                                         //Default Stop Loss In Points (0=No Stop Loss)
input int InpMinStopLoss=0;                                             //Minimum Allowed Stop Loss In Points
input int InpMaxStopLoss=5000;                                          //Maximum Allowed Stop Loss In Points
input bool InpAtrStopLoss=false;                                        //Set Stop loss based on ATR
input int InpAtrStopLossFactor=3;                                           //Multiplicator for ATR stop loss
input ENUM_MODE_TP InpTakeProfitMode=TP_AUTO;                              //Take Profit Mode
input int InpDefaultTakeProfit=0;                                       //Default Take Profit In Points (0=No Take Profit)
input int InpMinTakeProfit=0;                                           //Minimum Allowed Take Profit In Points
input int InpMaxTakeProfit=5000;                                        //Maximum Allowed Take Profit In Points
input double InpTakeProfitPercent=1.0;                                  //Take Profit percent on risk base

// Trading time
input int  InStartHour                          =  12;    // Trading starting hour
input int  InStartMin                           =  30;    // Trading starting minute
input int  InEndHour                            =  12;    // Trading starting hour
input int  InEndMin                             =  30;    // Trading starting minute

//
//	Some standard inputs,
//		remember to change the default magic for each EA
//
input	double	InpVolume		=	0.01;			//	Default order size
input	string	InpComment		=	__FILE__;	//	Default trade comment
input	int		InpMagicNumber	=	198901;	   //	Magic Number

input string Comment_1="==========";                      //Trading Hours Settings
input bool InpUseTradingHours=false;                      //Limit Trading Hours
input string InpTradingHourStart="01";                    //Trading Start Hour (Broker Server Hour)
input string InpTradingHourEnd="23";                      //Trading End Hour (Broker Server Hour)
input string InpTradingStartMin="30";                     //Trading Start minute (Broker Server Hour)
input string InpTradingEndMin="00";                       //Trading End minute

bool gIsNewCandle=false;
bool gIsTradedThisBar=false;
bool gIsOperatingHours=false;
bool gIsPreChecksOk=false;                 //Indicates if the pre checks are satisfied
bool gIsSpreadOK=false;                    //Indicates if the spread is low enough to trade

double gLotSize=InpDefaultLotSize;
int gTickValue=0;

int gTotalOpenBuy=0;
int gTotalOpenSell=0;
int gTotalOpenOrders=0;
int gOrderOpRetry=5;
double gBuyStopLossPrice;
double gSellStopLossPrice;
double gBuyEntryPrice;
double gSellEntryPrice;

string gSymbol = Symbol();

datetime gLastBarTraded=NULL;

double gFsma, gSsma;
double LotSize=0;

MqlTick last_tick;
MqlDateTime dt;

ENUM_SIGNAL_ENTRY gSignalEntry=SIGNAL_ENTRY_NEUTRAL;      //Entry signal variable
ENUM_SIGNAL_EXIT gSignalExit=SIGNAL_EXIT_NEUTRAL;