//+------------------------------------------------------------------+ //| ent-testing.mq5 | //| Entr04y | //| https://www.mql5.com | //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ //Include Functions #include CTrade *Trade; #include "ProcessTrades.mqh" #include "indicator_includes/MacdSignal.mqh" //Setup Variables input int InpMagicNumber = 4200001; input string InpTradeComment = __FILE__; input ENUM_APPLIED_PRICE InpAppliedPrice = PRICE_CLOSE; //Global Variables int TicksReceivedCount = 0; int TicksProcessedCount = 0; static datetime TimeLastTickProcessed; string indicatorMetrics = ""; // reset metrics variable for each onTick //+------------------------------------------------------------------+ //| Set up Indicators | //+------------------------------------------------------------------+ // Define types for indicator function pointers, this allows us to use a variable name to call the function typedef string (*C1_Func)(int); typedef int (*C1_Handle)(); typedef string (*C2_Func)(int); typedef int (*C2_Handle)(); // Set the specific function names from the include file to the generic variable name // C1 Variables C1_Func C1GetOpenSignal = GetMacdOpenSignal; C1_Handle C1IndicatorHandle = MacdIndicatorHandler; // Create a variable to hold the handler for the C1 indicator int HandleC1; // C2 variables //C2_Func C1GetOpenSignal = GetRSIOpenSignal; //C2_Handle C1IndicatorHandle = RSIIndicatorHandler; // Create a variable to hold the handle for the C1 indicator //int HandleC2; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- // Declare Magic Number for all trades Trade = new CTrade(); Trade.SetExpertMagicNumber(InpMagicNumber); // set up handle for macd indicator HandleC1 = C1IndicatorHandle(); Print("Handle for C1 /", Symbol(), " / ", EnumToString(Period()), " sucessfully created"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- IndicatorRelease(HandleC1); Print("Handle Released"); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- TicksReceivedCount++; bool IsNewCandle = false; if(TimeLastTickProcessed != iTime(Symbol(),Period(), 0)) { IsNewCandle = true; TimeLastTickProcessed = iTime(Symbol(),Period(), 0); } if(IsNewCandle == true) { //---Strategy Trigger MACD---/// TicksProcessedCount++; indicatorMetrics = ""; string OpenSignalC1 = C1GetOpenSignal(HandleC1); StringConcatenate(indicatorMetrics, Symbol(), " | Last Processed: ", TimeLastTickProcessed, " | MACD Bias: ", OpenSignalC1); //---Enter Trades---// if(OpenSignalC1 == "Long") { ProcessTradeOpen(ORDER_TYPE_BUY); } else if(OpenSignalC1 == "Short") { ProcessTradeOpen(ORDER_TYPE_SELL); } } Comment("\n\rExpert: ", InpMagicNumber, "\n\r", "MT5 Server Time: ", TimeCurrent(), "\n\r\n\r", "Ticks Received: ", TicksReceivedCount, "\n\r", "Ticks Processed: ", TicksProcessedCount, "\n\r\n\r", "Symbols Traded: \n\r", Symbol(), indicatorMetrics); } //+------------------------------------------------------------------+