Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Кирилл
89
Кирилл  

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

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

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

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

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

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

Файлы:
tral.mq4 4 kb
khorosh
9028
khorosh  

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



//+------------------------------------------------------------------+
//| Обнаружение нового бара
//+------------------------------------------------------------------+
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))
         {
          // тело эксперта
            ...
Сергей
256
Сергей  

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

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

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

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

Актер
2301
Актер  
hhohholl:

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

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

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

Всегда ли?
Кирилл
89
Кирилл  

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

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

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


PapaYozh
3768
PapaYozh  
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)
         {
khorosh
9028
khorosh  
LenIFCHIK:

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

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

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


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

 for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий