1. isto é uma espécie de fenômeno natural e normal.
2. não há como saber. Muito freqüentemente a conexão é perdida por alguns segundos.
Em um mês de testes com este corretor, é a primeira vez que isso acontece, embora eu já tenha notado 4 problemas com eles - é provavelmente a hora de procurar outro:)
artmedia70: Você não precisa de uma bandeira. A bandeira pode ser perdida em situações anormais. É melhor verificar - se há uma posição aberta e, se houver - mais
Oh, acho que consegui. Descobri a lógica, então aqui está o que fiz. Entretanto, quando o compenso, recebo um erro ')'. - missão espera D:\P.mq4 (160, 92). Verifiquei todos os parênteses dez vezes - não consigo encontrar o erro. Uma porra de poltergeist. artmedia70, se você não se importa de me dizer onde está o erro.
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);
}
Bem, a cada tique, novas informações passam, a cada tique o sinal de compra passa, mas o servidor tenta entrar nesse momento (durante os tiquetaques).
Então, deixe estar, o que há de errado com isso?
Mas se existe alguma coisa, existe uma função IsConnected();
Então deixe estar, qual é o problema?
Mas se houver alguma coisa, existe a função IsConnected();
bem, a pior coisa que aconteceu foi que o comércio positivo não se abriu:)
Mas eu gostaria de saber o que realmente aconteceu - se o corretor estava brincando ou se havia um problema de minha parte.
1. bem, a pior coisa que aconteceu foi que um comércio positivo não se abriu:)
Mas eu gostaria de saber o que realmente aconteceu - se o corretor estava brincando ou se havia um problema de minha parte.
1. é uma espécie de fenômeno normal e natural.
Não há como saber. Muitas vezes você perde a conexão por alguns segundos.
1. isto é uma espécie de fenômeno natural e normal.
2. não há como saber. Muito freqüentemente a conexão é perdida por alguns segundos.
Em um mês de testes com este corretor, é a primeira vez que isso acontece, embora eu já tenha notado 4 problemas com eles - é provavelmente a hora de procurar outro:)
Obrigado por suas respostas!)
Você já viu o que escreveu?!
Algo me diz que "é aqui que o cão está":
Obrigado. Entendi.
Você não precisa de uma bandeira. A bandeira pode ser perdida em situações anormais. É melhor verificar - se há uma posição aberta e, se houver - mais
Oh, acho que consegui. Descobri a lógica, então aqui está o que fiz. Entretanto, quando o compenso, recebo um erro ')'. - missão espera D:\P.mq4 (160, 92). Verifiquei todos os parênteses dez vezes - não consigo encontrar o erro. Uma porra de poltergeist. artmedia70, se você não se importa de me dizer onde está o erro.
é meio estranho.
Por favor, diga-me se esta função está escrita corretamente.
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;
}
retorno (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;
}
retorno (LastLowerFractalPrice);
}