//+------------------------------------------------------------------+
//| Keltner_Channel_Counter.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #include<Trade.mqh> //#include<Risk_Management.mqh> //#include<Trade_Manager.mqh> //EA general input parameters input int MA_Period1 = 15; //First Keltner Channel Period input int MA_Period2 = 90; //Second Keltner Channel Peiod //General input Parameters input string Comments = "KCC"; //EA Order Comment input int StopLoss = 10; //StopLoss in pips input int TakeProfit = 145; //TakeProfit in Pips input int EA_Magic = 4356; //EA_Magic number input double Lotsize = 0.05; //Lotsize input int Slippage = 50; //Slippage //Breakeven input variables input bool UseBreakEven = true; //Use Break Even input int WhenToBreak = 10; //When to break even in pips? input int BreakBy = 15; //Break Even by how many pips? //Trailing Stop input variables input bool UseTrailing = true; //Use Trailing Stop input int WhenToTrail = 25; // When to start Trailing in pips? input int TrailBy = 55; //Trailing Stop in Pips //Money Management input variables input bool Used_Money_Management = true; input double Funds_To_Use; //Funds to Use for Lot Calculation input double MM_Type; //Type of Money Management input double ATR_Multiplier = 1 ; //ATR Multiplier input double Fixed_Balance = 1000; //Fixed Balance in account currency input double Fixed_RiskMoney = 20; //Fixed Risk Money input double Percentage_risk = 5; //Percentage of Funds to Risk //EA intermediate calculations variables double STP, TKP; ulong LastBars = 0; double Ask, Bid; //Indicator handles int KCHandle1; int KCHandle2; //Indicator Buffers double KC_Upper1[]; double KC_Lower1[]; double KC_Middle1[]; double KC_Upper2[]; double KC_Lower2[]; double KC_Middle2[]; double ClosePrice[]; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //....Initializing the Trade Class Object //.....Initializing the Indicator Handles KCHandle1 = iCustom(_Symbol,PERIOD_CURRENT,"Keltner_Channel", MA_Period1); KCHandle2 = iCustom(_Symbol, PERIOD_CURRENT, "Keltner_Channel", MA_Period2); //Convert the Pips value into Point value STP = StopLoss*_Point*10; TKP = TakeProfit*_Point* 10; //...Resizing the Close Price array ArrayResize(ClosePrice, 3); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { return; } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //---Check if we are able to trade if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) || !TerminalInfoInteger(TERMINAL_CONNECTED)) { Alert("Terminal not connected or Trading not allowed!"); } //...Check if we have a new bar ulong bars = Bars(_Symbol, PERIOD_CURRENT); if(LastBars != bars) { LastBars = bars; return; } //...Obtaining Ask price and Bid Price Ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK); Bid = SymbolInfoDouble(_Symbol, SYMBOL_BID); //...Obtaining the Closing Price of the Previous Candlestick MqlRates rates[]; //Reversing the ordering of information in our Arrays ArraySetAsSeries(KC_Upper1, true); ArraySetAsSeries(KC_Upper2, true); ArraySetAsSeries(KC_Lower1, true); ArraySetAsSeries(KC_Lower2, true); ArraySetAsSeries(KC_Middle1, true); ArraySetAsSeries(KC_Middle2, true); ArraySetAsSeries(rates, true); ArraySetAsSeries(ClosePrice, true); //...Checking and Copying Prices into the Rates Object if(CopyRates(Symbol(), PERIOD_CURRENT, 0, 3, rates) != 3) { Print("Error Copying Price Data", GetLastError()); return; } //Copying price data from the Rates Object to the Close Price Array for(int i = 0; i < 3; i++) { ClosePrice[i]= rates[i].close; } //Checking and Copying Indicator Values if(CopyBuffer(KCHandle1, 2, 0, 3, KC_Lower1) != 3 || CopyBuffer(KCHandle1, 0, 0, 3, KC_Upper1) != 3 || CopyBuffer(KCHandle1, 1, 0, 3, KC_Middle1) != 3) { Print("Error Copying Indicator Data"==(string) GetLastError()); return; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if(CopyBuffer(KCHandle2, 2, 0, 3, KC_Lower2) != 3 || CopyBuffer(KCHandle2, 0, 0, 3, KC_Upper2) != 3|| CopyBuffer(KCHandle2, 1, 0, 3, KC_Middle2) != 3) { { Print("Error Copying Indicator Data", GetLastError()); return; } } //Declaring switches for market entry signals bool BuyCondition = false; bool SellCondition = false; bool BullTrend = false; bool BearTrend = false; bool TradeOpen = false; //Checking if we have an open position in the market if(DealsOpen()!=0) { TradeOpen = true; } if(UseBreakEven) { BreakEven(EA_Magic, _Symbol, WhenToBreak, BreakBy); } if(UseTrailing) { TrailingStopLoss(EA_Magic, _Symbol, WhenToTrail, TrailBy); } uint total =0; uint position_ID=0; if(PositionSelect(_Symbol)) { if(PositionGetInteger(POSITION_MAGIC)== EA_Magic) { { position_ID = (ENUM_POSITION_PROPERTY_INTEGER)PositionGetInteger(POSITION_IDENTIFIER); if(HistorySelectByPosition(position_ID)) { total = HistoryDealsTotal(); return; } } } } //Setting Conditions Trends if((KC_Upper1[1] > KC_Lower2[1]) && (KC_Lower1[1] < KC_Upper2[1])) { BullTrend = true; } if((KC_Lower1[1] < KC_Lower2[1]) && (KC_Upper1[1] > KC_Lower2[1])) { BearTrend = true; } //Sell entry condition if((ClosePrice[1] < KC_Lower1[1]) && (ClosePrice[2] > KC_Lower1[1]) && (ClosePrice[2] > KC_Lower1[2])) { SellCondition = true; } //Buy entry Conditions if((ClosePrice[1] > KC_Upper1[1]) && (ClosePrice[2] < KC_Upper1[1]) && (ClosePrice[2] < KC_Lower1[2])) { BuyCondition = true; } //Obtaining the value of our lotsize double UsedLots; if(Used_Money_Management) { UsedLots = MoneyManagement(Funds_To_Use, MM_Type, STP, ATR_Multiplier, Fixed_Balance, Fixed_RiskMoney, Percentage_risk); } else UsedLots = Lotsize; //Executing a Buy Trade if(!TradeOpen) { if(BullTrend) { if(BuyCondition) { fBuy(UsedLots); } } } //Executing a Sell Trade if(!TradeOpen) { if(BearTrend) { if(SellCondition) { fSell(UsedLots); } } } if(PositionSelect(_Symbol)) { if(PositionGetInteger(POSITION_MAGIC)== EA_Magic) { { position_ID = (ENUM_POSITION_PROPERTY_INTEGER)PositionGetInteger(POSITION_IDENTIFIER); if(HistorySelectByPosition(position_ID)) { total = HistoryDealsTotal(); return; } } } } return; } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ uint DealsOpen() { uint total = 0; return(total); } double BreakEven(int EAMagic, string symbol, bool When_To_Break, bool Break_By) {return(0);} //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double TrailingStopLoss(int EAMagic, string symbol,bool WhenTo_Trail, bool Trail_By) {return(0);} //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double MoneyManagement(double FundsToUse, double MMType, double stp, double ATRMultiplier, bool FixedBalance, double FixedRiskMoney, double Percentagerisk) {return(0);} //+------------------------------------------------------------------+ double fBuy(double Lot_size){return(0);} double fSell(double Lot_size){return(0);}
You need to complete the five empty functions at the end of the code.
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register