Jump to content

Ошибка в советнике


analitik8888

Recommended Posts

analitik8888

Доброго времени суток! С февраля начал изучать MQL и застопорился на одном советнике... Торгует по линиям индикатора Bands. Если цена около нижней линии - покупаем, около верхней - продаём. Закрываем ордера, если цена достигла средней.

ошибки: Не открываются ордера на BUY и закрытие ордеров идёт на более поздних барах. Как это можно исправить?

int start()
 {
  sr =iCustom("GBPJPY", 1,"Bands",BandsPeriod,BandsShift,BandsDeviations,0,0); 
  max =iCustom("GBPJPY", 1,"Bands",BandsPeriod,BandsShift,BandsDeviations,1,0); 
  min =iCustom("GBPJPY", 1,"Bands",BandsPeriod,BandsShift,BandsDeviations,2,0); 

  if (MathAbs(min-Ask)<0.005 && countb() == 0) OrderSend("GBPJPY",OP_BUY,lots,Ask,prosk,0,0,NULL,magic,0);
  if (MathAbs(Bid-max)<0.005 && counts() == 0) OrderSend("GBPJPY",OP_SELL,lots,Bid,prosk,0,0,NULL,magic,0);
  if (MathAbs(Bid-sr)<0.01 && countb() !=0) deleteb();
  if (MathAbs(Ask-sr)<0.01 && counts() !=0) deletes(); 
  return(0);
 }
int countb ()
{
     int count = 0;
     for (int trade = OrdersTotal()-1; trade>=0; trade--)
      {
         OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
         if (OrderSymbol() == "GBPJPY" && OrderMagicNumber() == magic && OrderType()== OP_BUY )
         count++;
      }
      return(count);
}
void deleteb()
{
        for (int trade = OrdersTotal()-1;trade>=0;trade--)
         {
            OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
             if (OrderSymbol() == "GBPJPY" && OrderMagicNumber() == magic && OrderType()== OP_BUY )
              OrderClose(OrderTicket(),lots, Bid,prosk);
         }
}

Функции counts(), countb() считают количество открытых ордеров по валютной паре на SELL и BUY соответственно. deletes() и deleteb() закрывают.

post-95765-1404220786,7195_thumb.png

Link to post
Share on other sites
AntFX

Скорее всего вы просто не учитываете, что график, который вы видите на экране, это не тот график, по которому открываются ордера на Бай и закрываются ордера на Селл. Это тот график, по которому открываются ордера на Селл и закрываются ордера на Бай. От этого и разница. А поскольку период самый маленький М1, да и пара с не маленькими спредами, то и разница между графиками выходит существенная.


1

Link to post
Share on other sites
analitik8888

Здравствуйте! Делаю так, чтобы обрабатывались только тики, время прихода которых только с 11:00 до 21:00.

if ((TimeHour(TimeCurrent())>10) && (TimeHour(TimeCurrent()<22)))
 {
  ...
 }
else
 {
  ...
 }

Просто проверил, чтобы час последнего известного времени попадал в соответствующие границы, но почему-то в тело ифа и в случай иначе вообще не заходит. Может быть что-то забыл учесть? Благодарю за внимание.

Link to post
Share on other sites
analitik8888
Скорее всего вы просто не учитываете, что график, который вы видите на экране, это не тот график, по которому открываются ордера на Бай и закрываются ордера на Селл. Это тот график, по которому открываются ордера на Селл и закрываются ордера на Бай. От этого и разница. А поскольку период самый маленький М1, да и пара с не маленькими спредами, то и разница между графиками выходит существенная.

Да, точно) Совсем про спред забыл) Спасибо)

Link to post
Share on other sites
analitik8888

ой... ошибку нашёл)

Link to post
Share on other sites
  • Capman locked this topic
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...