Orders Execution
Indicators Used
Miscellaneous
0
Views
0
Downloads
0
Favorites
Delayer2
//+------------------------------------------------------------------+
//| Delayer.mq4 |
//| Copyright © 2012 by Mike Zhitnev |
//| http://Forex-Robots.ru |
//| Ñîçäàíèå òîðãîâûõ ðîáîòîâ, èíäèêàòîðîâ, ñêðèïòîâ äëÿ Âàñ! |
//| Expert advisors, indicators, scripts: admin@forex-robots.ru |
//+------------------------------------------------------------------+
// Âåðñèÿ äëÿ ðàáîòû ñî âñåìè áðîêåðàìè
#property copyright "Copyright © 2012 by Mike Zhitnev"
#property link "http://Forex-Robots.ru"
#include <stdlib.mqh>
#include <WinUser32.mqh>
extern int FastPeriod= 20; // ïåðèîä áûñòðîé MA
extern int SlowPeriod= 37; // Ïåðèîä ìåäëåííîé MA
extern double Lots = 0.1; // Îáúåì ëîòà
extern int TakeProfit =100; // Ðàçìåð òåéêïðîôèòà
extern int StopLoss = 20; // Ðàçìåð ñòîïëîññà
extern int Slippage = 2; // Ïðîñêàëüçûâàíèå ïðè îòêðûòèèçàêðûòèè îðäåðà
extern int TrallSize = 10; // Òðàëëèíã. Åñëè 0, òî îòêëþ÷åí.
extern int Delta = 20; // Îòñòóï
extern int Magic = 13238; // Ìàãèê îðäåðîâ
bool Signal;
double Price;
datetime LastTime;
//+------------------------------------------------------------------+
//| Âîçâðàùàåò òèêåò ïåðâîãî îðäåðà TYPE, îòêðûòîãî ñîâåòíèêîì |
//+------------------------------------------------------------------+
int OrderExists(int Type)
{
if (OrdersTotal()==0) return(-1);
for (int i=0; i<OrdersTotal(); i++)
if (OrderSelect(i,SELECT_BY_POS) && OrderType()==Type && OrderMagicNumber()==Magic) return(OrderTicket());
return(-1);
}
//+------------------------------------------------------------------+
//| Çàêðîåì âñå ðûíî÷íûå îðäåðà BUY |
//+------------------------------------------------------------------+
int CloseBuyOrders()
{
while (OrderExists(OP_BUY)>0)
{
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slippage, Blue);
if (PrintError(215)>0) Sleep(1000);
}
}
//+------------------------------------------------------------------+
//| Çàêðîåì âñå ðûíî÷íûå îðäåðà SELL |
//+------------------------------------------------------------------+
int CloseSellOrders()
{
while (OrderExists(OP_SELL)>0)
{
RefreshRates();
OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slippage, Red);
if (PrintError(242)>0) Sleep(1000);
}
}
//+------------------------------------------------------------------+
//| Òðàëëèì îòêðûòûå ïîçèöèè ñîâåòíèêà ñ øàãîì PIPS, |
//+------------------------------------------------------------------+
void Tralling(int Pips)
{
int n=OrdersTotal();
for(int i=0;i<n;i++)
if (OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==Magic && OrderSymbol()==Symbol())
{
double SL = OrderStopLoss();
RefreshRates();
if (OrderType()==OP_BUY && Ask>SL+(StopLoss+Pips)*Point)
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL+Pips*Point,Digits), OrderTakeProfit(), 0, Yellow);
if (OrderType()==OP_SELL && Bid<SL-(StopLoss+Pips)*Point)
OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(SL-Pips*Point,Digits),OrderTakeProfit(), 0, Yellow);
}
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
Signal = -1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Âûñòàâëÿåì îðäåð íà ïîêóïêó |
//+------------------------------------------------------------------+
int BuyMarket()
{
CloseSellOrders();
CloseBuyOrders();
RefreshRates();
double op = NormalizeDouble(Ask,Digits);
Print("Îòêðûâàåì íîâûé ðûíî÷íûé îðäåð íà ïîêóïêó ïî öåíå ASK=" + DoubleToStr(Ask,Digits));
int Ticket = OrderSend(Symbol(),OP_BUY, Lots, op, Slippage, 0, 0, "Delayer", Magic, 0 ,Blue);
if (PrintError(115)>0)
Print("Îøèáêà îòêðûòèÿ îðäåðà BUY");
else
{
OrderSelect(Ticket, SELECT_BY_TICKET);
op = OrderOpenPrice();
double tp = NormalizeDouble(op + TakeProfit*Point,Digits);
if (TakeProfit==0) tp=0;
double sl = NormalizeDouble(op - StopLoss*Point,Digits);
if (StopLoss==0) sl=0;
OrderModify(Ticket, OrderOpenPrice(), sl, tp, 0, Yellow);
Signal = -1;
}
}
//+------------------------------------------------------------------+
//| Âûñòàâëÿåì îðäåð íà ïðîäàæó |
//+------------------------------------------------------------------+
int SellMarket()
{
CloseBuyOrders();
CloseSellOrders();
RefreshRates();
double op = NormalizeDouble(Bid,Digits);
Print("Îòêðûâàåì íîâûé ðûíî÷íûé îðäåð íà ïðîäàæó ïî öåíå BID=" + DoubleToStr(Bid,Digits));
int Ticket = OrderSend(Symbol(), OP_SELL, Lots, op, Slippage, 0, 0, "Delayer", Magic, 0 ,Red);
if (PrintError(136)>0)
Print("Îøèáêà îòêðûòèÿ îðäåðà SELL");
else
{
OrderSelect(Ticket, SELECT_BY_TICKET);
op = OrderOpenPrice();
double tp = NormalizeDouble(op - TakeProfit*Point,Digits);
if (TakeProfit==0) tp=0;
double sl = NormalizeDouble(op + StopLoss*Point,Digits);
if (StopLoss==0) sl=0;
OrderModify(Ticket, OrderOpenPrice(), sl, tp, 0, Yellow);
Signal = -1;
}
}
//+------------------------------------------------------------------+
//| âûâåäåì îøèáêó â æóðíàë, ãäå Part - íîìåð ñòðîêè â êîäå |
//+------------------------------------------------------------------+
int PrintError(int Part)
{
int error = GetLastError();
if (error!=0)
{
Print("Part " + Part + "; Error " + error + ": " + ErrorDescription(error));
PlaySound("alert.wav");
}
return(error);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (TrallSize>0 && StopLoss!=0) Tralling(TrallSize);
//double Spread = MarketInfo(Symbol(),MODE_SPREAD);
if (Signal==OP_BUY && Bid>=Price+(Delta)*Point) BuyMarket();
if (Signal==OP_SELL && Bid<=Price-(Delta)*Point) SellMarket();
double CO = MathAbs(Bid-Price)/Point;
if (Signal!=-1)
Comment("Çàôèêñèðîâàííàÿ öåíà Bid ïîñëå ïåðåñå÷åíèÿ ìóâèíãîâ: " + DoubleToStr(Price,Digits) + "\n" +
"Òåêóùèé îòñòóï: " + DoubleToStr(CO, 0) + ", òðåáóåìûé: " + Delta);
else
Comment("Ñîâåòíèê îæèäàåò ïåðåñå÷åíèÿ...");
// âñå, ÷òî íèæå, áóäåò ðàáîòàòü íà ñôîðìèðîâàâøèõñÿ ñâå÷àõ
if (LastTime==Time[0]) return(0);
LastTime=Time[0];
double EMA_Fast0 = iMA(NULL, 0, FastPeriod, 0, MODE_EMA, PRICE_CLOSE, 1);
double EMA_Slow0 = iMA(NULL, 0, SlowPeriod, 0, MODE_EMA, PRICE_CLOSE, 1);
double EMA_Fast1 = iMA(NULL, 0, FastPeriod, 0, MODE_EMA, PRICE_CLOSE, 2);
double EMA_Slow1 = iMA(NULL, 0, SlowPeriod, 0, MODE_EMA, PRICE_CLOSE, 2);
// âîçíèê ñèãíàë íà ïðîäàæó
if (EMA_Fast0>EMA_Slow0 && EMA_Fast1<EMA_Slow1)
{
Signal = OP_SELL;
Price = Close[1];
Print("Çàôèêñèðîâàíî ïåðåñå÷åíèå íà ïîêóïêó, öåíà = " + DoubleToStr(Price, Digits));
PlaySound("alert.wav");
}
// âîçíèê ñèãíàë íà ïîêóïêó
if (EMA_Fast0<EMA_Slow0 && EMA_Fast1>EMA_Slow1)
{
Signal = OP_BUY;
Price = Close[1];
Print("Çàôèêñèðîâàíî ïåðåñå÷åíèå íà ïðîäàæó, öåíà = " + DoubleToStr(Price, Digits));
PlaySound("alert.wav");
}
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
---