Price Data Components
Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Profitability Reports
AUD/USD
Oct 2024 - Jan 2025
121.00 %
Total Trades
72
Won Trades
0
Lost trades
0
Win Rate
0.00 %
Expected payoff
0.88
Gross Profit
359.75
Gross Loss
-296.40
Total Net Profit
63.35
-100%
-50%
0%
50%
100%
GBP/USD
Oct 2024 - Jan 2025
129.00 %
Total Trades
68
Won Trades
49
Lost trades
19
Win Rate
0.72 %
Expected payoff
2.11
Gross Profit
645.45
Gross Loss
-501.90
Total Net Profit
143.55
-100%
-50%
0%
50%
100%
NZD/USD
Oct 2024 - Jan 2025
54.00 %
Total Trades
68
Won Trades
46
Lost trades
22
Win Rate
0.68 %
Expected payoff
-3.35
Gross Profit
263.65
Gross Loss
-491.60
Total Net Profit
-227.95
-100%
-50%
0%
50%
100%
FiboPivot_Expert
//+-------------------------------------------------------------------------------------+
//| FiboPivot_Expert.mq4 |
//| Scriptong |
//| |
//+-------------------------------------------------------------------------------------+
#property copyright "Scriptong"
#property link "scriptong@mail.ru"
//---- input parameters
extern double Lots = 0.1; // Îáúåì îòêðûâàåìîé ïîçèöèè
extern string A1 = "Óðîâíè ñîïðîòèâëåíèÿ è ïîääåðæêè â ïðîöåíòàõ";
extern double Resistance3=138.2; // Ñàìîå âûñîêîå ìîïðîòèâëåíèå
extern double Resistance2=100.0; // Ñðåäíåå ñîïðîòèâëåíèå
extern double Resistance1=61.8; // Ñàìîå íèçêîå ñîïðîòèâëåíèå
extern double Support1=61.8; // Ñàìàÿ âûñîêàÿ ïîääåðæêà
extern double Support2=100.0; // Ñðåäíÿÿ ïîääåðæêà
extern double Support3=138.2; // Ñàìàÿ íèçêàÿ ïîääåðæêà
extern string A2 = "=====================================";
extern string OpenOrderSound = "ok.wav"; // Çâóê äëÿ îòêðûòèÿ ïîçèöèè
extern int MagicNumber = 17589 ; // Ìàãèê ïîçèöèé ñîâåòíèêà
bool Activate, FreeMarginAlert, FatalError;
double Tick, Spread, StopLevel, MinLot, MaxLot, LotStep, Res1, Res2, Res3, Supp1, Supp2,
Supp3, Pivot;
datetime LastSell, LastBuy;
int 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 - == Îáíîâëåíèå èñòîðè÷åñêèõ äàííûõ ==============================================
Comment("Ïîäîæäèòå, ïðîèçâîäèòñÿ çàïðîñ èñòîðè÷åñêèõ äàííûõ...");
int P = 0;
while(P < 120)
{
datetime NowDay = iTime(Symbol(), PERIOD_D1, 0);
if (GetLastError() != 4066) break;
Sleep(1000);
P++;
}
Comment("");
// - 3 - == Îêîí÷àíèå áëîêà =============================================================
// - 4 - == Ñáîð ñâåäåíèé îá èñòîðè ñäåëîê äî ñòàðòà ñîâåòíèêà ==========================
LastSell = 0;
LastBuy = 0;
for (int i = 0; i < OrdersTotal(); i++)
if (OrderSelect(i, SELECT_BY_POS))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (OrderType() == OP_BUY && OrderOpenTime() >= NowDay)
LastBuy = NowDay;
if (OrderType() == OP_SELL && OrderOpenTime() >= NowDay)
LastSell = NowDay;
}
for (i = 0; i < OrdersHistoryTotal(); i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
if (OrderType() == OP_BUY && OrderOpenTime() >= NowDay)
LastBuy = NowDay;
if (OrderType() == OP_SELL && OrderOpenTime() >= NowDay)
LastSell = NowDay;
}
// - 4 - == Îêîí÷àíèå áëîêà =============================================================
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)
{
// Áëîê ïðîâåðêè äîñòàòî÷íîñòè ñâîáîäíûõ ñðåäñòâ
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, 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()
{
// - 1 - == Ðàñ÷åò óðîâíåé ñîïðîòèâëåíèÿ è ïîääåðæêè äëÿ òåêóùåãî äíÿ ===================
double HighDay = iHigh(Symbol(), PERIOD_D1, 1); // Ìàêñèìóì ïðåäûäóùåãî äíÿ
double LowDay = iLow(Symbol(), PERIOD_D1, 1); // Ìèíèìóì ïðåäûäóùåãî äíÿ
double CloseDay = iClose(Symbol(), PERIOD_D1, 1); // Çàêðûòèå ïðåäûäóùåãî äíÿ
double Width = HighDay - LowDay; // Âîëàòèëüíîñòü â÷åðàøíåãî äíÿ
Pivot = (HighDay+LowDay+CloseDay)/3; //Ñòàíäàðòíûé Pivot - òèïè÷íàÿ öåíà äíÿ
Res1 = Pivot + Width*(Resistance1/100.0); // Ïåðâîå ñîïðîòèâëåíèå
Res2 = Pivot + Width*(Resistance2/100.0); // Âòîðîå ñîïðîòèâëåíèå
Res3 = Pivot + Width*(Resistance3/100.0); // Òðåòüå ñîïðîòèâëåíèå
Supp1 = Pivot - Width*(Support1/100.0); // Ïåðâàÿ ïîääåðæêà
Supp2 = Pivot - Width*(Support2/100.0); // Âòîðàÿ ïîääåðæêà
Supp3 = Pivot - Width*(Support3/100.0); // Òðåòüÿ ïîääåðæêà
// - 1 - == Îêîí÷àíèå áëîêà =============================================================
}
//+-------------------------------------------------------------------------------------+
//| Çàêðûâàåò âñå ïîçèöèè. Åñëè çàêðûòü íå óäàëîñü, òî âîçâðàùàåò False. |
//|  ñëó÷àå óñïåõà True. |
//+-------------------------------------------------------------------------------------+
bool CloseAll()
{
for (int i = OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
if (OrderOpenTime() < iTime(Symbol(), PERIOD_D1, 0))
if (WaitForTradeContext())
{
if (OrderType() < 2) // Åñëè íàøëè ïîçèöèþ
{
RefreshRates();
if (OrderType() == OP_BUY)
double Pr = ND(Bid);
else
Pr = ND(Ask);
if (!OrderClose(OrderTicket(), OrderLots(), Pr, 3)) // òî ïûòàåìñÿ çàêðûòü
return(False); // íå óäàëîñü çàêðûòü - âåðíåì False
}
else
if (!OrderDelete(OrderTicket()))
return(False);
}
else
return(False); //âåðíåì False, åñëè íå äîæäàëèñü îñâîáîæäåíèÿ òîðãîâîãî ïîòîêà
return(True); // åñëè âñå ÎÊ, òî âåðíåì 0
}
//+-------------------------------------------------------------------------------------+
//| Ïîèñê ïåðâè÷íîé ïîçèöèè è óäàëåíèå ñîîòâåòñòâóþùåãî åé îòëîæåííèêà, åñëè ïîçèöèè íåò|
//+-------------------------------------------------------------------------------------+
void PartiallyClose()
{
for (int i = OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS))
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber
&& OrderType() < 2) // ïîèñê ñðàáîòàâøåãî îðäåðà
{
if (StringFind(OrderComment(), "from #", 0) < 0)
{ // Öåíà äîñòèãëà óðîâíÿ âòîðîãî ñîïðîòèâëåíèÿ èëè ïîääåðæêè
if ((OrderType() == OP_BUY && ND(Bid) >= ND(Res2)) ||
(OrderType() == OP_SELL && ND(Bid) <= ND(Supp2)))
{ // Ïðîèçâîäèì ÷àñòè÷íîå çàêðûòèå
double LotsClose = MathMax(MinLot, // Ðàñ÷åò çàêðûâàåìîãî îáúåìà
MathRound((OrderLots()/2)/LotStep)*LotStep);
if (WaitForTradeContext())
if (!OrderClose(OrderTicket(), LotsClose, IF(OrderType() == OP_BUY,
ND(Bid), ND(Ask)), 3))
return;
}
}
else
{ // Ïåðåíîñ ñòîïà â áåçóáûòîê
bool Res = False;
if (OrderType() == OP_BUY)
if (ND(OrderStopLoss()) < ND(OrderOpenPrice()) &&
ND(Bid - OrderOpenPrice()) > StopLevel)
Res = True;
if (OrderType() == OP_SELL)
if (ND(OrderStopLoss()) > ND(OrderOpenPrice()) &&
ND(OrderOpenPrice() - Ask) > StopLevel)
Res = True;
if (Res)
if (WaitForTradeContext())
if (!OrderModify(OrderTicket(), 0, ND(OrderOpenPrice()),
OrderTakeProfit(), 0))
return;
}
}
}
//+-------------------------------------------------------------------------------------+
//| Çàìåíà ñòàíäàðòíîãî áëîêà "if-else" |
//+-------------------------------------------------------------------------------------+
double IF(bool Condition, double IfTrue, double IfFalse)
{
if (Condition) return(IfTrue); // Åñëè óñëîâèå èñòèííî, òî âîçâðàùàåì çíà÷åíèå IfTrue
else return(IfFalse); // Åñëè óñëîâèå ëîæíî, òî âîçâðàùàåì çíà÷åíèå IfFalse
}
//+-------------------------------------------------------------------------------------+
//| Ôóíêöèÿ START ýêñïåðòà |
//+-------------------------------------------------------------------------------------+
int start()
{
// - 1 - == Ðàçðåøåíî ëè ñîâåòíèêó ðàáîòàòü? ===========================================
if (!Activate || FatalError) // Îòêëþ÷àåòñÿ ðàáîòà ñîâåòíèêà, åñëè ôóíêöèÿ
return(0); // init çàâåðøèëàñü ñ îøèáêîé èëè èìåëà ìåñòî ôàòàëüíàÿ îøèáêà
// - 1 - == Îêîí÷àíèå áëîêà ============================================================
// - 2 - == ×àñòè÷íîå çàêðûòèå ïîçèöèè è ïðåíîñ ñòîïà â áåçóáûòîê =======================
PartiallyClose();
// - 2 - == Îêîí÷àíèå áëîêà ============================================================
// - 3 - == Êîíòðîëü îòêðûòèÿ íîâîãî äíÿ ===============================================
datetime NowDay = iTime(Symbol(), PERIOD_D1, 0);
if (LastBuy == NowDay && LastSell == NowDay) //Åñëè îòêðûâàëèñü ñåãîäíÿ, òî áîëüøå íå
return(0); // ðàáîòàåì
// - 3 - == Îêîí÷àíèå áëîêà ============================================================
// - 4 - == Ñáîð èíôîðìàöèè îá óñëîâèÿõ òîðãîâëè ========================================
Spread = ND(MarketInfo(Symbol(), MODE_SPREAD)*Point); // òåêùèé ñïðýä
StopLevel = ND(MarketInfo(Symbol(), MODE_STOPLEVEL)*Point); // òåêóùèé óðîâåíü ñòîïîâ
// - 4 - == Îêîí÷àíèå áëîêà ============================================================
// - 5 - == Ðàñ÷åò òåêóùåãî ñèãíàëà =====================================================
GetSignal();
// - 5 - == Îêîí÷àíèå áëîêà ============================================================
// - 6 - == Óñòàíîâêà îðäåðà BuyStop ====================================================
double Price = ND(Res1 + Spread);
bool Res = CloseAll(); // Çàêðûòü âñå ïîçèöèè è óäàëèòü âñå îðäåðà
RefreshRates();
if (Res && Ask < Price && LastBuy < NowDay) // åñëè íåò îòêðûòûõ ïîçèöèé è öåíà íå
{ // ïðîáèëà ïåðâîå ñîïðîòèâëåíèå
double TP = ND(IF(Res3 - Price > StopLevel, Res3, Price + StopLevel));
double SL = ND(IF(Price - Pivot - Tick > StopLevel+Spread, Pivot - Tick,
Price - StopLevel - Spread));
if (ND(Price - Ask) <= StopLevel) // Åñëè íåâîçìîæíî îòëîæèòü îðäåð, òî æäåì
return(0); // ñëåäóþùåãî òèêà
if (!OpenOrder(OP_BUYSTOP, Price, SL, TP)) // åñëè íå óäàëîñü óñòàíîâèòü îðäåð
return(0); // òî ïîïðîáóåì ñî ñëåäóþùèì òèêîì
LastBuy = NowDay;
}
if (!Res) return(0); //çàêðûòü âñå ïîçèöèè íå âûøëî, æäåì äî ñëåäóþùåãî òèêà
// - 6 - == Îêîí÷àíèå áëîêà ============================================================
// - 7 - == Óñòàíîâêà îðäåðà SellStop ===================================================
Price = ND(Supp1);
if (Bid > Price && LastSell < NowDay) // åñëè íåò îòêðûòûõ ïîçèöèé è öåíà íå ïðîáèëà
{ // ïåðâóþ ïîääåðæêó
TP = ND(IF(Price - Supp3 + Spread > StopLevel, Supp3 + Spread,
Price - StopLevel));
SL = ND(IF(Pivot + Tick - Price > StopLevel, Pivot + Spread + Tick,
Price + StopLevel + Spread));
if (ND(Bid - Price) <= StopLevel) // Åñëè íåâîçìîæíî îòëîæèòü îðäåð, òî æäåì
return(0); // ñëåäóþùåãî òèêà
if (!OpenOrder(OP_SELLSTOP, Price, SL, TP)) // åñëè íå óäàëîñü óñòàíîâèòü îðäåð
return(0); // òî ïîïðîáóåì ñî ñëåäóþùèì òèêîì
LastSell = NowDay;
}
// - 7 - == Îêîí÷àíèå áëîêà ============================================================
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
---