Условие открытия для канала

 

Есть индикатор канала. Помогите прописать правильно условие открытия сделки. Ордер должен открываться за границей канала и появлении стрелки. Никак не получается подобрать условие.


 //Открытие ордеров
  Al_1=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,0,0); //верхняя линия
  Al_2=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,1,0); //средняя линия 
  Al_3=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,2,0); //нижняя линия
  Al_4=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,3,0); //стрелка на продажу
  Al_5=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,4,0); //стрелка на куплю

  if(OrdersTotal()<1)
  {
   if(Ask>Al_1)
   {
    SL=NormalizeDouble(Ask-StopLoss*Point,Digits);
      Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SL,0,0,Magic,0,clrOrangeRed);
      if(Ticket>0)
      NumberError=GetLastError();
      Print("Ошибка(",NumberError,") открытия Buy ",Error(NumberError));
   }
  if(Bid<Al_3)
   {
    SL=NormalizeDouble(Bid+StopLoss*Point,Digits);
      Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SL,0,0,Magic,0,clrOrangeRed);
      if(Ticket>0)
      NumberError=GetLastError();
      Print("Ошибка(",NumberError,") открытия Sell ",Error(NumberError));
   }
  } 


 
Anna_89:

Есть индикатор канала. Помогите прописать правильно условие открытия сделки. Ордер должен открываться за границей канала и появлении стрелки. Никак не получается подобрать условие.



исключительно по скриншоту, в ЛОНГ:

- цена ниже нижней границы канала

- после пробития канала УЖЕ был должный сигнал

- цена достигла минимального Low после выхода из канала, отмеченного ранее сигналом

- границы канала (и центральная) не меняли направление

 
Maxim Kuznetsov:

исключительно по скриншоту, в ЛОНГ:

- цена ниже нижней границы канала

- после пробития канала УЖЕ был должный сигнал

- цена достигла минимального Low после выхода из канала, отмеченного ранее сигналом

- границы канала (и центральная) не меняли направление

цена ниже нижней границы канала -это понятно. Ask<Al_3

а вот как прописать  - цена достигла минимального Low после выхода из канала и границы канала (и центральная) не меняли направление

 
Anna_89:

Есть индикатор канала. Помогите прописать правильно условие открытия сделки. Ордер должен открываться за границей канала и появлении стрелки. Никак не получается подобрать условие.




Не понял вот этого кода

if(Ticket>0)
      NumberError=GetLastError();
      Print("Ошибка(",NumberError,") открытия Buy ",Error(NumberError));

// должно быть
if(Ticket == -1)
{
      NumberError=GetLastError();
      Print("Ошибка(",NumberError,") открытия Buy ",Error(NumberError));
}
// а еще лучше с выдачей текста ошибки вместо номера
#include <stderror.mqh>
#include <stdlib.mqh>
// узнает код последней ошибки и возвращает строку с описанием
string GetMyLastError()
{
   int err = GetLastError();
   string serr = ErrorDescription(err);
   ResetLastError();
   return(serr);
}
// и сам код
if(Ticket == -1)
{
   Print("Ошибка открытия Buy ", GetMyLastError());
}
      

***

 

Анна, прокомментируйте пожалуйста, какой буфер за что отвечает

И у меня вместо стрелок точки, очень мелкий рисунок

  Al_1=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,0,0); // вот тут вставьте комменты в каждой строчке
  Al_2=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,1,0);
  Al_3=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,2,0);
  Al_4=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,3,0);
  Al_5=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,4,0);


 **

 
Anna_89:

цена ниже нижней границы канала -это понятно. Ask<Al_3

а вот как прописать  - цена достигла минимального Low после выхода из канала и границы канала (и центральная) не меняли направление

можно проще - как только увидила снизу метку, сразу на Low поставить BuyLimit.
 
Alexey Volchanskiy:

Анна, прокомментируйте пожалуйста, какой буфер за что отвечает

