Jump to content
Sign in to follow this  
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

Share this post


Link to post
Share on other sites
AntFX

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


1

Share this post


Link to post
Share on other sites
analitik8888

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

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

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

Share this post


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

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

Share this post


Link to post
Share on other sites
analitik8888

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×