<code>//+------------------------------------------------------------------+
//| 3.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
input double Lots=0.01;
input int Tp =1000;
input int Magik=1001012;
extern int MA_Fast_Period = 50;
extern int MA_Fast_Method = 1;
extern int MA_Fast_Price = 5;
extern int MA_Slow_Period = 150;
extern int MA_Slow_Method = 1;
extern int MA_Slow_Price = 5;
extern int Sl = 500;
extern int Slippage = 3;
extern int Step = 600;
double price;
double pr1=0;
double pr2=0;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
if ( Digits == 5)
{
Slippage *= 10;
}
return (INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double MA_f_1 = iMA( Symbol(),1440, MA_Fast_Period, 0, MA_Fast_Method, MA_Fast_Price, 1);
double MA_s_2 = iMA( Symbol(),1440, MA_Slow_Period, 0, MA_Slow_Method, MA_Slow_Price, 1);
static double Upf,Lowf;
double Tupf=0,Tlowf=0;
int i,k;
for(i=1; i<5000; i++)
{
Tupf=iFractals(Symbol(),0,MODE_UPPER,i);
if(Tupf>0)
break;
}
for(k=1; k<5000; k++)
{
Tlowf=iFractals(Symbol(),0,MODE_LOWER,k);
if(Tlowf>0)
break;
}
if(countBuy()== 0 && Ask<Tlowf && Tupf!=Upf && MA_f_1 > MA_s_2)
{
if (OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-Sl*10*Point,Bid+Tp*10*Point,"",Magik,0,clrDarkBlue) < 1)
Print ("Не удалось открыть покупку");
}
if(countSell()== 0 && Bid>Tupf && Tlowf!=Lowf && MA_f_1 < MA_s_2)
{
if (OrderSend(Symbol(),OP_SELL,Lots,Ask,Slippage,Bid+Sl*10*Point,Ask-Tp*10*Point,"",Magik,0,clrRed)< 1)
Print("Can not open sell");
}
if(countBuy()>=1)
{ price = FindLastBuyPrice();
if ((price-Ask)>= Step*Point&& Ask>iHigh(NULL,1440,1))
{
if (OrderSend(Symbol(),OP_BUY,findorderBuy2lot(),Ask,Slippage,Ask-Sl*10*Point,0,"",Magik,0,clrDarkBlue) < 1)
Print ("Не удалось открыть дополнительный ордер на покупку");
ModifiOrders1();
}
}
if(countSell()>=1 )
{
price = FindLastSellPrice();
if((Bid-price)>= Step*Point&& Bid<iLow(NULL,1440,1))
{
if (OrderSend(Symbol(),OP_SELL,findorderSell2ot(),Ask,Slippage,Bid+Sl*10*Point,0,"",Magik,0,clrRed) < 1)
Print ("Не удалось открыть дополнительный ордер на Продажу");
ModifiOrders2();
}
}
}
//+-----------------------------------------------------------------+
double FindLastBuyPrice()
{
int oldticket, ticket = 0;
double oldopenprice = 0;
for (int cnt = OrdersTotal()-1;cnt>=0; cnt --)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_BUY)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
oldopenprice = OrderOpenPrice();
}
}
}
}
return(oldopenprice);
}
//+-------------------------------------------------------------
double FindLastSellPrice()
{
int oldticket, ticket = 0;
double oldopenprice = 0;
for (int cnt = OrdersTotal()-1;cnt>=0; cnt --)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_SELL)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
oldopenprice = OrderOpenPrice();
}
}
}
}
return(oldopenprice);
}
//+-Подсчет ордеров-----------------------------------------------------------------+
int countBuy()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade >=0; trade--)
{
if (OrderSelect(trade,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber()== Magik && OrderType() == OP_BUY)
count++;
}
}
return(count);
}
//+------------------------------------------------------------------+
int countSell()
{
int count = 0;
for (int trade = OrdersTotal()-1; trade >=0; trade--)
{
if (OrderSelect(trade,SELECT_BY_POS,MODE_TRADES) == true)
{
if (OrderSymbol() == Symbol() && OrderMagicNumber()== Magik && OrderType() == OP_SELL)
count++;
}
}
return(count);
}
//+----------------убыток по ордеру-------------------------------------------------+
double OP()
{
double pr=0;
for (int cnt = OrdersTotal()-1;cnt>=0; cnt --)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik)
{
if(OrderType() ==OP_BUY)
{
pr+=OrderProfit();
}
}}}
return(pr);
}
double OP1()
{
double pr=0;
for (int cnt = OrdersTotal()-1;cnt>=0; cnt --)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik )
{
if(OrderType() ==OP_SELL)
{
pr+=OrderProfit();
}
}}}
return(pr);
}
//+----------------лот для 2 ордера покупки-------------------------------------------------+
double findorderBuy2lot()
{
double LoT1=0;
for (int cnt = OrdersTotal()-1;cnt>=0; cnt --)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_BUY)
{
LoT1=OP()/-100/2;
}}}
return (LoT1);
}
//+----------------лот для 2 ордера покупки-------------------------------------------------+
double findorderSell2ot()
{
double LoT2=0;
for (int cnt = OrdersTotal()-1;cnt>=0; cnt --)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_SELL)
{
LoT2=OP1()/-100/2;
}}}
return (LoT2);
}
//+---------------Модификацияbuy-------------------------------------------------+
void ModifiOrders1()
{double ModPrice;
for (int cnt = OrdersTotal()-1;cnt>=0; cnt --)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_BUY)
{
ModPrice=FindLastBuyPrice()+20*10*Point;
for(int i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&& OrderMagicNumber() == Magik&&OrderType() == OP_BUY)
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),0,ModPrice,NULL,clrDarkBlue))
Print("Ордера модифицированны");
else Print(ModPrice);
}
}}}}
}}
//+---------------МодификацияSell-------------------------------------------------+
void ModifiOrders2()
{
double ModPrice;
for (int cnt = OrdersTotal()-1;cnt>=0; cnt --)
{
if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magik && OrderType() ==OP_SELL)
{
ModPrice=FindLastSellPrice()-20*10*Point;
for(int i=OrdersTotal()-1; i>=0;i--)
{
if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol()&& OrderMagicNumber() == Magik&&OrderType() == OP_SELL)
{
if(OrderModify(OrderTicket(),OrderOpenPrice(),0,ModPrice,NULL,clrDarkBlue))
Print("Ордера модифицированны");
else Print(ModPrice);
}}}}}}}</code>
, Код, который вы приктрепили, если вставить в советник, то он начнет открывать сделки по принципу, или же нужно коректировать исходный код советника?
ilyask