И у меня вместо стрелок точки, очень мелкий рисунок


 **


добавила коментарий

 
 //Открытие ордеров
  //Al_1=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,0,0); //верхняя линия
  //Al_2=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,1,0); //средняя линия 
  //Al_3=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,2,0); //нижняя линия
  Al_4=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,3,0); //стрелка на продажу
  Al_5=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,4,0); //стрелка на куплю

  if(OrdersTotal()<1)
  {
   Al_4 = 0;
   Al_5 = 0;
   if(Al_4 > 0)
   {
    SL=NormalizeDouble(Ask-StopLoss*Point,Digits);
      Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SL,0,0,Magic,0,clrOrangeRed);
      if(Ticket>0)
      NumberError=GetLastError();
      Print("Ошибка(",NumberError,") открытия Buy ",Error(NumberError));
   }
  if(Al_5 > 0)
   {
    SL=NormalizeDouble(Bid+StopLoss*Point,Digits);
      Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SL,0,0,Magic,0,clrOrangeRed);
      if(Ticket>0)
      NumberError=GetLastError();
      Print("Ошибка(",NumberError,") открытия Sell ",Error(NumberError));
   }
  } 
Anna_89
:

Есть индикатор канала. Помогите прописать правильно условие открытия сделки. Ордер должен открываться за границей канала и появлении стрелки. Никак не получается подобрать условие.



правда нужно знать что присылает индикатор когда нет точки - если ничего не присылает (ну или присылает 0) тогда сработает и по точке будет открывать ... 

ну или поправить индикатор что бы в отсутствие сигнала присылал 0 ... 

 
elmucon:

правда нужно знать что присылает индикатор когда нет точки - если ничего не присылает (ну или присылает 0) тогда сработает и по точке будет открывать ... 

ну или поправить индикатор что бы в отсутствие сигнала присылал 0 ... 

То есть, вы уже поправили.
 
Alekseu Fedotov:
То есть, вы уже поправили.

сори - ошибочка 

 //Открытие ордеров
  //Al_1=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,0,0); //верхняя линия
  //Al_2=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,1,0); //средняя линия 
  //Al_3=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,2,0); //нижняя линия

  Al_4 = 0;
  Al_5 = 0;
  Al_4=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,3,0); //стрелка на продажу
  Al_5=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,4,0); //стрелка на куплю

  if(OrdersTotal()<1)
  {
   if(Al_5 > 0)
   {
    SL=NormalizeDouble(Ask-StopLoss*Point,Digits);
      Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SL,0,0,Magic,0,clrOrangeRed);
      if(Ticket>0)
      NumberError=GetLastError();
      Print("Ошибка(",NumberError,") открытия Buy ",Error(NumberError));
   }
  if(Al_4 > 0)
   {
    SL=NormalizeDouble(Bid+StopLoss*Point,Digits);
      Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SL,0,0,Magic,0,clrOrangeRed);
      if(Ticket>0)
      NumberError=GetLastError();
      Print("Ошибка(",NumberError,") открытия Sell ",Error(NumberError));
   }
  } 
 
Alekseu Fedotov:
То есть, вы уже поправили.

а вот вам для ошибок ... 


 //Открытие ордеров
  //Al_1=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,0,0); //верхняя линия
  //Al_2=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,1,0); //средняя линия 
  //Al_3=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,2,0); //нижняя линия

  Al_4 = 0;
  Al_5 = 0;
  Al_4=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,3,0); //стрелка на продажу
  Al_5=iCustom(NULL,0,"3 in 1 Alert",HalfLength,PRICE_MODE,ATR_PERIOD,K,4,0); //стрелка на куплю

  if(OrdersTotal()<1)
  {
   if(Al_5 > 0)
   {
    SL=NormalizeDouble(Ask-StopLoss*Point,Digits);
      Ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,SL,0,0,Magic,0,clrOrangeRed);
      if(Ticket>0)
      Print("Ошибка открытия Buy - ",ErrorDescript(GetLastError()));
   }
  if(Al_4 > 0)
   {
    SL=NormalizeDouble(Bid+StopLoss*Point,Digits);
      Ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,SL,0,0,Magic,0,clrOrangeRed);
      if(Ticket>0)
      Print("Ошибка открытия Sell - ",ErrorDescript(GetLastError()));
   }
  } 

