Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Profitability Reports
AUD/USD
Oct 2024 - Jan 2025
46.00 %
Total Trades
72
Won Trades
0
Lost trades
0
Win Rate
0.00 %
Expected payoff
-1.89
Gross Profit
115.20
Gross Loss
-251.30
Total Net Profit
-136.10
-100%
-50%
0%
50%
100%
GBP/USD
Oct 2024 - Jan 2025
60.00 %
Total Trades
73
Won Trades
64
Lost trades
9
Win Rate
0.88 %
Expected payoff
-1.99
Gross Profit
218.30
Gross Loss
-363.80
Total Net Profit
-145.50
-100%
-50%
0%
50%
100%
PrevDayEffect
//+-------------------------------------------------------------------------------------+
//| PrevDayEffect.mq4 |
//| Scriptong |
//| |
//+-------------------------------------------------------------------------------------+
#property copyright "Scriptong"
#property link "scriptong@mail.ru"
//---- input parameters
extern double Lots = 0.1; // Îáúåì îòêðûâàåìîé ïîçèöèè
extern int TakeProfit = 20;
extern int OffsetForStop = 15;
extern string OpenOrderSound = "ok.wav"; // Çâóê äëÿ îòêðûòèÿ ïîçèöèè
extern int MagicNumber = 17589 ; // Ìàãèê ïîçèöèé ñîâåòíèêà
bool Activate, FreeMarginAlert, FatalError;
double Tick, Spread, StopLevel, MinLot, MaxLot, LotStep, TP, SL;
datetime LastDay, LastBar;
int Signal, TypeOrder, LastType, TicketOrder;
//+-------------------------------------------------------------------------------------+
//| Ôóíêöèÿ èíèöèàëèçàöèè ýêñïåðòà |
//+-------------------------------------------------------------------------------------+
int init()
{
//----
Activate = False;
// - 1 - == Ñáîð èíôîðìàöèè îá óñëîâèÿõ òîðãîâëè ========================================
Tick = MarketInfo(Symbol(), MODE_TICKSIZE); // ìèíèìàëüíûé òèê
Spread = ND(MarketInfo(Symbol(), MODE_SPREAD)*Point); // òåêùèé ñïðýä
StopLevel = ND(MarketInfo(Symbol(), MODE_STOPLEVEL)*Point); // òåêóùèé óðîâåíü ñòîïîâ
MinLot = MarketInfo(Symbol(), MODE_MINLOT); // ìèíèìàëüíûé ðàçðåøåííûé îáúåì ñäåëêè
MaxLot = MarketInfo(Symbol(), MODE_MAXLOT); // ìàêñèìàëüíûé ðàçðåøåííûé îáúåì ñäåëêè
LotStep = MarketInfo(Symbol(), MODE_LOTSTEP); // øàã ïðèðàùåíèÿ îáúåìà ñäåëêè
// - 1 - == Îêîí÷àíèå áëîêà =============================================================
// - 2 - == Ïðèâåäåíèå îáúåìà ñäåëêè ê äîïóñòèìîìó è ïðîâåðêà êîððåêòíîñòè îáúåìà =======
Lots = MathRound(Lots/LotStep)*LotStep; // îêðóãëåíèå îáúåìà äî áëèæàéøåãî äîïóñòèìîãî
if(Lots < MinLot || Lots > MaxLot) // îáúåì ñäåëêè íå ìåíüøå MinLot è íå áîëüøå MaxLot
{
Comment("Ïàðàìåòðîì Lots áûë çàäàí íåïðàâèëüíûé îáúåì ñäåëêè! Ñîâåòíèê îòêëþ÷åí!");
return(0);
}
// - 2 - == Îêîí÷àíèå áëîêà =============================================================
// - 3 - == Ïðîâåðêà êîððåêòíîñòè âõîäíûõ ïàðàìåòðîâ ====================================
if (TakeProfit <= StopLevel/Point)
{
Comment("Ñëèøêîì ìàëîå çíà÷åíèå ïàðàìåòðà TakeProfit. Ñîâåòíèê îòêëþ÷åí!");
return(0);
}
// - 3 - == Îêîí÷àíèå áëîêà =============================================================
// - 4 - == Îáíîâëåíèå äàííûõ ñ äíåâíîãî è ìèíóòíîãî òàéìôðåéìîâ =======================
Comment("Ïîäîæäèòå, èäåò îíîâëåíèå äàííûõ äíåâíîãî òàéìôðåéìà...");
int P = 0;
while (P < 120)
{
iTime(Symbol(), PERIOD_D1, 0);
if (GetLastError() != 4066) break;
Sleep(1000);
P++;
}
if (P == 120)
{
Comment("Îáíîâëåíèå äàííûõ çàâåðøèëîñü ñ îøèáêîé. Ñîâåòíèê îòêëþ÷åí!");
return(0);
}
Comment("Ïîäîæäèòå, èäåò îíîâëåíèå äàííûõ ìèíóòíîãî òàéìôðåéìà...");
P = 0;
while (P < 120)
{
iTime(Symbol(), PERIOD_M1, 0);
if (GetLastError() != 4066) break;
Sleep(1000);
P++;
}
if (P == 120)
{
Comment("Îáíîâëåíèå äàííûõ çàâåðøèëîñü ñ îøèáêîé. Ñîâåòíèê îòêëþ÷åí!");
return(0);
}
Comment("");
LastDay = 0;
LastBar = 0;
// - 4 - == Îêîí÷àíèå áëîêà =============================================================
// - 5 - == Ðàáîòàëè óæå â ýòîò äåíü èëè íåò? ===========================================
for (int i = OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
if (OrderSymbol() == Symbol())
if (MathFloor(OrderMagicNumber()/10) == MagicNumber &&
MathMod(OrderMagicNumber(), 10) == 0)
{
LastDay = iTime(Symbol(), PERIOD_D1, 0);
break;
}
if (LastDay == 0)
for (i = OrdersHistoryTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
if (OrderSymbol() == Symbol())
if (MathFloor(OrderMagicNumber()/10) == MagicNumber &&
MathMod(OrderMagicNumber(), 10) == 0 &&
OrderOpenTime() >= iTime(Symbol(), PERIOD_D1, 0))
{
LastDay = iTime(Symbol(), PERIOD_D1, 0);
break;
}
// - 5 - == Îêîí÷àíèå áëîêà =============================================================
Activate = True; // Âñå ïðîâåðêè óñïåøíî çàâåðøåíû, âîçâîäèì ôëàã àêòèâèçàöèè ýêñïåðòà
//----
return(0);
}
//+-------------------------------------------------------------------------------------+
//| Ôóíêöèÿ äåèíèöèàëèçàöèè ýêñïåðòà |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
Comment("");
//----
return(0);
}
//+-------------------------------------------------------------------------------------+
//| Ïðèâåäåíèå çíà÷åíèé ê òî÷íîñòè îäíîãî ïóíêòà |
//+-------------------------------------------------------------------------------------+
double ND(double A)
{
return(NormalizeDouble(A, Digits));
}
//+-------------------------------------------------------------------------------------+
//| Ðàñøèôðîâêà ñîîáùåíèÿ îá îøèáêå |
//+-------------------------------------------------------------------------------------+
string ErrorToString(int Error)
{
switch(Error)
{
case 2: return("çàôèêñèðîâàíà îáùàÿ îøèáêà, îáðàòèòåñü â òåõïîääåðæêó.");
case 5: return("ó âàñ ñòàðàÿ âåðñèÿ òåðìèíàëà, îáíîâèòå åå.");
case 6: return("íåò ñâÿçè ñ ñåðâåðîì, ïîïðîáóéòå ïåðåçàãðóçèòü òåðìèíàë.");
case 64: return("ñ÷åò çàáëîêèðîâàí, îáðàòèòåñü â òåõïîääåðæêó.");
case 132: return("ðûíîê çàêðûò.");
case 133: return("òîðãîâëÿ çàïðåùåíà.");
case 149: return("çàïðåùåíî ëîêèðîâàíèå.");
}
}
//+-------------------------------------------------------------------------------------+
//| Îòêðûòèå ïîçèöèè |
//| Âîçâðàùàåò: |
//| True - Ïîçèöèÿ îòêðûòà óñïåøíî |
//| False - Îøèáêà îòêðûòèÿ |
//+-------------------------------------------------------------------------------------+
bool OpenOrder(int Type, double Price, double SL, double TP, int Num)
{
// Áëîê ïðîâåðêè äîñòàòî÷íîñòè ñâîáîäíûõ ñðåäñòâ
if(AccountFreeMarginCheck(Symbol(), OP_BUY, Lots) <= 0 || GetLastError() == 134)
{
if(!FreeMarginAlert)
{
Print("Íåäîñòàòî÷íî ñðåäñòâ äëÿ îòêðûòèÿ ïîçèöèè. Free Margin = ",
AccountFreeMargin());
FreeMarginAlert = True;
}
return(False);
}
FreeMarginAlert = False;
// ---------------------------------------------
switch (Type)
{
case OP_BUY: string S = "BUY"; break;
case OP_SELL: S = "SELL"; break;
case OP_BUYSTOP: S = "BUYSTOP"; break;
case OP_SELLSTOP: S = "SELLSTOP"; break;
case OP_BUYLIMIT: S = "BUYLIMIT"; break;
case OP_SELLLIMIT: S = "SELLLIMIT"; break;
}
if(WaitForTradeContext()) // îæèäàíèå îñâîáîæäåíèÿ òîðãîâîãî ïîòîêà
{
Comment("Îòïðàâëåí çàïðîñ íà îòêðûòèå îðäåðà ", S, " ...");
int ticket=OrderSend(Symbol(), Type, Lots, Price, 0,
SL, TP, NULL, MagicNumber*10+Num, 0, CLR_NONE); // îòêðûòèå ïîçèöèè
// Ïîïûòêà îòêðûòèÿ ïîçèöèè çàâåðøèëàñü íåóäà÷åé
if(ticket<0)
{
int Error = GetLastError();
if(Error == 2 || Error == 5 || Error == 6 || Error == 64
|| Error == 132 || Error == 133 || Error == 149) // ñïèñîê ôàòàëüíûõ îøèáîê
{
Comment("Ôàòàëüíàÿ îøèáêà ïðè îòêðûòèè ïîçèöèè ò. ê. "+
ErrorToString(Error)+" Ñîâåòíèê îòêëþ÷åí!");
FatalError = True;
}
else
Comment("Îøèáêà îòêðûòèÿ ïîçèöèè ", S, ": ", Error); // íåôàòàëüíàÿ îøèáêà
return(False);
}
// ---------------------------------------------
// Óäà÷íîå îòêðûòèå ïîçèöèè
Comment("Ïîçèöèÿ ", S, " îòêðûòà óñïåøíî!");
PlaySound(OpenOrderSound);
return(True);
// ------------------------
}
else
{
Comment("Âðåìÿ îæèäàíèÿ îñâîáîæäåíèÿ òîðãîâîãî ïîòîêà èñòåêëî!");
return(False);
}
}
//+-------------------------------------------------------------------------------------+
//| Îæèäàíèå òîðãîâîãî ïîòîêà. Åñëè ïîòîê ñâîáîäåí, òî ðåçóëüòàò True, èíà÷å - False |
//+-------------------------------------------------------------------------------------+
bool WaitForTradeContext()
{
int P = 0;
// öèêë "ïîêà"
while(IsTradeContextBusy() && P < 5)
{
P++;
Sleep(1000);
}
// -------------
if(P == 5)
return(False);
return(True);
}
//+-------------------------------------------------------------------------------------+
//| Ðàñ÷åò ñèãíàëà ïî ïðåäûäóùåìó äíþ |
//+-------------------------------------------------------------------------------------+
void GetSignal()
{
Signal = 0; // îáíóëåíèå ñèãíàëà
// - 1 - == Íàõîæäåíèå ïîñëåäíåãî ïðîáèòèÿ ïðåäûäóùåãî äíÿ ==============================
double HighD = iHigh(Symbol(), PERIOD_D1, 1);
double LowD = iLow(Symbol(), PERIOD_D1, 1);
for (int i = 1; i <= iBarShift(Symbol(), PERIOD_M1, iTime(Symbol(), PERIOD_D1, 0)); i++)
if (ND(iHigh(Symbol(), PERIOD_M1, i)) > HighD+Tick ||
ND(iLow(Symbol(), PERIOD_M1, i)) < LowD-Tick)
break;
// - 1 - == Îêîí÷àíèå áëîêà =============================================================
// - 2 - == Ñèãíàë îòêðûòèÿ BUY =========================================================
if (ND(iHigh(Symbol(), PERIOD_M1, i)) > HighD+Tick) // ñèãíàë ïðîáèòèÿ äíÿ ââåðõ
if (Close[1] < Low[2]) // Ïðîèçîøåë îòêàò ñ çàêðûòèåì ñâå÷è íèæå ìèíèìóìà ïðåäûäóùåé
{
SL = MathMin(iLow(Symbol(), PERIOD_D1, 0), iLow(Symbol(), PERIOD_D1, 1)) -
OffsetForStop*Tick;
Signal = 1;
return;
}
// - 2 - == Îêîí÷àíèå áëîêà =============================================================
// - 3 - == Ñèãíàë îòêðûòèÿ SELL ========================================================
if (ND(iLow(Symbol(), PERIOD_M1, i)) < LowD-Tick) // ñèãíàë ïðîáèòèÿ äíÿ âíèç
if (Close[1] > High[2]) // Ïðîèçîøåë îòêàò ñ çàêðûòèåì ñâå÷è âûøå ìàêñèìóìà ïðåäûäóùåé
{
SL = MathMax(iHigh(Symbol(), PERIOD_D1, 0), iHigh(Symbol(), PERIOD_D1, 1)) + Spread
+ OffsetForStop*Tick;
Signal = 2;
return;
}
// - 3 - == Îêîí÷àíèå áëîêà =============================================================
}
//+-------------------------------------------------------------------------------------+
//| Çàêðûâàåò âñå ïîçèöèè òèïà Type. Åñëè çàêðûòü íå óäàëîñü çàêðûòü, òî 1. |
//| Åñëè ïðèñóòñòâóåò ïðîòèâîïîëîæíàÿ, òî âîçâðàùàåò 2.  ñëó÷àå óñïåõà 0. |
//+-------------------------------------------------------------------------------------+
int CheckOrdersReal(int Type)
{
for (int i = OrdersTotal()-1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS))
if(OrderSymbol() == Symbol() && MathFloor(OrderMagicNumber()/10) == MagicNumber
&& OrderType() < 2) // ïîèñê "ñâîåé" ñäåëêè
if(OrderType() == Type) // Åñëè ïîçèöèÿ òèïà Type
{
if (WaitForTradeContext())
{
if(Type == OP_BUY)
double Pr = ND(MarketInfo(Symbol(), MODE_BID));
else
Pr = ND(MarketInfo(Symbol(), MODE_ASK));
if (!OrderClose(OrderTicket(), OrderLots(), Pr, 3))// òî ïûòàåìñÿ çàêðûòü åå
return(1); // íå óäàëîñü çàêðûòü - âåðíåì 1
}
else
return(1);//âåðíåì 1, åñëè íå óäàëîñü äîæäàòüñÿ îñâîáîæäåíèÿ òîðãîâîãî ïîòîêà
}
else
return(2); // âåðíåì 2, åñëè îòêðûòà ïîçèöèÿ, ïðîòèâîïîëîæíàÿ óêàçàííîé
return(0); // åñëè âñå ÎÊ, òî âåðíåì 0
}
//+-------------------------------------------------------------------------------------+
//| Äîáàâëåíèå èëè óäàëåíèå ðàçâîðîòíîãî îðäåðà |
//+-------------------------------------------------------------------------------------+
void AddOrDeleteReverse()
{
int BaseTicket = -1, ReverseTicket = -1;
double BaseSL = 0, BaseOpen = 0, ReverseOpen = 0, ReverseSL = 0;
int BaseType = -1, ReverseType = -1;
datetime BaseOOT = 0;
// - 1 - == Ïîèñê îñíîâíîãî è ðàçâîðîòíîãî îðäåðîâ ======================================
for (int i = OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
if (OrderSymbol() == Symbol() &&
MathFloor(OrderMagicNumber()/10) == MagicNumber) // ïîèñê "ñâîåé" ñäåëêè
if (MathMod(OrderMagicNumber(), 10) == 0)
{
BaseTicket = OrderTicket();
BaseSL = OrderStopLoss();
BaseOpen = OrderOpenPrice();
BaseType = OrderType();
BaseOOT = OrderOpenTime();
}
else
{
ReverseTicket = OrderTicket();
ReverseSL = OrderStopLoss();
ReverseType = OrderType();
ReverseOpen = OrderOpenPrice();
}
// - 1 - == Îêîí÷àíèå áëîêà =============================================================
// - 2 - == Çàêðûòèå îñíîâíîé ïîçèöèè â íà÷àëå ñëåäóþùèõ ñóòîê ==========================
if (BaseTicket > 0 && BaseOOT < iTime(Symbol(), PERIOD_D1, 0))
{
if (BaseType == OP_BUY)
double price = ND(Bid);
else
price = ND(Ask);
if (WaitForTradeContext())
OrderClose(BaseTicket, Lots, price, 3);
return;
}
// - 2 - == Îêîí÷àíèå áëîêà =============================================================
// - 3 - == Äîáàâëåíèå ðàçâîðîòíîãî îðäåðà ==============================================
if (BaseTicket > 0 && ReverseTicket < 0)
{
if (BaseType == OP_BUY)
{
ReverseType = OP_SELLSTOP;
double sl = BaseOpen;//ND(iHigh(Symbol(), PERIOD_D1, 0)+Spread+Tick);
double tp = ND(BaseSL - (BaseOpen - BaseSL));
}
else
{
ReverseType = OP_BUYSTOP;
sl = BaseOpen;//ND(iLow(Symbol(), PERIOD_D1, 0)-Tick);
tp = ND(BaseSL + (BaseSL - BaseOpen));
}
OpenOrder(ReverseType, BaseSL, sl, tp, 1);
}
// - 3 - == Îêîí÷àíèå áëîêà =============================================================
// - 4 - == Óäàëåíèå ðàçâîðîòíîãî îðäåðà ==============================================
if (ReverseTicket > 0 && ReverseType > 1 && (BaseTicket < 0 ||
(BaseTicket > 0 && ND(ReverseOpen) != ND(BaseSL))))
if (WaitForTradeContext())
OrderDelete(ReverseTicket);
// - 4 - == Îêîí÷àíèå áëîêà =============================================================
}
//+-------------------------------------------------------------------------------------+
//| Ôóíêöèÿ START ýêñïåðòà |
//+-------------------------------------------------------------------------------------+
int start()
{
// - 1 - == Ðàçðåøåíî ëè ñîâåòíèêó ðàáîòàòü? ===========================================
if (!Activate || FatalError) // Îòêëþ÷àåòñÿ ðàáîòà ñîâåòíèêà, åñëè ôóíêöèÿ
return(0); // init çàâåðøèëàñü ñ îøèáêîé èëè èìåëà ìåñòî ôàòàëüíàÿ îøèáêà
// - 1 - == Îêîí÷àíèå áëîêà ============================================================
// - 2 - == Ñáîð èíôîðìàöèè îá óñëîâèÿõ òîðãîâëè ========================================
Spread = ND(MarketInfo(Symbol(), MODE_SPREAD)*Point); // òåêùèé ñïðýä
StopLevel = ND(MarketInfo(Symbol(), MODE_STOPLEVEL)*Point); // òåêóùèé óðîâåíü ñòîïîâ
// - 2 - == Îêîí÷àíèå áëîêà ============================================================
// - 3 - == Óäàëåíèå èëè äîáàâëåíèå îòëîæåííîãî îðäåðà ==================================
AddOrDeleteReverse();
// - 3 - == Îêîí÷àíèå áëîêà ============================================================
// - 4 - == Ðàñ÷åò òåêóùåãî ñèãíàëà =====================================================
if (LastDay == iTime(Symbol(), PERIOD_D1, 0)) return(0);
if (LastBar != Time[0])
{
GetSignal();
LastBar = Time[0];
}
// - 4 - == Îêîí÷àíèå áëîêà ============================================================
// - 5 - == Îòêðûòèå äëèííîé ïîçèöèè ===================================================
if (Signal == 1)
{
int Res = CheckOrdersReal(OP_SELL); // Ïðîòèâîïîëîæíóþ ïîçèöèþ - çàêðûòü
if (Res == 0) // åñëè íåò îòêðûòûõ ïîçèöèé
{
RefreshRates();
TP = Ask + TakeProfit*Tick;
if (ND(Bid-SL) > StopLevel)
if (!OpenOrder(OP_BUY, ND(Ask), ND(SL), ND(TP), 0)) // åñëè íå óäàëîñü îòêðûòü
return(0); // òî ïîïðîáóåì ñî ñëåäóþùèì òèêîì
else
LastDay = iTime(Symbol(), PERIOD_D1, 0); // íîâûé áàð "ïîñ÷èòàëè"
}
if(Res == 1) return(0); //çàêðûòü ïðîòèâîïîëîæíóþ íå âûøëî, æäåì äî ñëåäóþùåãî òèêà
}
// - 5 - == Îêîí÷àíèå áëîêà ============================================================
// - 6 - == Îòêðûòèå êîðîòêîé ïîçèöèè ===================================================
if (Signal == 2)
{
Res = CheckOrdersReal(OP_BUY); // Ïðîòèâîïîëîæíóþ ïîçèöèþ - çàêðûòü
if (Res == 0) // åñëè íåò îòêðûòûõ ïîçèöèé
{
RefreshRates();
TP = Bid - TakeProfit*Tick;
if (ND(SL-Ask) > StopLevel)
if (!OpenOrder(OP_SELL, ND(Bid), ND(SL), ND(TP), 0))// åñëè íå óäàëîñü îòêðûòü
return(0); // òî ïîïðîáóåì ñî ñëåäóþùèì òèêîì
else
LastDay = iTime(Symbol(), PERIOD_D1, 0); // íîâûé áàð "ïîñ÷èòàëè"
}
if (Res == 1) return(0);//çàêðûòü ïðîòèâîïîëîæíóþ íå âûøëî, æäåì äî ñëåäóþùåãî òèêà
}
// - 6 - == Îêîí÷àíèå áëîêà ============================================================
//----
return(0);
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---