Bene, ogni tick, le nuove informazioni passano, ogni tick il segnale di acquisto passa, ma il server cerca di accedere in quel momento (durante i tick).
1. questo è una specie di fenomeno normale e naturale.
2. non c'è modo di saperlo. Molto spesso la connessione si perde per qualche secondo.
In un mese di test con questo broker, è la prima volta che succede, anche se ho già notato 4 problemi con loro - probabilmente è il momento di cercarne un altro:)
artmedia70: Non hai bisogno di una bandiera. La bandiera può essere persa in situazioni anomale. È meglio controllare - se c'è una posizione aperta e, se c'è - oltre
Oh, penso di aver capito. Ho capito la logica, quindi ecco cosa ho fatto. Tuttavia, quando lo compilo, ottengo un errore ')'. - l'assegnazione si aspetta D:\Alpari\experts\Sp.mq4 (160, 92). Ho controllato tutte le parentesi dieci volte - non riesco a trovare l'errore. Una specie di poltergeist del cazzo. artmedia70, se non ti dispiace dimmi dov'è l'errore.
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);
}
Bene, ogni tick, le nuove informazioni passano, ogni tick il segnale di acquisto passa, ma il server cerca di accedere in quel momento (durante i tick).
Allora, lascia stare, che c'è di male?
Ma semmai c'è una funzione IsConnected();
Quindi lascia stare, qual è il problema?
Ma semmai c'è la funzione IsConnected();
beh, la cosa peggiore che è successa è che il commercio positivo non si è aperto:)
Ma vorrei sapere cosa è successo veramente - se il broker stava facendo casino o se c'era un problema da parte mia.
1. beh, la cosa peggiore che è successa è che non si è aperto un trade positivo:)
2. Ma vorrei sapere cosa è successo veramente - se il broker stava facendo casino o c'era un problema da parte mia.
1. è una specie di fenomeno normale e naturale.
Non c'è modo di saperlo. Spesso si perde la connessione per qualche secondo.
1. questo è una specie di fenomeno normale e naturale.
2. non c'è modo di saperlo. Molto spesso la connessione si perde per qualche secondo.
In un mese di test con questo broker, è la prima volta che succede, anche se ho già notato 4 problemi con loro - probabilmente è il momento di cercarne un altro:)
Grazie per le vostre risposte).
Guardi mai quello che hai scritto?!
Qualcosa mi dice che "il cane è qui":
Grazie, ho capito.
Non hai bisogno di una bandiera. La bandiera può essere persa in situazioni anomale. È meglio controllare - se c'è una posizione aperta e, se c'è - oltre
Oh, penso di aver capito. Ho capito la logica, quindi ecco cosa ho fatto. Tuttavia, quando lo compilo, ottengo un errore ')'. - l'assegnazione si aspetta D:\Alpari\experts\Sp.mq4 (160, 92). Ho controllato tutte le parentesi dieci volte - non riesco a trovare l'errore. Una specie di poltergeist del cazzo. artmedia70, se non ti dispiace dimmi dov'è l'errore.
è un po' strano.
Per favore, ditemi se questa funzione è scritta correttamente.
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);
}