Помогите доработать советник

 

Решил написать небольшой советник со следующим принципом действия.

При наличии отложенного ордера на открытии каждой последующей свечи советник перетаскивает цену открытия предстоящей позиции и стоп-лосс.

При наличии открытого ордера на октрытии каждой последующей свечи советник перетаскивает стоп-лосс.

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

Так вот, проблема в том, что алгоритм определения начала отрисовки новой свечи не работает. Что самое интересное - он взят из стандартного учебника по mql4 =)))

Буду очень признателен, если кто-нибудь поможет разобраться!

Файлы:
tral.mq4  4 kb
 

Скорректируйте так:



//+------------------------------------------------------------------+
//| Обнаружение нового бара
//+------------------------------------------------------------------+
bool NewBar(int tfNewBar) 
  {
//----
   static datetime NewTime;               // Время текущего бара
   bool NewBar=false;                     // Нового бара нет
   if( NewTime!=iTime(Symbol(),tfNewBar,0))
     {
      NewTime=iTime(Symbol(),tfNewBar,0); // Теперь время такое
      NewBar=true;                        // Поймался новый бар
     }
//----
   return(NewBar);
  }
//+------------------------------------------------------------------+ 
int start()
  {
   if(NewBar(tfNewBar))
         {
          // тело эксперта
            ...
 

Не помню кто, из здешних, предложил так:

if (iVolume(Symb, PERIOD_M1, 0)< 2)
 {
    // тело
 }

Есс-но период - требуемый.

У меня работает

 
hhohholl:

Не помню кто, из здешних, предложил так:

Есс-но период - требуемый.

У меня работает

Всегда ли?
 

Вариант, предложенный khorosh почему-то вообще не подаёт признаков жизни.

Версия hhohholl срабатывает, но советника хватает только на вывод алерта "Ордер не найден".

Ума не приложу, в чём ошибка. Вроде бы суть советника предельно проста=(((


 
LenIFCHIK:

Вариант, предложенный khorosh почему-то вообще не подаёт признаков жизни.

Версия hhohholl срабатывает, но советника хватает только на вывод алерта "Ордер не найден".

Ума не приложу, в чём ошибка. Вроде бы суть советника предельно проста=(((

Вариант от Хороша не работает, вероятно, потому, что Вы что-нибудь не так вставили.

Исправьте свой вариант:

bool New_Bar;
void Fun_New_Bar()                                       // Ф-ия обнаружения ..  
   {                                                     // .. нового бара   
      static datetime New_Time=0;                        // Время текущего бара   
      New_Bar=false;                                // Нового бара нет   
      if(New_Time!=Time[0])                              // Сравниваем время     
         {      
            New_Time=Time[0];                            // Теперь время такое      
            New_Bar=true;                                // Поймался новый бар     
         }  
   }

int start()
  {
      int i;
      string message;
      
      Fun_New_Bar();
      if (New_Bar==false)                             // Если бар не новый..      
         return;                                      // ..выходим
      if(New_Bar==true)
         {
 
LenIFCHIK:

Вариант, предложенный khorosh почему-то вообще не подаёт признаков жизни.

Версия hhohholl срабатывает, но советника хватает только на вывод алерта "Ордер не найден".

Ума не приложу, в чём ошибка. Вроде бы суть советника предельно проста=(((


Ищите причину в теле эксперта. Тикет у вас = 0, i = 0. Цикл перебора ордеров куда дели?

 for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
Причина обращения: