MQL4. Закрытие по индикатору WoodiesCCI2.

 

Здравствуйте. Помогите найти ошибку. Прописываю закрытие по индикатору WoodiesCCI2. сделка на открытие есть, а на закрытие не ставится. В чем ошибка?

//+------------------------------------------------------------------+
//|                                                     Milllion.mq4 |
//|                                                         Mr. Gold |
//|                                         anna.furmanova@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Mr. Gold"
#property link      "anna.furmanova@yandex.ru"
#property version   "1.00"
#property strict

#define magic 1

extern double Lot                 = 0.01;
extern int Magic                  = 1;

extern string WoodiesCCI2         = "===== Параметры WoodiesCCI2 =====";
extern int A_period               = 14;
extern int B_period               = 6;
extern int num_bars               = 550;
extern int cci_levelU             = 220;
extern int cci_levelD             = -220;

static int prevtime=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {   
   double Wood_0=iCustom(Symbol(),0,"WoodiesCCI2",A_period,B_period,num_bars,0,1);
   double Wood_1=iCustom(Symbol(),0,"WoodiesCCI2",A_period,B_period,num_bars,1,1);
   double Wood_2=iCustom(Symbol(),0,"WoodiesCCI2",A_period,B_period,num_bars,2,1);

   int tiket,cnt,total=OrdersTotal();

   if(Time[0]==prevtime)
      return(0);
   prevtime=Time[0];

   if(OrdersTotal()<1)
     {
      if(Wood_1>cci_levelU)
        {
         tiket=OrderSend(Symbol(),OP_BUY,Lot,Ask,10,0,0,"",Magic,0,clrGreen);
         if(tiket>0)
           {
            if(OrderSelect(tiket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else
           {
            Print("Error opening BUY order : ",GetLastError());
            return(0);
           }
        }
      else if(Wood_1>cci_levelD)
        {
         tiket=OrderSend(Symbol(),OP_SELL,Lot,Bid,10,0,0,"",Magic,0,clrRed);
         if(tiket>0)
           {
            if(OrderSelect(tiket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else
           {
            Print("Error opening SELL order : ",GetLastError());
            return(0);
           }
        }
     }
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
        {
         if(OrderType()==OP_BUY)
           {
            if(Wood_2>Wood_1)
              {
               OrderClose(OrderTicket(),OrderLots(),Bid,10,Violet);
               return(0);
              }
           }
         else
           {
            if(Wood_2<Wood_1)
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,10,Violet);
               return(0);
              }
           }
        }
     }
   return(0);
  }
//+------------------------------------------------------------------+
void ShowERROR(int Ticket,double SL,double TP)
  {
   int err=GetLastError();
   switch(err)
     {
      case    0: Print("0 операция прошла успешно",         Ticket," ",Symbol());return;
      case    1: Print("1 попытка изменить знач.теми же",   Ticket," ",Symbol());return;
      case    2: Print("2 Общая ошибка",                    Ticket," ",Symbol());return;
      case    3: Print("3 переданы неправильные парам. ",   Ticket," ",Symbol());return;
      case    4: Print("4 Торговый сервер занят",           Ticket," ",Symbol());return;
      case    5: Print("5 Старая версия терминала",         Ticket," ",Symbol());return;
      case    6: Print("6 Нет связи с торговым сервером",   Ticket," ",Symbol());return;
      case    7: Print("7 Недостаточно прав",               Ticket," ",Symbol());return;
      case    8: Print("8 Слишком частые запросы",          Ticket," ",Symbol());return;
      case    9: Print("9 Недопустимая операция",           Ticket," ",Symbol());return;
      case   64: Print("64 Счет заблокирован",              Ticket," ",Symbol());return;
      case   65: Print("65 Неправильный номер счета",       Ticket," ",Symbol());return;
      case  128: Print("128 Истекло ожид.соверш.сделки",    Ticket," ",Symbol());return;
      case  129: Print("129 неверная, ненормализов.цена",   Ticket," ",Symbol());return;
      case  130: Print("130 Слишком близкие стопы",         Ticket," ",Symbol());return;
      case  131: Print("131 ошибка в грануляции объема",    Ticket," ",Symbol());return;
      case  132: Print("132 Рынок закрыт",                  Ticket," ",Symbol());return;
      case  133: Print("133 Торговля запрещена",            Ticket," ",Symbol());return;
      case  134: Print("134 мало денег для операции",       Ticket," ",Symbol());return;
      case  135: Print("135 Цена резко изменилась",         Ticket," ",Symbol());return;
      case  136: Print("136 отсутствуют котировки цен",     Ticket," ",Symbol());return;
      case  137: Print("137 диллерский центр занят",        Ticket," ",Symbol());return;
      case  138: Print("138 Запрошенная цена устарела",     Ticket," ",Symbol());return;
      case  139: Print("139 Ордер уже обрабатывается",      Ticket," ",Symbol());return;
      case  140: Print("140 Разрешена только покупка",      Ticket," ",Symbol());return;
      case  141: Print("141 Слишком много запросов",        Ticket," ",Symbol());return;
      case  142: Print("142 Ордер поставлен в очередь",     Ticket," ",Symbol());return;
      case  143: Print("143 Ордер принят к исполнению",     Ticket," ",Symbol());return;
      case  144: Print("144 Ордер аннулирован клиентом",    Ticket," ",Symbol());return;
      case  145: Print("145 Модификация запрещена",         Ticket," ",Symbol());return;
      case  146: Print("146 Подсистема торговли занята",    Ticket," ",Symbol());return;
      case  147: Print("147 дата истечения запрещена",      Ticket," ",Symbol());return;
      case  148: Print("148 Колич. орд. достигло пред.",    Ticket," ",Symbol());return;
      case  149: Print("149 хеджирование запрещено",        Ticket," ",Symbol());return;
      //+------------------------------------------------------------------+ 
      case 4000: Print("0 нет ошибки, но рез.неизвестен",   Ticket," ",Symbol());return;
      case 4001: Print("4001 Неправильный указат. ф-ции",   Ticket," ",Symbol());return;
      case 4002: Print("4002 Индекс масс. вне диапазона",   Ticket," ",Symbol());return;
      case 4003: Print("4003 Нет памяти для стека ф-ий",    Ticket," ",Symbol());return;
      case 4004: Print("4004 Переполнен стек после выз.",   Ticket," ",Symbol());return;
      case 4005: Print("4005 нет пам. для перед. парам.",   Ticket," ",Symbol());return;
      case 4006: Print("4006 Нет пам. для строк. парам.",   Ticket," ",Symbol());return;
      case 4007: Print("4007 Нет пам. для времен.строки",   Ticket," ",Symbol());return;
      case 4008: Print("4008 Неинициализир. строка",        Ticket," ",Symbol());return;
      case 4009: Print("4009 Неинициализир.стр. в масс.",   Ticket," ",Symbol());return;
      case 4010: Print("4010 Нет памяти для строк.масс.",   Ticket," ",Symbol());return;
      case 4011: Print("4011 Слишком длинная строка",       Ticket," ",Symbol());return;
      case 4012: Print("4012 Остаток от деления на ноль",   Ticket," ",Symbol());return;
      case 4013: Print("4013 Деление на ноль",              Ticket," ",Symbol());return;
      case 4014: Print("4014 Неизвестная команда",          Ticket," ",Symbol());return;
      case 4015: Print("4015 Неправильный переход",         Ticket," ",Symbol());return;
      case 4016: Print("4016 Неинициализированный масс.",   Ticket," ",Symbol());return;
      case 4017: Print("4017 Вызовы DLL не разрешены",      Ticket," ",Symbol());return;
      case 4018: Print("4018 Невозможно загр.библиотеку",   Ticket," ",Symbol());return;
      case 4019: Print("4019 Невозможно вызвать функцию",   Ticket," ",Symbol());return;
      case 4020: Print("4020 Вызовы внешн.ф-ций запрещ.",   Ticket," ",Symbol());return;
      case 4021: Print("4021 мало памяти для строки",       Ticket," ",Symbol());return;
      case 4022: Print("4022 Система занята",               Ticket," ",Symbol());return;
      case 4050: Print("4050 неверное кол. парам. ф-ции",   Ticket," ",Symbol());return;
      case 4051: Print("4051 неверное знач.парам.ф-ции",    Ticket," ",Symbol());return;
      case 4052: Print("4052 Внутр. ошибка строк. ф-ции",   Ticket," ",Symbol());return;
      case 4053: Print("4053 Ошибка массива",               Ticket," ",Symbol());return;
      case 4054: Print("4054 Неправ.исп.масс.-таймсерии",   Ticket," ",Symbol());return;
      case 4055: Print("4055 Ошибка пользоват. индюка",     Ticket," ",Symbol());return;
      case 4056: Print("4056 Массивы несовместимы",         Ticket," ",Symbol());return;
      case 4057: Print("4057 Ошибка обраб.глоб.перемен.",   Ticket," ",Symbol());return;
      case 4058: Print("4058 Глоб. перемен. не обнаруж.",   Ticket," ",Symbol());return;
      case 4059: Print("4059 Ф-ция запрещ. в тест. реж.",   Ticket," ",Symbol());return;
      case 4060: Print("4060 Функция не разрешена",         Ticket," ",Symbol());return;
      case 4061: Print("4061 Ошибка отправки почты",        Ticket," ",Symbol());return;
      case 4062: Print("4062 Ожид-ся парам. типа string",   Ticket," ",Symbol());return;
      case 4063: Print("4063 Ожид. парам. типа integer",    Ticket," ",Symbol());return;
      case 4064: Print("4064 Ожид. парам. типа double",     Ticket," ",Symbol());return;
      case 4065: Print("4065 В кач. парам. ожид. массив",   Ticket," ",Symbol());return;
      case 4066: Print("4066 данные в сост. обновления",    Ticket," ",Symbol());return;
      case 4067: Print("4067 Ошибка торговой операции",     Ticket," ",Symbol());return;
      case 4099: Print("4099 Конец файла",                  Ticket," ",Symbol());return;
      case 4100: Print("4100 Ошибка при работе с файлом",   Ticket," ",Symbol());return;
      case 4101: Print("4101 Неправильное имя файла",       Ticket," ",Symbol());return;
      case 4102: Print("4102 Слишком много откр. файлов",   Ticket," ",Symbol());return;
      case 4103: Print("4103 Невозможно открыть файл",      Ticket," ",Symbol());return;
      case 4104: Print("4104 Несовмес.реж.дост. к файлу",   Ticket," ",Symbol());return;
      case 4105: Print("4105 Ни один ордер не выбран",      Ticket," ",Symbol());return;
      case 4106: Print("4106 Неизвестный символ",           Ticket," ",Symbol());return;
      case 4107: Print("4107 неверный параметр функции",    Ticket," ",Symbol());return;
      case 4108: Print("4108 Неверный номер тикета",        Ticket," ",Symbol());return;
      case 4109: Print("4109 Разрешить роботу торговать",   Ticket," ",Symbol());return;
      case 4110: Print("4110 Длинные позиции запрещены",    Ticket," ",Symbol());return;
      case 4111: Print("4111 Короткие позиции запрещены",   Ticket," ",Symbol());return;
      case 4200: Print("4200 Объект уже существует",        Ticket," ",Symbol());return;
      case 4201: Print("4201 неизв. свойство объекта",      Ticket," ",Symbol());return;
      case 4202: Print("4202 Объект не существует",         Ticket," ",Symbol());return;
      case 4203: Print("4203 Неизвестный тип объекта",      Ticket," ",Symbol());return;
      case 4204: Print("4204 Нет имени объекта",            Ticket," ",Symbol());return;
      case 4205: Print("4205 Ошибка координат объекта",     Ticket," ",Symbol());return;
      case 4206: Print("4206 Не найдено указанное окно",    Ticket," ",Symbol());return;
      case 4207: Print("4207 Ошибка работы с объектом",     Ticket," ",Symbol());return;
      default:   Print("Ошибка  " ,err,"   Ticket ",        Ticket," ",Symbol());return;
     }
  }
//+------------------------------------------------------------------+
Файлы:
Milllion.mq4  13 kb
 

Придумайте что-нибудь, чтобы проверить какая часть не работает. Закрытие ли не работает, или со значениями индикаторов что-то.

Переменным Wood_1 и Wood_2 установите какие-нибудь значения, чтобы условия закрытия выполнялись. Если закрытие будет, значит дело в индикаторах. Если не будет закрытия, ищем ошибку в цикле закрытия.

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