//+------------------------------------------------------------------+
//| Moving average 2.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "mql5.com"
#property version "1.00"
#property strict
//--------------------------------------------
extern double Lots = 0.1;
extern int TakeProfit = 400;
extern int StopLoss =500;
extern int Magic =111;
extern int Slippage =3;
//--------------------------------------------
extern string Moving = "Параметры Индикатора";
extern int MAPeriod =100;
extern int MAMethod =0;
extern int MAPrice =0;
extern bool SoundAlert =true;
//--------------------------------------------
double PriceHight, PriceLow;
int ticket;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if(Digits == 3 || Digits == 5)
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
PriceHigh = iCustom(NULL, 0,"pricema_cross_alert", MAPeriod, MAMethod, MAPrice, SoundAlert, 0, 0);
PriceLow = iCustom(NULL, 0,"pricema_cross_alert", MAPeriod, MAMethod, MAPrice, SoundAlert, 1, 0);
if(CountSell() == 0 && Bid >= PriceHigh)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Moving ROBOT", Magic, 0, OrangeRed);
if (ticket >0)
{
SL =NormalizeDouble( Bid + StopLoss*Point, Digits );
TP =NormalizeDouble( Bid - TakeProfit*Point, Digits );
if (OrderSelect(ticket, SELECT_BY_TICKET))
if (OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Ошибка Модификации ордера на продажу!");
}
if(CountBuy() == 0 && Ask <= PriceLow)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "Moving ROBOT", Magic, 0, DeepSkyBlue);
if (ticket >0)
{
TP =NormalizeDouble( Ask + TakeProfit*Point, Digits );
SL =NormalizeDouble( Ask - StopLoss*Point, Digits );
if (OrderSelect(ticket, SELECT_BY_TICKET))
if (OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Ошибка Модификации Ордера на покупку!");
}
}
if (Ask <= PriceLow && CountSell () >0)
{
for(int i= OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderMagicNumber() == Magic && OrderType() == OP_SELL)
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black);
}
}
}
if (Bid >= PriceHight && CountBuy () >0)
{
for(int i= OrdersTotal() -1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderMagicNumber() == Magic && OrderType() == OP_BUY)
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black);
}
}
}
}
//+------------------------------------------------------------------+
int CountSell()
{
int count = 0;
fot(int trade = OrdersTotal ()-1; trade>=0; trade--)
{
if (OrderSelect(treade, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol () == Symbol() && OrderMagicNumber == Magic && OrderType() == OP_SELL)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int CountBuy()
{
int count = 0;
fot(int trade = OrdersTotal ()-1; trade>=0; trade--)
{
if (OrderSelect(treade, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol () == Symbol() && OrderMagicNumber == Magic && OrderType() == OP_BUY)
count++;
}
}
return(count);
//+----------------------------------------------------------------