Orders Execution
0
Views
0
Downloads
0
Favorites
Profitability Reports
AUD/USD
Oct 2024 - Jan 2025
82.00 %
Total Trades
14
Won Trades
0
Lost trades
0
Win Rate
0.00 %
Expected payoff
-1.02
Gross Profit
65.70
Gross Loss
-80.00
Total Net Profit
-14.30
-100%
-50%
0%
50%
100%
GBP/USD
Oct 2024 - Jan 2025
29.00 %
Total Trades
13
Won Trades
5
Lost trades
8
Win Rate
0.38 %
Expected payoff
-8.75
Gross Profit
46.20
Gross Loss
-160.00
Total Net Profit
-113.80
-100%
-50%
0%
50%
100%
Sadukey_exp
//+------------------------------------------------------------------+
//| Sadukey_exp.mq4 |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, "
#property link ""
#include <stdlib.mqh>
extern int TakeProfit = 300;
extern int StopLoss = 200;
extern int TrailingStop = 120;
extern int TrailingStep = 20;
extern bool CloseOppositePosition = false;
extern double Lots = 0.1; // ëîò
extern int Slippage = 1;
extern string s______ = "Ïàðàìåòðû èíäèêàòîðà Stoch";
extern int KPeriod = 30;
extern int Slowing = 10;
extern int DPeriod = 10;
extern string note4 = "0=sma, 1=ema, 2=smma, 3=lwma";
extern int MAMethod = 0;
extern string note5 = "0=high/low, 1=close/close";
extern int PriceField = 1;
extern string note6 = "overbought level";
extern int overBought = 60;
extern string note7 = "oversold level";
extern int overSold = 40;
#define Buy 0
#define Sell 1
#define Unknown 2
#define Up 0
#define Dn 1
double spread;
int BuyMagic = 5124000;
int SellMagic = 51250000;
bool CanOpenBuy = true;
bool CanOpenSell = true;
int prevBars = -1;
int init()
{
spread = Ask - Bid;
CanOpenBuy = true;
CanOpenSell = true;
BuyMagic = 5124000;
SellMagic = 5125000;
prevBars = -1;
RunIndicator();
return(0);
}
int start()
{
DoTrail();
int curBars = iBars(Symbol(), Period());
if (prevBars == -1)
{
prevBars = curBars;
}
if (curBars == prevBars)
{
return;
}
// ïîÿâèëñÿ íîâûé áàð
prevBars = curBars;
double Stoch = iCustom(Symbol(), 0, "Color Stochastic", "", KPeriod, Slowing, DPeriod, "", MAMethod, "", PriceField, "", overBought, "", overSold, 1, 1);
double Filter1 = iCustom(Symbol(), 0, "Figure", 0, 1);
double Filter2 = iCustom(Symbol(), 0, "Figure", 2, 1);
double Filter3 = iCustom(Symbol(), 0, "Figure", 3, 1);
int Direction;
if(Filter1 > Filter3 && Filter2 > Filter3)
{
CanOpenSell = true;
if(Filter1 > Filter2 && Filter2 > Filter3)
{
Direction = Up;
}
else
{
Direction = Unknown;
}
}
else if(Filter1 < Filter3 && Filter2 < Filter3)
{
CanOpenBuy = true;
if(Filter1 < Filter2 && Filter2 < Filter3)
{
Direction = Dn;
}
else
{
Direction = Unknown;
}
}
else
{
Direction = Unknown;
}
if(CanOpenBuy && Stoch >= overBought && Direction == Up)
{
if(CloseOppositePosition)
{
CloseAllSell();
}
CanOpenBuy = false;
OpenBuy();
}
if(CanOpenSell && Stoch <= overSold && Direction == Dn)
{
if(CloseOppositePosition)
{
CloseAllBuy();
}
CanOpenSell = false;
OpenSell();
}
return(0);
}
// ôóíêöèÿ ïðîãîíÿåò èíäèêàòîð íà èñòîðèè äî òåêóùåãî ìîìåíòà äëÿ òîãî, ÷òîá óñòàíîâèòü òåêóùåå íàïðàâëåíèå èíäèêàòîðà è
// óñòàíîâèòü ïðàâèëüíûå çíà÷åíèÿ ïåðåìåííûõ, îòâå÷àþùèõ çà òîðãîâëþ
void RunIndicator()
{
int i;
for(i = 100; i >= 1; i--)
{
double Stoch = iCustom(Symbol(), 0, "Color Stochastic", "", KPeriod, Slowing, DPeriod, "", MAMethod, "", PriceField, "", overBought, "", overSold, 1, i);
double Filter1 = iCustom(Symbol(), 0, "Figure", 0, i);
double Filter2 = iCustom(Symbol(), 0, "Figure", 2, i);
double Filter3 = iCustom(Symbol(), 0, "Figure", 3, i);
int Direction;
if(Filter1 > Filter3 && Filter2 > Filter3)
{
CanOpenSell = true;
if(Filter1 > Filter2 && Filter2 > Filter3)
{
Direction = Up;
}
else
{
Direction = Unknown;
}
}
else if(Filter1 < Filter3 && Filter2 < Filter3)
{
CanOpenBuy = true;
if(Filter1 < Filter2 && Filter2 < Filter3)
{
Direction = Dn;
}
else
{
Direction = Unknown;
}
}
else
{
Direction = Unknown;
}
if(CanOpenBuy && Stoch >= overBought && Direction == Up)
{
CanOpenBuy = false;
}
if(CanOpenSell && Stoch <= overSold && Direction == Dn)
{
CanOpenSell = false;
}
}
}
void OpenBuy()
{
int i;
int Orders = OrdersTotal();
double BuyOpen;
double BuyTP = 0;
double BuySL = 0;
RefreshRates();
BuyOpen = Ask;
if(TakeProfit != 0)
BuyTP = BuyOpen + TakeProfit*Point;
if(StopLoss != 0)
{
BuySL = BuyOpen - StopLoss*Point;
}
//----------------------------------
datetime begin = TimeCurrent();
int ticket = OrderSend(Symbol(), OP_BUY, Lots, BuyOpen, Slippage, BuySL, BuyTP, "", BuyMagic, 0, Blue);
int error;
if (ticket==-1)
{
while(ticket == -1 && TimeCurrent() - begin < 20)
{
error = GetLastError();
Print("Îøèáêà îòêðûòèÿ îðäåðà BUY. " + ErrorDescription(error));
Sleep(100);
Print("Ïîâòîð");
RefreshRates();
BuyOpen = Ask;
if(TakeProfit != 0)
BuyTP = BuyOpen + TakeProfit*Point;
if(StopLoss != 0)
{
BuySL = BuyOpen - StopLoss*Point;
}
ticket = OrderSend(Symbol(), OP_BUY, Lots, BuyOpen, Slippage, BuySL, BuyTP, "", BuyMagic, 0, Blue);
}
if(ticket == -1)
{
error = GetLastError();
Print("Îøèáêà îòêðûòèÿ îðäåðà BUY. " + ErrorDescription(error));
}
}
if (ticket != -1)
{
Print("Îòêðûòî BUY íà " + Symbol() + " " + Period() + " îáúåìîì " + Lots + "!");
}
}
void OpenSell()
{
int i;
int Orders = OrdersTotal();
double SellOpen;
double SellTP = 0;
double SellSL = 0;
RefreshRates();
SellOpen = Bid;
if(TakeProfit != 0)
SellTP = SellOpen - TakeProfit*Point;
if(StopLoss != 0)
{
SellSL = SellOpen + StopLoss*Point;
}
datetime begin = TimeCurrent();
int ticket = OrderSend(Symbol(), OP_SELL, Lots, SellOpen, Slippage, SellSL, SellTP, "", SellMagic, 0, Red);
int error;
if (ticket==-1)
{
//error=GetLastError();
//Print("SELL error(",error,"): ",ErrorDescription(error));
while(ticket == -1 && TimeCurrent() - begin < 20)
{
error = GetLastError();
Print("Îøèáêà îòêðûòèÿ îðäåðà SELL. " + ErrorDescription(error));
Sleep(100);
Print("Ïîâòîð");
RefreshRates();
SellOpen = Bid;
if(TakeProfit != 0)
SellTP = SellOpen - TakeProfit*Point;
if(StopLoss != 0)
{
SellSL = SellOpen + StopLoss*Point;
}
ticket = OrderSend(Symbol(), OP_SELL, Lots, SellOpen, Slippage, SellSL, SellTP, "", SellMagic, 0, Red);
}
if(ticket == -1)
{
error = GetLastError();
Print("Îøèáêà îòêðûòèÿ îðäåðà SELL. " + ErrorDescription(error));
}
}
if (ticket != -1)
{
Print("Îòêðûòî SELL íà " + Symbol() + " " + Period() + " îáúåìîì " + Lots + "!");
}
}
void DoTrail()
{
double TickSize = 0;
if(Digits == 5)
{
TickSize = 0.00005;
}
else
{
TickSize = 0;
}
for (int i=0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol())
{
if(OrderType() == OP_BUY)
{
if(OrderMagicNumber() == BuyMagic)
{
double newstop = (Bid - MathMod(Bid, TickSize)) - (TrailingStop*Point - MathMod(TrailingStop*Point, TickSize));
if(newstop > OrderOpenPrice() && (OrderOpenPrice() > OrderStopLoss() || OrderStopLoss() == 0))
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), newstop, OrderTakeProfit(), 0, Pink))
{
Print("Íå ïîëó÷èëîñü ìîäèôèöèðîâàòü îðäåð ¹" + OrderTicket() + ". Îøèáêà¹" + GetLastError());
}
}
else if (OrderStopLoss() > OrderOpenPrice() && newstop - OrderStopLoss() >= TrailingStep*Point)
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), newstop, OrderTakeProfit(), 0, Pink))
{
Print("Íå ïîëó÷èëîñü ìîäèôèöèðîâàòü îðäåð ¹" + OrderTicket() + ". Îøèáêà¹" + GetLastError());
}
}
}
}
else if (OrderType() == OP_SELL)
{
if(OrderMagicNumber() == SellMagic)
{
newstop = (Ask - MathMod(Ask, TickSize)) + (TrailingStop*Point - MathMod(TrailingStop*Point, TickSize));
if(newstop < OrderOpenPrice() && (OrderStopLoss() > OrderOpenPrice() || OrderStopLoss() == 0))
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), newstop, OrderTakeProfit(), 0 ,Pink))
{
Print("Íå ïîëó÷èëîñü ìîäèôèöèðîâàòü îðäåð ¹" + OrderTicket() + ". Îøèáêà¹" + GetLastError());
}
}
else if(OrderStopLoss() < OrderOpenPrice() && OrderStopLoss() - (newstop) >= TrailingStep*Point)
{
if(!OrderModify(OrderTicket(), OrderOpenPrice(), newstop, OrderTakeProfit(), 0 ,Pink))
{
Print("Íå ïîëó÷èëîñü ìîäèôèöèðîâàòü îðäåð ¹" + OrderTicket() + ". Îøèáêà¹" + GetLastError());
}
}
}
}
}
}
}
void CloseAllSell()
{
int i;
int orders = OrdersTotal();
bool result;
datetime begin;
if(orders > 0)
{
for(i = orders-1; i >= 0; i--)
{
if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES) )
{
if(OrderSymbol() == Symbol() && OrderType() == OP_SELL && OrderMagicNumber() == SellMagic)
{
begin = TimeCurrent();
result = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Yellow); // çàêðûâàåì âñå âñòðå÷íûå îðäåðà
while(!result && TimeCurrent() - begin <= 30 && !IsTesting())
{
Sleep(100);
RefreshRates();
result = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Yellow); // çàêðûâàåì âñå âñòðå÷íûå îðäåðà
}
if(!result)
{
int error = GetLastError();
Print("Îøèáêà çàêðûòèÿ îðäåðà SELL #" + OrderTicket() + " " + ErrorDescription(error));
}
}
}
else
{
Print("Íå óäàëîñü âûáðàòü îòêðûòûé îðäåð:" + ErrorDescription(error));
}
}
}
}
void CloseAllBuy()
{
int i;
int Orders = OrdersTotal();
bool result;
datetime begin;
if(Orders > 0)
{
for(i = Orders-1; i >= 0; i--)
{
if( OrderSelect(i, SELECT_BY_POS, MODE_TRADES) )
{
if(OrderSymbol() == Symbol() && OrderType() == OP_BUY && OrderMagicNumber() == BuyMagic)
{
begin = TimeCurrent();
result = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Yellow); // çàêðûâàåì âñå âñòðå÷íûå îðäåðà
while(!result && TimeCurrent() - begin <= 30 && !IsTesting())
{
Sleep(100);
RefreshRates();
result = OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Yellow); // çàêðûâàåì âñå âñòðå÷íûå îðäåðà
}
if(!result)
{
int error = GetLastError();
Print("Îøèáêà çàêðûòèÿ îðäåðà BUY #" + OrderTicket() + " " + ErrorDescription(error));
}
}
}
else
{
Print("Íå óäàëîñü âûáðàòü îòêðûòûé îðäåð:" + ErrorDescription(error));
}
}
}
}
int deinit()
{
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
---