Create symbolic link to all MT platform for easy manipulation

This commit is contained in:
Nkondog A. Venceslas
2022-11-28 16:27:15 +01:00
parent cbb412a720
commit a70da4fc29
11 changed files with 433 additions and 0 deletions
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.
+236
View File
@@ -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.");
}
//+------------------------------------------------------------------+
+71
View File
@@ -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);
}
//+------------------------------------------------------------------+