Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Планируешь заказать программу? Узнай, как получить желаемый результат
Кирилл
92
Кирилл 2011.10.21 08:01 

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

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

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

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

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

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

Файлы:
tral.mq4 4 kb
khorosh
8048
khorosh 2011.10.21 08:49  

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



//+------------------------------------------------------------------+
//| Обнаружение нового бара
//+------------------------------------------------------------------+
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
Сергей 2011.10.21 10:21  

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

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

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

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

Актер
2301
Актер 2011.10.21 11:26  
hhohholl:

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

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

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

Всегда ли?
Кирилл
92
Кирилл 2011.10.26 13:38  

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

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

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


PapaYozh
3768
PapaYozh 2011.10.26 14:45  
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
8048
khorosh 2011.10.26 14:55  
LenIFCHIK:

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

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

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


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

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