//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
// AG_AT.mq4
// Пользовательская функция Автоматической Торговли.
// Применяется при построении стратегии автоматической торговли для приложения AutoGraf(v.4)
// Сергей Ковалёв, Днепропетровск, sk@autograf.dp.ua, ICQ 64015987, http://autograf.dp.ua/
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
#property library   
 
#import "AG_Lib.ex4"
   int AG_Magic_Number();                                   // Вычисление MN 
   int AG_Message(string& Message[], string _Text);         // Запись текстов сообщений в массив Message[]
                                                            // Запись управляющих воздействий ф-ии АТ в массив Manager[][]:
   int AG_Set_Instr(double& Manager[][], int ii, double v1, double v2, double v3, double v4, double v5, double v6, int io , int ih); 
#import "AG_Trade_Criterion.ex4"
   int AG_Trade_Criterion_1();
   int AG_Trade_Criterion_2();
#import
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
int AG_AT(int Parol_AT, double Order[][], string Object[], double Instrument[][][][], int Ddraw_Object[][], double& Tuning[], double& Manager[][], string& Message[])
   {    
//======================================================================================================================================================================================================
// Это не реализация торговой стратегии.
// Это технический пример использования инструментов 1,2 и 15 для построения собственной торговой системы.
//======================================================================================================================================================================================================
   if (!IsDemo())                                           // Для демо без ограничений
      {
      if(Parol_AT != AccountNumber() + 1)                   // Если введен неправильный пароль
         {
         AG_Message(Message, "Разработчик J.Smith, http://company.com ");  // Пример сообщения (макс. 62 симв)
         AG_Message(Message, "Введен неправильный пароль для функции АТ.");// Пример сообщения (макс. 62 симв)
         return(0);                                         // Выход из функции автоматической торговли
         }                                                  // (AutoGraf автоматически отключит функцию АТ)
      }   
//======================================================================================================================================================================================================
   static int Count = 0;                                    // Счётчик 
   int MN;                                                  // MagicNumber рекомендуется вычислять в AG_Magic_Number()
   static int Ticket;                                       // Номер ордера
   string Comm = "AG_AT";                                   // Комментарий (рекомендуется "AG_AT")
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
   double Lot= NormalizeDouble(Tuning[1],2);                // Значения настроек AutoGraf - Значение лотов
   int Per   = NormalizeDouble(Tuning[2],0);                // Значения настроек AutoGraf - Значение % (целое)
   int Slip  = NormalizeDouble(Tuning[3],0);                // Значения настроек AutoGraf - Проскальзывание (пунктов)
   int SL    = NormalizeDouble(Tuning[4],0);                // Значения настроек AutoGraf - StopLoss (пунктов)
   int TP    = NormalizeDouble(Tuning[5],0);                // Значения настроек AutoGraf - TakeProfit (пунктов)
   int Ds    = NormalizeDouble(Tuning[6],0);                // Значения настроек AutoGraf - Дистанция (пунктов)
   int St    = NormalizeDouble(Tuning[7],0);                // Значения настроек AutoGraf - Шаг модификации (пунктов)
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   if (Count==0)                                            // Это можно делать один раз в начале работы
      {
      AG_Message(Message, "Разработчик J.Smith, http://company.com"); // Пример сообщения (максимум 62 символа)
      Count++;                                              // Считаем количество посещений этого блока
      Lot   = 0.0;                                          // 
      Per   = 7;                                            //
      Slip  = 1;                                            //
      SL    = 100;                                          //
      TP    = 55;                                           //
      Ds    = 20;                                           //
      St    = 3;                                            //
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Tuning[1] = Lot;                                      // Значение лотов
      Tuning[2] = Per;                                      // Значение % (целое)
      Tuning[3] = Slip;                                     // Проскальзывание (пунктов)
      Tuning[4] = SL;                                       // StopLoss (пунктов)
      Tuning[5] = TP;                                       // TakeProfit (пунктов)
      Tuning[6] = Ds;                                       // Дистанция (пунктов)
      Tuning[7] = St;                                       // Шаг модификации (пунктов)
      AG_Message(Message, "Изменение настроек из АТ.");     // Пример сообщения (максимум 62 символа)
      return(1);                                            // Выход после перенастроек параметров
      }
                                                            // После того, как управление из AG_AT будет возвращено..
                                                            // .. в приложение AutoGraf, в окне индикатора AG_ind..
                                                            // .. можно наблюдать новые значения настроек.
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   int Crit = AG_Trade_Criterion_1();                       // Вызов функции вычисления торговых критериев
   if (OrdersTotal()==0 && Crit == 10 )                     // Открытых ордеров нет + сработал критерий открытия Buy
      {
      AG_Message(Message, "АТ: сработал критерий открытия Buy.");  // Пример сообщения (максимум 62 символа)
      MN = AG_Magic_Number();                               // Вычисление MagicNumber (рекомендуется)
      OrderSend( Symbol(), OP_BUY, Lot, Ask, 2, Bid-SL*Point, 0, Comm, MN); // Открытие ордера Buy
      return(1);                                            // Открылись и отдаём управление AG для учёта ордеров
      }
   if (OrdersTotal()==0 && Crit == 20 )                     // Открытых ордеров нет + сработал критерий открытия Sell
      {
      AG_Message(Message, "АТ: сработал критерий открытия Sell."); // Пример сообщения (максимум 62 символа)
      MN = AG_Magic_Number();                               // Вычисление MagicNumber (рекомендуется)
      OrderSend( Symbol(), OP_SELL, Lot, Bid, 2, Ask+SL*Point, 0, Comm, MN); // Открытие ордера Sell
      return(1);                                            // Открылись и отдаём управление AG для учёта ордеров
      }
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                                        // Пример использования инструментов 1 и 2
   if (NormalizeDouble(Order[0][0],0)==1.0 && NormalizeDouble(Order[1][6],0)==0.0)// Если в окне есть 1 ордер и тип ордера Buy 
      {                                                                 
      Ticket = NormalizeDouble(Order[1][4],0);                          // Номер ордера
      if( NormalizeDouble(Instrument[1][2][1][0],0)==0.0 )              // Инстр. Подтяжка_Вверх на StopLoss не установлен
         // 1  = индекс ордера
         // 2  = индекс ордерной линии (SL)
         // 1  = индекс инструмента Подтяжка_Вверх
         // 0  = признак установки инструмента
         // 0.0= инструмент не установлен (1.0 = установлен)
         {
         AG_Set_Instr(Manager, 1, 20, 0, 71, 5, 0, 0, Ticket, 2);       // Устанавливаем Инструмент 1
         // 1  = индекс инструмента
         // 20 = индекс бара
         // 0  = параметр отсутствует
         // 71 = дистанция преследования
         // 5  = шаг модификации 
         // 0  = параметр отсутствует
         // 0  = параметр отсутствует
         // Ticket  = номер ордера
         // 2  = индекс ордерной линии (SL=2)
         AG_Message(Message, "На StopLoss Buy " + Ticket+ " ");         // Пример сообщения (максимум 62 символа)
         AG_Message(Message, "устанавливается инструмент Подтяжка_Вверх.");// Пример сообщения (макс. 62 симв.)
         }
      if( NormalizeDouble(Instrument[1][1][16][0],0)==0.0 )             // Инстр. Закрыть_По_Цене на ордер не установлен
         // 1  = индекс ордера
         // 1  = индекс ордерной линии (OR)
         // 15 = индекс инструмента Закрыть_По_Цене
         // 0  = признак установки инструмента
         // 0.0= инструмент не установлен (1.0 = установлен)
         {
         double Pr_16 = Bid + 20*Point;                                 // Цена исполнения инструмента
         AG_Set_Instr(Manager, 16, 25, Pr_16, 0, 0, 0, Order[1][5], Ticket, 1);// Устанавливаем Инструмент 15 Закрыть_По_Цене
         // 16 = индекс инструмента
         // 25 = индекс бара
         // Pr_16 = цена исполнения инструмента
         // 0  = параметр отсутствует (здесь не задаётся, вычисляется в AutoGraf, доступен в массиве Instrument[][][][],
         //                            знак = 1 для всех отложенных и рыночных, если цена исполн.инстр. в сторону прибыли,
         //                            знак =-1 только для рыночных, если цена исполн.инстр. в сторону убытков по ордеру  )
         // 0  = параметр отсутствует
         // 0  = параметр отсутствует
         // Order[1][5] = количество лотов (здесь ордер закр. полностью; в общем случае рыночные ордера можно закр. частично)
         // Ticket  = номер ордера
         // 1  = индекс ордерной линии (OR=1)
         AG_Message(Message, "На ордер Buy " + Ticket+ " ");            // Пример сообщения (максимум 62 символа)
         AG_Message(Message, "устанавливается инструмент Закрыть_По_Цене.");// Пример сообщения (макс. 62 симв.)
         }
      }
   if (NormalizeDouble(Order[0][0],0)==1.0 && NormalizeDouble(Order[1][6],0)==1.0)// Если в окне есть 1 ордер и тип ордера Sell 
      {
      Ticket = NormalizeDouble(Order[1][4],0);                          // Номер ордера
      if( NormalizeDouble(Instrument[1][2][2][0],0)==0.0 )              // Инстр. Подтяжка_Вниз на StopLoss не установлен
         {
         AG_Set_Instr(Manager, 2, 20, 0, 77, 5, 0, 0, Ticket, 2);       // Устанавливаем Инструмент 2
         AG_Message(Message, "На StopLoss Sell " + Ticket+ " ");        // Пример сообщения (максимум 62 символа)
         AG_Message(Message, "устанавливается инструмент Подтяжка_Вниз.");// Пример сообщения (макс. 62 симв.)
         }
      if( NormalizeDouble(Instrument[1][1][16][0],0)==0.0 )             // Инстр. Закрыть_По_Цене на ордер не установлен
         {
         Pr_16 = Ask - 20*Point;                                        // Цена исполнения инструмента
         AG_Set_Instr(Manager, 16, 25, Pr_16, 0, 0, 0, Order[1][5], Ticket, 1);// Устанавливаем Инструмент 15 Закрыть_По_Цене
         AG_Message(Message, "На ордер Sell " + Ticket+ " ");           // Пример сообщения (максимум 62 символа)
         AG_Message(Message, "устанавливается инструмент Закрыть_По_Цене.");// Пример сообщения (макс. 62 симв.)
         }
      }      
//======================================================================================================================================================================================================
   return(1);
   }
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Конец модуля жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
/*
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж
//пппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппппп
//======================================================================================================================================================================================================
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
//......................................................................................................................................................................................................


//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
double Order[31][9],                   // Массив ордеров текущий (последний известный)
                                       // 1й индекс: порядковый номер ордера в массиве
                                       // [0][] строка не определяется, за исключением [0][0]
                                       // [0][0]общее количество ордеров в массиве
                                       // 2й индекс:
                                       // [][0] столбец не определяется
                                       // [][1] курс откр. ордера   (абсолютное знач. курса)
                                       // [][2] StopLoss ордера     (абсолютное знач. курса)
                                       // [][3] TakeProfit ордера   (абсолютное знач. курса)
                                       // [][4] номер ордера        
                                       // [][5] колич. лотов ордера 
                                       // [][6] тип ордера 0=B,1=S,2=BL,3=SL,4=BS,5=SS
                                       // [][7] Магическое число ордера
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
double Tuning[8],                      // Массив настроек, передаваемый в пользовательскую функцию
                                       // [0] не определяется
                                       // [1] = Lot
                                       // [2] = Per
                                       // [3] = Slip
                                       // [4] = SL
                                       // [5] = TP
                                       // [6] = Ds
                                       // [7] = St
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
double Manager[31][9],                 // Управляющий массив для установки инструментов из AT
                                       // [0][0] количество строк в массиве
                                       // 1й индекс = порядковый номер управляющего воздействия
                                       // [][0] ii = индекс Инструмента 
                                       // [][1] значение параметра 1 в массиве Instrum[io][ih][ii][1]
                                       // [][2] значение параметра 2 в массиве Instrum[io][ih][ii][2]
                                       // [][3] значение параметра 3 в массиве Instrum[io][ih][ii][3]
                                       // [][4] значение параметра 4 в массиве Instrum[io][ih][ii][4]
                                       // [][5] значение параметра 5 в массиве Instrum[io][ih][ii][5]
                                       // [][6] значение параметра 6 в массиве Instrum[io][ih][ii][6]
                                       // [][7] no = номер ордера 
                                       // [][8] ih = индекс ордерной линии (1=Order, 2=StopLoss, 3=TakeProfit)
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string Message[20],                    // Одномерный массив сообщений
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
string Object[100],                    // Одномерный массив названий объектов
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
double Instrum[][][][]
//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/

