artmedia70: Не надо флаг. Флаг можно потерять при нештатных ситуациях. Лучше проверить - есть ли открытая позиция и, если есть - далее
О, вроде разобрался. Логику понял, вот чего навоял. Однако, при компиляции выдает ошибку ')' - assignment expected D:\Àëüïàðè\experts\Sp.mq4 (160, 92). Десять раз проверил все скобки - не могу найти ошибку. Полтергейст какой-то долбаный. artmedia70, если не сложно подскажи где ошибка.
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);
}
выправил чтобы компилировался - и пользуйтесь 555 билда мт4 эдитором - он реально помогает искать проблемы быстро. только инструкцию почитайте перед установкой - страниц 15 первых.
Ну вот же, каждый тик, новая информация проходит, каждый тик сигнал на бай идёт, но сервер в этот момент пытается залогинится.(во время тиков)
Ну и пускай, что в этом страшного?
Но если что, имеется функция IsConnected();
Ну и пускай, что в этом страшного?
Но если что, имеется функция IsConnected();
ну самое страшное, что случилось - положительная сделка не открылась:)
А так, хотелось бы узнать что на самом деле произошло - брокер что-то мутит или уж проблема с моей стороны была.
1. ну самое страшное, что случилось - положительная сделка не открылась:)
2. А так, хотелось бы узнать что на самом деле произошло - брокер что-то мутит или уж проблема с моей стороны была.
1. Это как бы нормальное, естественное явление.
2. Это никак не узнать. Очень часто на несколько секунд пропадает соеднинение.
1. Это как бы нормальное, естественное явление.
2. Это никак не узнать. Очень часто на несколько секунд пропадает соеднинение.
За месяц теста на этом брокере, первый раз такое случилось, хотя уже 4 косяка за ними заметил - видимо пора другого подыскивать:)
Спасибо за ответы!)
Вы когда-нибудь смотрите то, что написали?!
Что-то мне подсказывает, что "здесь собака порылась":
Пасиб)Разобрался.
Не надо флаг. Флаг можно потерять при нештатных ситуациях. Лучше проверить - есть ли открытая позиция и, если есть - далее
О, вроде разобрался. Логику понял, вот чего навоял. Однако, при компиляции выдает ошибку ')' - assignment expected D:\Àëüïàðè\experts\Sp.mq4 (160, 92). Десять раз проверил все скобки - не могу найти ошибку. Полтергейст какой-то долбаный. artmedia70, если не сложно подскажи где ошибка.
как-то странно.
Подскажите пож правильно ли написаны функции.
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);
}