// +----------------------------------------------------------------------+
// Коды ошибок                                                            |
// +----------------------------------------------------------------------+ 
string ErrorDescript(int error_code){
    string error_string;
    switch(error_code)
      {
      //---- Коды ошибок, возвращаемые торговым сервером:
      case 0:   error_string="Нет ошибок";                                                                                             break;
      case 1:   error_string="Нет ошибки, но результат неизвестен";                                                                    break;
      case 2:   error_string="Общая ошибка";                                                                                           break;
      case 3:   error_string="Неправильные параметры";                                                                                 break;
      case 4:   error_string="Торговый сервер занят";                                                                                  break;
      case 5:   error_string="Старая версия клиентского терминала";                                                                    break;
      case 6:   error_string="Нет связи с торговым сервером";                                                                          break;
      case 7:   error_string="Недостаточно прав";                                                                                      break;
      case 8:   error_string="Слишком частые запросы";                                                                                 break;
      case 9:   error_string="Недопустимая операция нарушающая функционирование сервера";                                              break;
      case 64:  error_string="Счет заблокирован";                                                                                      break;
      case 65:  error_string="Неправильный номер счета";                                                                               break;
      case 128: error_string="Истек срок ожидания совершения сделки";                                                                  break;
      case 129: error_string="Неправильная цена";                                                                                      break;
      case 130: error_string="Неправильные стопы";                                                                                     break;
      case 131: error_string="Неправильный объем";                                                                                     break;
      case 132: error_string="Рынок закрыт";                                                                                           break;
      case 133: error_string="Торговля запрещена";                                                                                     break;
      case 134: error_string="Недостаточно денег для совершения операции";                                                             break;
      case 135: error_string="Цена изменилась";                                                                                        break;
      case 136: error_string="Нет цен";                                                                                                break;
      case 137: error_string="Брокер занят";                                                                                           break;
      case 138: error_string="Новые цены";                                                                                             break;
      case 139: error_string="Ордер заблокирован и уже обрабатывается";                                                                break;
      case 140: error_string="Разрешена только покупка";                                                                               break;
      case 141: error_string="Слишком много запросов";                                                                                 break;
      case 145: error_string="Модификация запрещена, так как ордер слишком близок к рынку";                                            break;
      case 146: error_string="Подсистема торговли занята";                                                                             break;
      case 147: error_string="Использование даты истечения ордера запрещено брокером";                                                 break;
      case 148: error_string="Количество открытых и отложенных ордеров достигло предела, установленного брокером.";                    break;
      //---- Коды ошибок выполнения MQL4-программы:
      case 4000: error_string="Нет ошибки";                                                                                            break;
      case 4001: error_string="Неправильный указатель функции";                                                                        break;
      case 4002: error_string="Индекс массива - вне диапазона";                                                                        break;
      case 4003: error_string="Нет памяти для стека функций";                                                                          break;
      case 4004: error_string="Переполнение стека после рекурсивного вызова";                                                          break;
      case 4005: error_string="На стеке нет памяти для передачи параметров";                                                           break;
      case 4006: error_string="Нет памяти для строкового параметра";                                                                   break;
      case 4007: error_string="Нет памяти для временной строки";                                                                       break;
      case 4008: error_string="Неинициализированная строка";                                                                           break;
      case 4009: error_string="Неинициализированная строка в массиве";                                                                 break;
      case 4010: error_string="Нет памяти для строкового массива";                                                                     break;
      case 4011: error_string="Слишком длинная строка";                                                                                break;
      case 4012: error_string="Остаток от деления на ноль";                                                                            break;
      case 4013: error_string="Деление на ноль";                                                                                       break;
      case 4014: error_string="Неизвестная команда";                                                                                   break;
      case 4015: error_string="Неправильный переход";                                                                                  break;
      case 4016: error_string="Неинициализированный массив";                                                                           break;
      case 4017: error_string="Вызовы DLL не разрешены";                                                                               break;
      case 4018: error_string="Невозможно загрузить библиотеку";                                                                       break;
      case 4019: error_string="Невозможно вызвать функцию";                                                                            break;
      case 4020: error_string="Вызовы внешних библиотечных функций не разрешены";                                                      break;
      case 4021: error_string="Недостаточно памяти для строки, возвращаемой из функции";                                               break;
      case 4022: error_string="Система занята";                                                                                        break;
      case 4050: error_string="Неправильное количество параметров функции";                                                            break;
      case 4051: error_string="Недопустимое значение параметра функции";                                                               break;
      case 4052: error_string="Внутренняя ошибка строковой функции";                                                                   break;
      case 4053: error_string="Ошибка массива";                                                                                        break;
      case 4054: error_string="Неправильное использование массива-таймсерии";                                                          break;
      case 4055: error_string="Ошибка пользовательского индикатора";                                                                   break;
      case 4056: error_string="Массивы несовместимы";                                                                                  break;
      case 4057: error_string="Ошибка обработки глобальныех переменных";                                                               break;
      case 4058: error_string="Глобальная переменная не обнаружена";                                                                   break;
      case 4059: error_string="Функция не разрешена в тестовом режиме";                                                                break;
      case 4060: error_string="Функция не разрешена";                                                                                  break;
      case 4061: error_string="Ошибка отправки почты";                                                                                 break;
      case 4062: error_string="Ожидается параметр типа string";                                                                        break;
      case 4063: error_string="Ожидается параметр типа integer";                                                                       break;
      case 4064: error_string="Ожидается параметр типа double";                                                                        break;
      case 4065: error_string="В качестве параметра ожидается массив";                                                                 break;
      case 4066: error_string="Запрошенные исторические данные в состоянии обновления";                                                break;
      case 4067: error_string="Ошибка при выполнении торговой операции";                                                               break;
      case 4099: error_string="Конец файла";                                                                                           break;
      case 4100: error_string="Ошибка при работе с файлом";                                                                            break;
      case 4101: error_string="Неправильное имя файла";                                                                                break;
      case 4102: error_string="Слишком много открытых файлов";                                                                         break;
      case 4103: error_string="Невозможно открыть файл";                                                                               break;
      case 4104: error_string="Несовместимый режим доступа к файлу";                                                                   break;
      case 4105: error_string="Ни один ордер не выбран";                                                                               break;
      case 4106: error_string="Неизвестный символ";                                                                                    break;
      case 4107: error_string="Неправильный параметр цены для торговой функции";                                                       break;
      case 4108: error_string="Неверный номер тикета";                                                                                 break;
      case 4109: error_string="Торговля не разрешена. Необходимо включить опцию Разрешить советнику торговать в свойствах эксперта.";  break;
      case 4110: error_string="Длинные позиции не разрешены. Необходимо проверить свойства эксперта.";                                 break;
      case 4111: error_string="Короткие позиции не разрешены. Необходимо проверить свойства эксперта.";                                break;
      case 4200: error_string="Объект уже существует";                                                                                 break;
      case 4201: error_string="Запрошено неизвестное свойство объекта";                                                                break;
      case 4202: error_string="Объект не существует";                                                                                  break;
      case 4203: error_string="Неизвестный тип объекта";                                                                               break;
      case 4204: error_string="Нет имени объекта";                                                                                     break;
      case 4205: error_string="Ошибка координат объекта";                                                                              break;
      case 4206: error_string="Не найдено указанное подокно";                                                                          break;
      default:   error_string="Ошибка при работе с объектом";
      }
return(error_string);
}

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