From 6b382485c8fa37c0213b91691f9639f042da3a21 Mon Sep 17 00:00:00 2001 From: "Nkondog A. Venceslas" Date: Sat, 26 Nov 2022 15:01:08 +0100 Subject: [PATCH] Done muzzling the alligator. Need to test telegram push notification on demo environment --- Experts/Nkanven/MuzzlingAlligatorWatcher.mq5 | 172 ++++++++++++++++++ ...er.ex5 => StarRiskCalculatorTrader-V2.ex5} | Bin LotCalTrader.ex4 | Bin 12928 -> 0 bytes 3 files changed, 172 insertions(+) create mode 100644 Experts/Nkanven/MuzzlingAlligatorWatcher.mq5 rename Experts/Nkanven/{StarRiskCalculatorTrader.ex5 => StarRiskCalculatorTrader-V2.ex5} (100%) delete mode 100644 LotCalTrader.ex4 diff --git a/Experts/Nkanven/MuzzlingAlligatorWatcher.mq5 b/Experts/Nkanven/MuzzlingAlligatorWatcher.mq5 new file mode 100644 index 0000000..afc6986 --- /dev/null +++ b/Experts/Nkanven/MuzzlingAlligatorWatcher.mq5 @@ -0,0 +1,172 @@ +//+------------------------------------------------------------------+ +//| 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 +#include + +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) + { +//--- + + } +//+------------------------------------------------------------------+ +//| 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 += ""; + + + 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"; + } + } + } + Notify(comm); + + } + +//+------------------------------------------------------------------+ +void Notify(string message) + { + + SendNotification(message); + + string headers; + string url = "https://api.telegram.org/bot1203586996:AAF3GTCy2yVyvXsCjd9pODhJncTUG7NcOKw/sendMessage?chat_id=-457969372&text="+message; + char data[],result[]; + + int res = WebRequest("GET", + url, + NULL, + NULL, + 3000, + data, + 0, + result, + headers + ); +//Print(CharArrayToString(result)); // 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."); + } + } + } +//+------------------------------------------------------------------+ diff --git a/Experts/Nkanven/StarRiskCalculatorTrader.ex5 b/Experts/Nkanven/StarRiskCalculatorTrader-V2.ex5 similarity index 100% rename from Experts/Nkanven/StarRiskCalculatorTrader.ex5 rename to Experts/Nkanven/StarRiskCalculatorTrader-V2.ex5 diff --git a/LotCalTrader.ex4 b/LotCalTrader.ex4 deleted file mode 100644 index f5f2f1cf23cad5cce798fdea194fc1d8b4fa0156..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12928 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