Эксперт не правильно работает

 
 Здравствуйте. Написал эксперта на тестере работает нормально в реале не работает, хотя сигналы в эксперт на открытия ставок получает через глобальные переменые так что я вижу что сигнал есть а он не реагирует. в чем может быть проблема?
 
Запрещена работа экспертов у брокера? Или просто криво написан сам эксперт?
Гадание на кофейной гуще...
 
int start() 
  {
     if(OpenShort()==1)
     if(IfOpenPoz()!=1)
     Sell();
     
     if(OpenLong()==1)
     if(IfOpenPoz()!=1)
     Buy();
     BuySellRevers();
  }
int Buy()
{
    OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0);
}
 
int Sell ()
{
     OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0);  
}
 
int IfOpenPoz()
{
  for(int i=0;i<OrdersTotal();i++)
     {
       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)  
       if(OrderSymbol()==Symbol())
         {
              return(1);
         }
      }
}
 
int BuySellRevers()
{
int TP,SL;
  for(int i=0;i<OrdersTotal();i++)
     {            
      
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)  
      if(OrderSymbol()==Symbol())
        {
           if(OrderType()==OP_SELL && OpenLong()==1)
             {
              if(SecondsAfterOpenLastPos()>3600)
              if(OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE))
                {
                  i=i-1;
                   
                     TIKET=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0);
                                      
                  return(1);
                  break;
                }
             }  
            if(OrderType()==OP_BUY && OpenShort()==1)
            {
                if(SecondsAfterOpenLastPos()>3600)
                if(OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE))
                  {
                    i=i-1;
                       TIKET=OrderSend(Symbol(),OP_SELL,0.1,Bid,3,0,0);
                                              
                       return(2);
                    break;
                  }  
             }  
        }
     }
return(0);  
}
int OpenLong()
{
    if(GlobalVariableGet(Symbol()+"UpGo")==1)      
      {
          return(1);
      }else{return(0);}
}
 
int OpenShort()
{
 
  if(GlobalVariableGet(Symbol()+"DownGo")==1) 
     { 
          return(1);
     }else{return(0);}
}
datetime SecondsAfterOpenLastPos() 
{
  datetime oot;
  int      i, k=OrdersTotal();
 
    for (i=0; i<k; i++) 
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
    {
         if (oot<OrderOpenTime()) oot=OrderOpenTime();
    }
  }
  return(TimeCurrent()-oot);
}
вот код эксперта сигнал на покупку и продажу передаются с индикатора через глобальные переменые, что тут не так? почему когда я его только запускаю он окрывает ставку а когда поступает на разварот он игнорирует хотя новый сигнал в глобальной переменой есть?
 
Так как функции Buy и Sell() не возвращают значения, то должны быть описаны как void Buy() и void Sell(), либо в конце тела надо вставить return.
А функция IfOpenPoz(), может случится так, возвратит неопределенное значение. В конце тела этой функции надо поставить return(0).
Ну и на аналогичные ошибки проверьте остальные функции.
 

...И все таки bool это true и false а не 1 и 0 - нужно исправить соответствующие return

 
Itso:

...И все таки bool это true и false а не 1 и 0 - нужно исправить соответствующие return

это не принципиально 1- истина 0 - ложь
 
colci:
Itso:

...И все таки bool это true и false а не 1 и 0 - нужно исправить соответствующие return

это не принципиально 1- истина 0 - ложь

'Преобразование bool к int - значения'
 

А может ему просто разрешить торговать?

"В мужчине заложено чувство ритма. Нужно только ему разрешить" (М.Жв.)

 
SK. писал (а):

А может ему просто разрешить торговать?

"В мужчине заложено чувство ритма. Нужно только ему разрешить" (М.Жв.)

это я сделал в первую очередь. Я же писал выше при зауске эксперта фунция BUY или Sell открывает ставку а вот когда наступает сигнал в противоположную сторону BuySellRevers() не срабатывает хотя на тестере таких багов не замечал. Я вот дуумаю может дело в функции

SecondsAfterOpenLastPos() может она не дает ставки открыться???

 
Скажите, этот код Вы сами написали или где-то подглядели? Он по определению работать не должен. Это видно из кода. И когда я прочитал, что он, де, открывает позиции, а потом не может перевернуться, я решил, что у меня со зрением или с пониманием проблемы. Я не поленился, и загрузил этот шедевр в MetaEditor (то что не хватало объявления переменной TIKET - пустяк) , скомпилировал и запустил в тестере. О(ноль) сделок, как и положено.
 
Rosh:
Скажите, этот код Вы сами написали или где-то подглядели? Он по определению работать не должен. Это видно из кода. И когда я прочитал, что он, де, открывает позиции, а потом не может перевернуться, я решил, что у меня со зрением или с пониманием проблемы. Я не поленился, и загрузил этот шедевр в MetaEditor (то что не хватало объявления переменной TIKET - пустяк) , скомпилировал и запустил в тестере. О(ноль) сделок, как и положено.


Код я сам писал, всего эксперта я не выложил поэтому может и есть необявленые переменые, но они не как не влияют на работу эксперта.

То что он у вас на тестере не выполнил не одной сделки это понятно потомучто сигналы на открытие поступают с индикатора через глобальные переменые.

if(GlobalVariableGet(Symbol()+"DownGo")==1)

А теперь то что я заметил может тут собака зарыта когда я отключаю условие

if(SecondsAfterOpenLastPos()>3600) из функции

BuySellRevers()

то он начинает торговать. Может кто-то посмотрит что не так с фукцией SecondsAfterOpenLastPos()

она должна ограничивать число сделок до одной в час на одной валюте.

Причина обращения: