2. there is no way of knowing. Very often the connection is lost for a few seconds.
In a month of testing with this broker, it's the first time it's happened, although I've already noticed 4 problems with them - it's probably time to look for another one:)
artmedia70: You don't need a flag. The flag can be lost in abnormal situations. It is better to check - whether there is an open position and, if there is - further
Oh, I think I've got it. I figured out the logic, so here's what I've done. However, when I compile it, I get an error ')'. - assignment expect D:\Alpari\experts\Sp.mq4 (160, 92). I checked all the brackets ten times - I can't find the error. Some kind of a fucking poltergeist. artmedia70, if you don't mind telling me where the error is.
externdouble Lots = 0.1;
externstring Сomment = "Pattern_1";
externint TakeProfit = 0;
externint StopLoss = 0;
externint Step = 0;
externint BULevel = 200;
externint NotBULevel = 20; // Уровень безубытка в пунктахexternint Slippage = 2; // проскальзывание externint Magic = 111;
int ticket, otype;
double TP, price;
//+------------------------------------------------------------------+//| expert initialization function |//+------------------------------------------------------------------+int init()
{
if (Digits ==3 || Digits ==5) // для пятизначного брокера
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
Step *= 10;
}
return(0);
}
//+------------------------------------------------------------------+//| expert start function |//+------------------------------------------------------------------+int start()
{
if (CountTrades()==0 && Open[1]>Close[1] && Open[2]<Close[2] && High[1]>High[2] && Low[1]<Low[2]) // продажа
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
{
TP=NormalizeDouble(Bid - TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(),0,TP,0);
}
}
elseif (CountTrades()==0 && Open[1]<Close[1] && Open[2]>Close[2] && High[1]>High[2] && Low[1]<Low[2]) // покупка
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);
if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
{
TP=NormalizeDouble(Ask + TakeProfit * Point, Digits);
OrderModify(ticket, OrderOpenPrice(),0,TP,0);
}
}
if (CountTrades()>0)
{
otype = FindLastOrderType();
if (otype == OP_BUY)
{ // ценапоследнего ордера на покупку
price = FindLastBayPrice();
if ((Bid - price) / Point >= Step)
{
ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
}
}
elseif (otype == OP_SELL)
{ // цена последнего ордера на продажу
price = FindLastSellPrice()
if ((price - Ask) / Point >= Step)
{
ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);
}
}
}
return(0);
}
//+------------------------------------------------------------------+int CountTrades() // количество открытых ордеров
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==111)
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+int FindLastOrderType() // вычисляем тип последнего ордера
{
int oticket, ticketnumber=0, OType;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==111)
{
oticket=OrderTicket();
if (oticket > ticketnumber)
{
ticketnumber = oticket;
OType = OrderType(); // самый последний тикет
}
}
}
}
return(OType);
}
//+------------------------------------------------------------------+double FindLastBayPrice() // находим цену последнего ордера на покупку
{
int oticket, ticketnumber=0;
double oprice;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==111 && OrderType() = OP_BUY)
{
oticket=OrderTicket();
if (oticket > ticketnumber)
{
ticketnumber = oticket;
oprice = OrderType(); // самый последний тикет
}
}
}
}
return(oprice);
}
//+------------------------------------------------------------------+double FindLastSellPrice() // находим цену последнего ордера на продажу
{
int oticket, ticketnumber=0;
double oprice;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
{
if (OrderSymbol()==Symbol() && OrderMagicNumber()==111 && OrderType() = OP_SELL)
{
oticket=OrderTicket();
if (oticket > ticketnumber)
{
ticketnumber = oticket;
oprice = OrderType(); // самый последний тикет
}
}
}
}
return(oprice);
}
//+------------------------------------------------------------------+void BU()
{
for(int a=0; a<OrdersTotal(); a++)
{
if (OrderSelect(a, SELECT_BY_POS))
{
if(OrderMagicNumber()!=111 || OrderSymbol()!=Symbol()) continue;
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice()<=(Bid-BULevel*Point-NotBULevel*Point)&& OrderOpenPrice()>OrderStopLoss())// последнеее условие БУ + 20 пипсов
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NotBULevel*Point,OrderTakeProfit(),0,Green);
}
}
if(OrderType() == OP_SELL)
{
if(OrderOpenPrice()>=(Ask+BULevel*Point+NotBULevel*Point)&& (OrderOpenPrice()<OrderStopLoss() || OrderStopLoss() == 0 ))// последнеее условие БУ + 20 пипсов
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NotBULevel*Point,OrderTakeProfit(),0,Red);
}
}
}
}
return(0);
}
ALXIMIKS: I fixed it to compile - and use the 555 build mt4 editor - it really helps to find problems quickly. just read the instructions before installing - the first 15 pages.
I have it, thank you. Where can I read about 555 build? Can you provide the link?
So let it be, what's the big deal?
But if anything, there is the IsConnected() function;
well the worst thing that happened was that a positive trade didn't open:)
But I would like to know what really happened - whether the broker was messing around or there was a problem on my part.
1. well, the worst thing that happened was that a positive trade did not open:)
2. But I would like to know what really happened - whether the broker was messing around or there was a problem on my part.
1. it's kind of a normal, natural phenomenon.
There is no way of knowing. You often lose the connection for a few seconds.
1. this is kind of a normal, natural phenomenon.
2. there is no way of knowing. Very often the connection is lost for a few seconds.
In a month of testing with this broker, it's the first time it's happened, although I've already noticed 4 problems with them - it's probably time to look for another one:)
Thank you for your answers!)
Do you ever watch what you've written?!
Something tells me that "this is where the dog is at":
Thanks. Got it.
You don't need a flag. The flag can be lost in abnormal situations. It is better to check - whether there is an open position and, if there is - further
Oh, I think I've got it. I figured out the logic, so here's what I've done. However, when I compile it, I get an error ')'. - assignment expect D:\Alpari\experts\Sp.mq4 (160, 92). I checked all the brackets ten times - I can't find the error. Some kind of a fucking poltergeist. artmedia70, if you don't mind telling me where the error is.
it's kind of weird.
Please tell me if this function is written correctly.
double GetLastUpperFractal()
{
double LastUpperFractalPrice = 0;
for (int i = 0; i<=Bars; i++)
{
double FractalUp = iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i);
if (FractalUp != 0) LastUpperFractalPrice = FractalUp;
}
return (LastUpperFractalPrice);
}
//+------------------------------------------------------------------+
double GetLastLowerFractal()
{
double LastLowerFractalPrice = 0;
for (int i = 0; i<=Bars; i++)
{
double FractalDown = iFractals(Symbol(),PERIOD_M5,MODE_LOWER,i);
if (FractalDown != 0) LastLowerFractalPrice = FractalDown;
}
return (LastLowerFractalPrice);
}
I fixed it to compile - and use the 555 build mt4 editor - it really helps to find problems quickly. just read the instructions before installing - the first 15 pages.
I have it, thank you. Where can I read about 555 build? Can you provide the link?