mirror of
https://github.com/rithsila/MT5-EA-Sniper-Strategy.git
synced 2026-08-15 19:58:12 +00:00
Create symbolic link to all MT platform for easy manipulation
This commit is contained in:
Binary file not shown.
@@ -0,0 +1,126 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| MuzzlingAlligatorWatcher.mq4 |
|
||||
//| Copyright 2022, Nkondog Anselme Venceslas. |
|
||||
//| https://www.linkedin.com/in/nkondog |
|
||||
//+------------------------------------------------------------------+
|
||||
#property copyright "Copyright 2022, Nkondog Anselme Venceslas."
|
||||
#property link "ttps://www.linkedin.com/in/nkondog"
|
||||
#property version "1.00"
|
||||
#property strict
|
||||
|
||||
#include <Lib/Navlib.mqh>
|
||||
//+------------------------------------------------------------------+
|
||||
//| Expert initialization function |
|
||||
//+------------------------------------------------------------------+
|
||||
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, candleClose;
|
||||
string comm = "";
|
||||
|
||||
int OnInit()
|
||||
{
|
||||
//---
|
||||
|
||||
//---
|
||||
return(INIT_SUCCEEDED);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| Expert deinitialization function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnDeinit(const int reason)
|
||||
{
|
||||
//---
|
||||
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| Expert tick function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnTick()
|
||||
{
|
||||
//---
|
||||
if(!newCandle())
|
||||
return;
|
||||
|
||||
jaws=iAlligator(NULL,0,inpJawsPeriod,inpJawsShift,inpTeethPeriod,inpTeethShift,inpLipsPeriod,inpLipsShift,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0);
|
||||
teeth=iAlligator(NULL,0,inpJawsPeriod,inpJawsShift,inpTeethPeriod,inpTeethShift,inpLipsPeriod,inpLipsShift,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0);
|
||||
lips=iAlligator(NULL,0,inpJawsPeriod,inpJawsShift,inpTeethPeriod,inpTeethShift,inpLipsPeriod,inpLipsShift,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0);
|
||||
|
||||
sma = iMA(NULL,0,inpMAPeriod,inpMASHift,inpMAMethod,inpMAApplyedTo,1);
|
||||
Print(" Jaws ", jaws, " teeth ", teeth, " lips ", lips, " sma ", sma);
|
||||
|
||||
//Get previous candle
|
||||
prevCandleHigh = iHigh(NULL, PERIOD_CURRENT, 1);
|
||||
prevCandleLow = iLow(NULL, PERIOD_CURRENT, 1);
|
||||
currentPrice = iClose(NULL, PERIOD_CURRENT, 0);
|
||||
candleClose = iLow(NULL, PERIOD_CURRENT, 0);
|
||||
|
||||
//comm = "jaws " + (string)jaws + " teeth " + (string)teeth + " lips " + (string)lips + " sma " + (string)sma;
|
||||
comm = "Trade alert on " + Symbol();
|
||||
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";
|
||||
Notify(comm);
|
||||
}
|
||||
}
|
||||
|
||||
//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";
|
||||
Notify(comm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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";
|
||||
Notify(comm);
|
||||
}
|
||||
}
|
||||
|
||||
//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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
Binary file not shown.
@@ -0,0 +1,236 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| Telegram2MT4.mq4 |
|
||||
//| 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"
|
||||
#property strict
|
||||
//+------------------------------------------------------------------+
|
||||
//| Expert initialization function |
|
||||
//+------------------------------------------------------------------+
|
||||
enum ENUM_RISK_DEFAULT
|
||||
{
|
||||
RISK_DEFAULT_FIXED = 1,
|
||||
RISK_DEFAULT_AUTO = 2,
|
||||
|
||||
};
|
||||
|
||||
input ENUM_RISK_DEFAULT inpRiskDefault = RISK_DEFAULT_FIXED; //Lot sizing mode
|
||||
|
||||
input double inpDefaultLotSize = 0.01; //Default lot
|
||||
input double inpRiskPercent = 0.1; //Risk percentage
|
||||
input double inpMaxLotSize = 10; //Max lot
|
||||
input int inpMaxSlippage = 3; //Max slippage
|
||||
input int inpMagicNumber = 1987; //Magic number
|
||||
input string inpSymbolPrefix = ""; //Symbol prefix
|
||||
input string inpSymbolSuffix = ""; //Symbol suffix
|
||||
|
||||
double vbid,vask,vpoint;
|
||||
int vdigits, vspread;
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
int OnInit()
|
||||
{
|
||||
//---
|
||||
checkForPermissions();
|
||||
//---
|
||||
return(INIT_SUCCEEDED);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| Expert deinitialization function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnDeinit(const int reason)
|
||||
{
|
||||
//---
|
||||
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//| Expert tick function |
|
||||
//+------------------------------------------------------------------+
|
||||
void OnTick()
|
||||
{
|
||||
//---
|
||||
//read file writen by TelegramReader
|
||||
readTelegramFile();
|
||||
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
void readTelegramFile()
|
||||
{
|
||||
|
||||
//--- open the file
|
||||
string fileName = "order.bin";
|
||||
ResetLastError();
|
||||
string table[];
|
||||
|
||||
int file_handle=FileOpen("Telegramreader"+"//"+fileName,FILE_READ|FILE_ANSI, " ");
|
||||
if(file_handle!=INVALID_HANDLE)
|
||||
{
|
||||
PrintFormat("%s file is available for reading",fileName);
|
||||
PrintFormat("File path: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
|
||||
//--- additional variables
|
||||
int str_size;
|
||||
string str;
|
||||
int i = 0;
|
||||
//--- read data from the file
|
||||
while(!FileIsEnding(file_handle))
|
||||
{
|
||||
//--- find out how many symbols are used for writing the time
|
||||
str_size=FileReadInteger(file_handle,INT_VALUE);
|
||||
//--- read the string
|
||||
str=FileReadString(file_handle,str_size);
|
||||
|
||||
//--- print the string
|
||||
Print("i" + i + " " + str);
|
||||
ArrayResize(table, ArraySize(table) + 1);
|
||||
table[i] = str;
|
||||
i += 1;
|
||||
}
|
||||
//--- close the file
|
||||
FileClose(file_handle);
|
||||
//PrintFormat("Data is read, %s file is closed",fileName);
|
||||
FileDelete("Telegramreader"+"//"+fileName);
|
||||
|
||||
sendOrder(table[2], table[0], table[1], NormalizeDouble(table[3], Digits), NormalizeDouble(table[4], Digits), NormalizeDouble(table[5], Digits));
|
||||
}
|
||||
}
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
void sendOrder(string type, string direction, string symbol, double entryPrice, double takeProfit, double stopLoss)
|
||||
{
|
||||
int ticket = 0;
|
||||
symbol = inpSymbolPrefix+symbol+inpSymbolSuffix;
|
||||
double lotSize;
|
||||
|
||||
vbid = MarketInfo(symbol,MODE_BID);
|
||||
vask = MarketInfo(symbol,MODE_ASK);
|
||||
vpoint = MarketInfo(symbol,MODE_POINT);
|
||||
vdigits = (int)MarketInfo(symbol,MODE_DIGITS);
|
||||
vspread = (int)MarketInfo(symbol,MODE_SPREAD);
|
||||
|
||||
Print(type, direction, symbol, entryPrice, takeProfit, stopLoss);
|
||||
if(type == "NOW")
|
||||
{
|
||||
if(direction == "BUY")
|
||||
{
|
||||
lotSize = LotSizeCalculate(OP_BUY, stopLoss, symbol, vpoint);
|
||||
Print("Lot size ", lotSize);
|
||||
|
||||
ticket=OrderSend(symbol,OP_BUY,lotSize,vask,inpMaxSlippage, stopLoss,takeProfit,"Trade from eInvestors",inpMagicNumber,0,Green);
|
||||
}
|
||||
|
||||
if(direction == "SELL")
|
||||
{
|
||||
|
||||
lotSize = LotSizeCalculate(OP_SELL, stopLoss, symbol, vpoint);
|
||||
Print("Lot size ", lotSize);
|
||||
|
||||
ticket=OrderSend(symbol,OP_SELL,lotSize,vbid,inpMaxSlippage, stopLoss,takeProfit,"Trade from eInvestors",inpMagicNumber,0,Green);
|
||||
}
|
||||
|
||||
if(ticket>0)
|
||||
{
|
||||
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
|
||||
Print("BUY order opened : ",OrderOpenPrice());
|
||||
}
|
||||
else
|
||||
Print("Error opening BUY order : ",GetLastError());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
//+------------------------------------------------------------------+
|
||||
//| Compute lot size function |
|
||||
//+------------------------------------------------------------------+
|
||||
double LotSizeCalculate(int ordertype, double stoploss, string symbol, double vpoint)
|
||||
{
|
||||
|
||||
double tickValue = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE);
|
||||
double riskBaseAmount;
|
||||
double lotSize = 0;
|
||||
double SL = 0;
|
||||
|
||||
if(stoploss > 0)
|
||||
{
|
||||
if(ordertype == OP_BUY)
|
||||
{
|
||||
SL = (vask-stoploss)/vpoint;
|
||||
}
|
||||
else
|
||||
if(ordertype == OP_SELL)
|
||||
{
|
||||
SL = (stoploss-vbid)/vpoint;
|
||||
}
|
||||
}
|
||||
//Print("SL ", SL, " risk base ", AccountInfoDouble(ACCOUNT_BALANCE), "tick value ", tickValue);
|
||||
Print("if statement ", SL != 0 && inpRiskDefault == RISK_DEFAULT_AUTO);
|
||||
if(SL != 0 && inpRiskDefault == RISK_DEFAULT_AUTO)
|
||||
{
|
||||
riskBaseAmount = AccountInfoDouble(ACCOUNT_BALANCE);
|
||||
lotSize = ((riskBaseAmount*inpRiskPercent/100)/(SL*tickValue));
|
||||
}
|
||||
else
|
||||
{
|
||||
lotSize = inpDefaultLotSize;
|
||||
}
|
||||
|
||||
lotSize = MathFloor(lotSize/SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP))*SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
|
||||
|
||||
if(lotSize > inpMaxLotSize)
|
||||
{
|
||||
lotSize = inpMaxLotSize;
|
||||
}
|
||||
|
||||
if(lotSize > SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX))
|
||||
{
|
||||
lotSize = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
|
||||
}
|
||||
|
||||
if(lotSize < SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN))
|
||||
{
|
||||
lotSize = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
|
||||
}
|
||||
|
||||
return lotSize;
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
void checkForPermissions()
|
||||
{
|
||||
|
||||
if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
|
||||
Alert("Check if automated trading is allowed in the terminal settings!");
|
||||
|
||||
if(!TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
|
||||
Alert("Check if automated trading is allowed in the terminal settings!");
|
||||
else
|
||||
{
|
||||
if(!MQLInfoInteger(MQL_TRADE_ALLOWED))
|
||||
Alert("Automated trading is forbidden in the program settings for ",__FILE__);
|
||||
}
|
||||
|
||||
if(!AccountInfoInteger(ACCOUNT_TRADE_EXPERT))
|
||||
Alert("Automated trading is forbidden for the account ",AccountInfoInteger(ACCOUNT_LOGIN),
|
||||
" at the trade server side");
|
||||
|
||||
if(!AccountInfoInteger(ACCOUNT_TRADE_ALLOWED))
|
||||
Comment("Trading is forbidden for the account ",AccountInfoInteger(ACCOUNT_LOGIN),
|
||||
".\n Perhaps an investor password has been used to connect to the trading account.",
|
||||
"\n Check the terminal journal for the following entry:",
|
||||
"\n\'",AccountInfoInteger(ACCOUNT_LOGIN),"\': trading has been disabled - investor mode.");
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
@@ -0,0 +1,71 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| Navlib.mqh |
|
||||
//| Copyright 2022, MetaQuotes Software Corp. |
|
||||
//| https://www.mql5.com |
|
||||
//+------------------------------------------------------------------+
|
||||
#property copyright "Copyright 2022, MetaQuotes Software Corp."
|
||||
#property link "https://www.mql5.com"
|
||||
#property strict
|
||||
|
||||
void Notify(string message)
|
||||
{
|
||||
Print("Message sent ", message);
|
||||
|
||||
if(!IsTesting())
|
||||
{
|
||||
|
||||
//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.");
|
||||
}
|
||||
}
|
||||
} else
|
||||
{
|
||||
Comment(message);
|
||||
}
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| |
|
||||
//+------------------------------------------------------------------+
|
||||
bool newCandle()
|
||||
{
|
||||
static datetime prevTime = 0;
|
||||
datetime currentTime = iTime(Symbol(), PERIOD_CURRENT, 0);
|
||||
if(currentTime != prevTime)
|
||||
{
|
||||
prevTime = currentTime;
|
||||
|
||||
return(true);
|
||||
}
|
||||
return(false);
|
||||
}
|
||||
//+------------------------------------------------------------------+
|
||||
Reference in New Issue
Block a user