Orders Execution
Miscellaneous
0
Views
0
Downloads
0
Favorites
Profitability Reports
NZD/USD
Oct 2024 - Jan 2025
81.00 %
Total Trades
47
Won Trades
18
Lost trades
29
Win Rate
0.38 %
Expected payoff
-2.71
Gross Profit
547.50
Gross Loss
-674.70
Total Net Profit
-127.20
-100%
-50%
0%
50%
100%
AMKA_Expert
//+-------------------------------------------------------------------------------------+
//| AMKAandWilder_Expert.mq4 |
//| Scriptong |
//| |
//+-------------------------------------------------------------------------------------+
#property copyright "Scriptong"
#property link "scriptong@mail.ru"
//---- input parameters
extern double Lots = 0.1; // Îáúåì îòêðûâàåìîé ïîçèöèè
extern int TakeProfit = 2000;
extern int StopLoss = 2000;
extern string A3 = "Ïàðàìåòðû èíäèêàòîðà AMKA";
extern int AMKAPeriod=9; // Ïåðèîä AMKA
extern int FastEMAPeriod=2; // Ïåðèîä áûñòðîé ñêîëüçÿùåé äëÿ AMKA
extern int SlowEMAPeriod=30; // Ïåðèîä áûñòðîé ñêîëüçÿùåé äëÿ AMKA
extern double PowLevel=2.0; // Ñòåïåíü, â êîòîðóþ âîçâîäÿòñÿ ñîñòàâëÿþùèå AMKA
// 2 - ñðåäíåêâàäðàòè÷íîå çíà÷åíèå,
// 3 - ñðåäíåêóáè÷åñêîå è ò. ä.
extern double dK = 1.0; // êîýôôèöèåíò äëÿ ôèëüòðà
extern bool UseStdDev = True; // èñïîëüçîâàòü ëè ñðåäíåêâàäðàòè÷íîå îòêëîíåíèå?
extern int AMKAPrice = 5; // Öåíà ðàñ÷åòà AMKA (0 - 6)
extern string A4 = "=====================================";
extern string OpenOrderSound = "ok.wav"; // Çâóê äëÿ îòêðûòèÿ ïîçèöèè
extern int MagicNumber = 17589 ; // Ìàãèê ïîçèöèé ñîâåòíèêà
bool Activate, FreeMarginAlert, FatalError;
double Tick, Spread, StopLevel, MinLot, MaxLot, LotStep, CurRed, CurBlue;
datetime LastBar;
int TypeOrder, LastType, TicketOrder, Signal;
//+-------------------------------------------------------------------------------------+
//| Ôóíêöèÿ èíèöèàëèçàöèè ýêñïåðòà |
//+-------------------------------------------------------------------------------------+
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 - == Îêîí÷àíèå áëîêà =============================================================
LastBar = 0;
CurRed = 0;
CurBlue = 0;
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(int Bar)
{
Signal = 0;
// - 1 - == Ðàñ÷åò ïî èíäèêàòîðó AMKA ===================================================
double RedDot = iCustom(Symbol(), 0, "AMKA", AMKAPeriod, FastEMAPeriod,
SlowEMAPeriod, PowLevel, dK, UseStdDev, AMKAPrice, 1, Bar);
double BlueDot = iCustom(Symbol(), 0, "AMKA", AMKAPeriod, FastEMAPeriod,
SlowEMAPeriod, PowLevel, dK, UseStdDev, AMKAPrice, 2, Bar);
if (RedDot != 0 && BlueDot == 0)
{
CurRed = RedDot;
CurBlue = 0.0;
}
if (BlueDot != 0 && RedDot == 0)
{
CurBlue = BlueDot;
CurRed = 0.0;
}
// - 1 - == Îêîí÷àíèå áëîêà =============================================================
// - 3 - == Ñèíòåç ñèãíàëà ==============================================================
if (CurRed != 0)
if (ND(Open[Bar]) > ND(Close[Bar])) // ïîñëåäíèé áàð ìåäâåæèé
if (ND(Close[Bar]) < ND(Low[Bar+1])) // è îí âûñòóïàåò çà ãðàíèöû ïðåäûäóùåãî áàðà
if (ND(Open[Bar+1]) < ND(Close[Bar+1])) // à âòîðîé áàð áû÷èé
Signal = 1;
if (CurBlue != 0)
if (ND(Open[Bar]) < ND(Close[Bar])) // ïîñëåäíèé áàð áû÷èé
if (ND(Close[Bar]) > ND(High[Bar+1])) // è îí âûñòóïàåò çà ãðàíèöû ïðåäûäóùåãî áàðà
if (ND(Open[Bar+1]) > ND(Close[Bar+1])) // à âòîðîé áàð ìåäâåæèé
Signal = 2;
// - 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() && OrderMagicNumber() == 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
}
//+-------------------------------------------------------------------------------------+
//| Çàìåíà ñòàíäàðòíîãî áëîêà "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 - == Êîíòðîëü îòêðûòèÿ íîâîãî áàðà ==============================================
if (LastBar == Time[0]) //Åñëè îòêðûòèå íà äàííîì áàðå óæå áûëî
return(0); // òî çàêàí÷èâàåì
// - 2 - == Îêîí÷àíèå áëîêà ============================================================
// - 3 - == Ñáîð èíôîðìàöèè îá óñëîâèÿõ òîðãîâëè ========================================
Spread = ND(MarketInfo(Symbol(), MODE_SPREAD)*Point); // òåêùèé ñïðýä
StopLevel = ND(MarketInfo(Symbol(), MODE_STOPLEVEL)*Point); // òåêóùèé óðîâåíü ñòîïîâ
// - 3 - == Îêîí÷àíèå áëîêà ============================================================
// - 4 - == Ðàñ÷åò òåêóùåãî ñèãíàëà =====================================================
GetSignal(1); // ðàñ÷åò ñèãíàëà
// - 4 - == Îêîí÷àíèå áëîêà ============================================================
double Price = 0;
int Type = -1;
// - 6 - == Îòêðûòèå äëèííîé ïîçèöèè ====================================================
if (Signal == 1)
{
int Res = CheckOrdersReal(OP_SELL);
RefreshRates();
if (Res == 0) // åñëè íåò îòêðûòûõ ïîçèöèé
{
Price = ND(Ask);
double TP = ND(IF(TakeProfit > StopLevel/Point, Price+TakeProfit*Tick,
Price + StopLevel));
double SL = ND(IF(StopLoss > (StopLevel+Spread)/Point, Price-StopLoss*Tick,
Price - StopLevel-Spread));
Type = OP_BUY;
}
if (Res == 1) return(0); // íå óäàëîñü çàêðûòü ïðîòèâîïîëîæíóþ
}
// - 6 - == Îêîí÷àíèå áëîêà ============================================================
// - 7 - == Óñòàíîâêà îðäåðà SellStop ===================================================
if (Signal == 2)
{
Res = CheckOrdersReal(OP_BUY);
if (Res == 0) // åñëè íåò îòêðûòûõ ïîçèöèé
{
RefreshRates();
Price = ND(Bid);
TP = ND(IF(TakeProfit > StopLevel/Point, Price-TakeProfit*Tick,
Price - StopLevel));
SL = ND(IF(StopLoss > (StopLevel+Spread)/Point, Price+StopLoss*Tick,
Price + StopLevel + Spread));
Type = OP_SELL;
}
if (Res == 1) return(0); // íå óäàëîñü çàêðûòü ïðîòèâîïîëîæíóþ
}
// - 7 - == Îêîí÷àíèå áëîêà ============================================================
if (Type >= 0)
if (!OpenOrder(Type, Price, SL, TP)) // åñëè íå óäàëîñü óñòàíîâèòü îðäåð
return(0); // òî ïîïðîáóåì ñî ñëåäóþùèì òèêîì
LastBar = Time[0];
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
---