#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//----------Переменные-----------------------------------------------
input double Lot = 0.01; //Размер лота
input int Slippage = 150; //Величина проскальзвания
input int Magic = 1; //Мэджик
input int TakeProfit = 300; //Тейк-профит в пунктах
input int StopLoss = 300; //Стоп-лосс в пунктах
input int MA1 = 3; //Период первого мувинга
input int MA2 = 20; //Период второго мувинга
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double tp=NormalizeDouble(TakeProfit*_Point,_Digits); //Нормализация значения тейк-профита
double sl=NormalizeDouble(StopLoss*_Point,_Digits); //Нормализация значения стоп-лосса
//+------------------------------------------------------------------+
//| Подсчет открытых ордеров |
//+------------------------------------------------------------------+
int sellorders = 0;
int buyorders = 0;
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
if(OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
buyorders++;
if(OrderType()==OP_SELL)
sellorders++;
}
}
//+------------------------------------------------------------------+
//| Условия для открытия позиции |
//+------------------------------------------------------------------+
double ma1=iMA(_Symbol,0,MA1,0,MODE_EMA,PRICE_CLOSE,1);
double ma2=iMA(_Symbol,0,MA2,0,MODE_EMA,PRICE_CLOSE,1);
if(buyorders==0 && ma1>ma2)
{
int tik=OrderSend(_Symbol,OP_BUY,Lot,Ask,Slippage,0,0,"",Magic,0,clrGreen);
if(tik>0)
Print("Ордер BUY открыт");
else
Print("Ордер BUY отклонен");
}
if(sellorders==0 && ma1<ma2)
{
int tik=OrderSend(_Symbol,OP_SELL,Lot,Bid,Slippage,0,0,"",Magic,0,clrRed);
if(tik>0)
Print("Ордер SELL открыт");
else
Print("Ордер SELL отклонен");
}
//+------------------------------------------------------------------+
//| Модификация ордеров. Установка тейк-профита и стоп-лосса |
//+------------------------------------------------------------------+
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
if(OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
if(OrderStopLoss()==0 && OrderTakeProfit()==0)
if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-sl,_Digits),NormalizeDouble(OrderOpenPrice()+tp,_Digits),0,clrBlue)==true)
Print("Modify is OK!");
else
Print("Modify is not OK!");
if(OrderType()==OP_SELL)
if(OrderStopLoss()==0 && OrderTakeProfit()==0)
if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+sl,_Digits),NormalizeDouble(OrderOpenPrice()-tp,_Digits),0,clrOrange)==true)
Print("Modify is OK!");
else
Print("Modify is not OK!");
}
}
//+------------------------------------------------------------------+
//| Условия для закрытия ордеров по обратному сигналу |
//+------------------------------------------------------------------+
for(int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS)==true)
if(OrderMagicNumber()==Magic)
{
if(OrderType()==OP_BUY)
if(buyorders>0 && ma1<ma2)
if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,_Digits),Slippage,clrAqua)==true)
Print("Ордер BUY закрыт");
else
Print("Ордер BUY не закрыт");
if(OrderType()==OP_SELL)
if(sellorders>0 && ma1>ma2)
if(OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,_Digits),Slippage,clrAqua)==true)
Print("Ордер SELL закрыт");
else
Print("Ордер SELL не закрыт");
}
}
}