This script, named "e-Friday.mq4", is designed to automatically trade on the MetaTrader platform based on a strategy related to Fridays.
Here's a breakdown of what it does, without getting technical:
1. Setup & Configuration:
- The script has a set of settings you, as the user, can adjust. These include:
- Trading Parameters: How much to trade (Lots), how much risk to take (Stop Loss), and how much profit to target (Take Profit). It also sets the specific hour of Friday to open the positions.
- Friday Trading Logic: It will open a BUY order if the previous day closed higher than it opened, and vice versa for SELL orders.
- Position Management: Settings that determine when and how the script closes the position including a specific hour on Friday and if profit protection (Trailing Stop) should be used.
- Script Settings: This covers whether the script only trades on a specific account, the name of the script (for identification), if sound alerts are enabled, and color settings for visual cues on the chart.
2. Trading Hours:
- The script only operates on Fridays. It checks the current day and time to make sure it's within the hours you've defined as the trading period.
3. Opening a Position (Buy or Sell):
- At the set opening hour on Friday, the script does the following:
- If there are no open positions already, it looks at the price movement of the previous day.
- If the previous day's closing price was higher than its opening price, it places a Buy order (betting the price will go up).
- If the previous day's closing price was lower than its opening price, it places a Sell order (betting the price will go down).
- It sets a "Stop Loss" (an automatic closing price to limit potential losses) and a "Take Profit" (an automatic closing price to secure profits).
4. Closing Positions:
- If you've enabled it, at the set closing hour on Friday, the script will automatically close any open positions. It closes them at the current market price.
5. Trailing Stop (Profit Protection):
- If you've enabled the "Trailing Stop" feature, the script will automatically adjust the "Stop Loss" level as the price moves in your favor. This helps to lock in profits and protect against sudden price reversals. The amount of movement required to adjust the Stop Loss, the 'Trailing Stop', is also set in the parameters. The Profit Trailing parameter determines if this only occurs when the trade is in profit.
6. Important Checks:
- Before doing anything, the script checks if it's allowed to trade on the current account (if you've specified a specific account number). It also checks if it's running in a testing mode versus real trading mode, and adjusts its messages accordingly.
In simple terms: This script is an automated system that aims to exploit potential price tendencies that might occur on Fridays. It enters trades at a specific time of day on Friday based on the prior day's price direction, tries to protect the trading positions as they move into profit, and automatically closes the positions at a later specified time on Friday. You control the risk level, the potential profit target, the times for entering and exiting, and other aspects through the script's settings.
//+------------------------------------------------------------------+
//| e-Friday.mq4 |
//| Êèì Èãîðü Â. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 08.10.2005 Ýôôåêò ïÿòíèöû |
//+------------------------------------------------------------------+
#property copyright "Êèì Èãîðü Â. aka KimIV"
#property link "http://www.kimiv.ru"
#define MAGIC 20051008
//------- Âíåøíèå ïàðàìåòðû ñîâåòíèêà --------------------------------
extern string _Parameters_Trade = "----- Ïàðàìåòðû òîðãîâëè";
extern double Lots = 0.1; // Ðàçìåð òîðãóåìîãî ëîòà
extern int StopLoss = 75; // Ðàçìåð ôèêñèðîâàííîãî ñòîïà
extern int TakeProfit = 0; // Ðàçìåð ôèêñèðîâàííîãî òýéêà
extern int HourOpenPos = 7; // Âðåìÿ îòêðûòèÿ ïîçèöèè
extern bool UseClosePos = True; // Èñïîëüçîâàòü çàêðûòèå ïîçèöèè
extern int HourClosePos = 19; // Âðåìÿ çàêðûòèÿ ïîçèöèè
extern bool UseTrailing = True; // Èñïîëüçîâàòü òðàë
extern bool ProfitTrailing = True; // Òðàëèòü òîëüêî ïðîôèò
extern int TrailingStop = 60; // Ôèêñèðîâàííûé ðàçìåð òðàëà
extern int TrailingStep = 5; // Øàã òðàëà
extern int Slippage = 3; // Ïðîñêàëüçûâàíèå öåíû
extern string _Parameters_Expert = "----- Ïàðàìåòðû ñîâåòíèêà";
extern bool UseOneAccount = False; // Òîðãîâàòü òîëüêî íà îäíîì ñ÷¸òå
extern int NumberAccount = 11111; // Íîìåð òîðãîâîãî ñ÷¸òà
extern string Name_Expert = "e-Friday.mq4";
extern bool UseSound = True; // Èñïîëüçîâàòü çâóêîâîé ñèãíàë
extern string NameFileSound = "expert.wav"; // Íàèìåíîâàíèå çâóêîâîãî ôàéëà
extern color clOpenBuy = LightBlue; // Öâåò îòêðûòèÿ ïîêóïêè
extern color clOpenSell = LightCoral; // Öâåò îòêðûòèÿ ïðîäàæè
extern color clModifyBuy = Aqua; // Öâåò ìîäèôèêàöèè ïîêóïêè
extern color clModifySell = Tomato; // Öâåò ìîäèôèêàöèè ïðîäàæè
extern color clCloseBuy = Blue; // Öâåò çàêðûòèÿ ïîêóïêè
extern color clCloseSell = Red; // Öâåò çàêðûòèÿ ïðîäàæè
//---- Ãëîáàëüíûå ïåðåìåííûå ñîâåòíèêà -------------------------------
//------- Ïîäêëþ÷åíèå âíåøíèõ ìîäóëåé --------------------------------
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
void deinit() {
Comment("");
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
void start() {
if (UseOneAccount && AccountNumber()!=NumberAccount) {
if (!IsTesting()) Comment("Òîðãîâëÿ íà ñ÷¸òå: "+AccountNumber()+" ÇÀÏÐÅÙÅÍÀ!");
return;
} else if (!IsTesting()) Comment("");
if (DayOfWeek()!=5 || Hour()<HourOpenPos || Hour()>HourClosePos) {
if (!IsTesting()) Comment("Âðåìÿ òîðãîâëè åù¸ íå íàñòóïèëî!");
return;
} else if (!IsTesting()) Comment("");
if (Hour()==HourOpenPos) OpenPosition();
if (Hour()>=HourClosePos && UseClosePos) CloseAllPositions();
if (UseTrailing) TrailingPositions();
}
//+------------------------------------------------------------------+
//| Óñòàíîâêà îðäåðîâ |
//+------------------------------------------------------------------+
void OpenPosition() {
double ldStop=0, ldTake=0;
double Op1=iOpen (NULL, PERIOD_D1, 1);
double Cl1=iClose(NULL, PERIOD_D1, 1);
if (!ExistPosition()) {
if (Op1>Cl1) {
if (StopLoss!=0) ldStop=Ask-StopLoss*Point;
if (TakeProfit!=0) ldTake=Ask+TakeProfit*Point;
SetOrder(OP_BUY, Ask, ldStop, ldTake);
}
if (Op1<Cl1) {
if (StopLoss!=0) ldStop=Bid+StopLoss*Point;
if (TakeProfit!=0) ldTake=Bid-TakeProfit*Point;
SetOrder(OP_SELL, Bid, ldStop, ldTake);
}
}
}
//+------------------------------------------------------------------+
//| Âîçâðàùàåò ôëàã ñóùåñòâîâàíèÿ ïîçèöèè |
//+------------------------------------------------------------------+
bool ExistPosition() {
bool Exist=False;
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
Exist=True; break;
}
}
}
}
return(Exist);
}
//+------------------------------------------------------------------+
//| Óñòàíîâêà îðäåðà |
//| Ïàðàìåòðû: |
//| op - îïåðàöèÿ |
//| pp - öåíà |
//| ldStop - óðîâåíü ñòîï |
//| ldTake - óðîâåíü òåéê |
//+------------------------------------------------------------------+
void SetOrder(int op, double pp, double ldStop, double ldTake) {
color clOpen;
string lsComm=GetCommentForOrder();
if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy;
else clOpen=clOpenSell;
// Lots=MathCeil(AccountFreeMargin()/10000*10)/10;
OrderSend(Symbol(),op,Lots,pp,Slippage,ldStop,ldTake,lsComm,MAGIC,0,clOpen);
if (UseSound) PlaySound(NameFileSound);
}
//+------------------------------------------------------------------+
//| Ãåíåðèðóåò è âîçâðàùàåò ñòðîêó êîìåíòàðèÿ äëÿ îðäåðà èëè ïîçèöèè |
//+------------------------------------------------------------------+
string GetCommentForOrder() {
return(Name_Expert);
}
//+------------------------------------------------------------------+
//| Çàêðûòèå âñåõ ïîçèöèé ïî ðûíî÷íîé öåíå |
//+------------------------------------------------------------------+
void CloseAllPositions() {
bool fc;
for (int i=OrdersTotal()-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
fc=False;
if (OrderType()==OP_BUY) {
fc=OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clCloseBuy);
}
if (OrderType()==OP_SELL) {
fc=OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clCloseSell);
}
if (fc && UseSound) PlaySound(NameFileSound);
}
}
}
}
//+------------------------------------------------------------------+
//| Ñîïðîâîæäåíèå ïîçèöèè ïðîñòûì òðàëîì |
//+------------------------------------------------------------------+
void TrailingPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
if (OrderType()==OP_BUY) {
if (!ProfitTrailing || (Bid-OrderOpenPrice())>TrailingStop*Point) {
if (OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point) {
ModifyStopLoss(Bid-TrailingStop*Point, clModifyBuy);
}
}
}
if (OrderType()==OP_SELL) {
if (!ProfitTrailing || OrderOpenPrice()-Ask>TrailingStop*Point) {
if (OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss()==0) {
ModifyStopLoss(Ask+TrailingStop*Point, clModifySell);
}
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Ïåðåíîñ óðîâíÿ StopLoss |
//| Ïàðàìåòðû: |
//| ldStopLoss - óðîâåíü StopLoss |
//| clModify - öâåò ìîäèôèêàöèè |
//+------------------------------------------------------------------+
void ModifyStopLoss(double ldStop, color clModify) {
bool fm;
double ldOpen=OrderOpenPrice();
double ldTake=OrderTakeProfit();
fm=OrderModify(OrderTicket(), ldOpen, ldStop, ldTake, 0, clModify);
if (fm && UseSound) PlaySound(NameFileSound);
}
//+------------------------------------------------------------------+
Comments