Скачать MetaTrader 5

Скрипты: Show history

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes Software Corp.
Модератор
190098
MetaQuotes Software Corp.  

Show history:

Переносит сделки из истории терминала на график в соответствии с имиджем, принятым в последней версии терминала. Все оптом. Прежние позиции удаляются с графика.

Author: Валерий

Валерий
1433
Валерий  

Вообще говоря, код неверный. Написав и проверив на двух терминалах с разными ДЦ отправил на публикацию. Одновременно переслал по e-mail в офис. И уже там, запустив на офисном компе обнаружил ошибку. Она заключается в том,что при равенстве цен открытия и закрытия ордера, для закрытых ордеров создаются два объекта одного типа с одним именем: стрелка для окрытия позиции и стрелка для закрытия. В результате значок открытия заменяется значком закрытия позиции, т. е. вновь созданный объект заменяет существующий с таким же именем. Исправленную версию закачал, но здесь вижу первоначальный вариант. Достаточно добавить ещё один пробел после названий операций в описании name= для стрелки закрытия позиции и имена станут уникальными.

Валерий
1433
Валерий  
Исправлено.
Rashid Umarov
Админ
12738
Rashid Umarov  
Очень полезный скрипт, добавил возможность выбора цвета стрелок.
Rashid Umarov
Админ
12738
Rashid Umarov  
Оказывается, забыл прицепить свой вариант скрипта. Цепляю.
//+------------------------------------------------------------------+
//|                                                Show history.mq4  |
//|                                                         Valmars  |
//|                                                   valmars@bk.ru  |
//+------------------------------------------------------------------+
#property copyright "Valmars"
#property link      "valmars@bk.ru"
#property show_inputs
 
extern color BUYcolor=Blue;
extern color SELLcolor=Red;
extern color PENDINGcolor=Yellow;
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start() 
  { 
// Удаление всех стрелок сделок с графика
   ObjectsDeleteAll(0,OBJ_ARROW);
// Удаление всех линий закрытых позиций с графика
   for(int i = 0; i < ObjectsTotal(); i++)
     {
       if(ObjectType(ObjectName(i)) == OBJ_TREND) 
           if(!ObjectGet(ObjectName(i), OBJPROP_RAY))
               ObjectDelete(ObjectName(i)); 
     }
   string name;  // Имя объекта-стрелки
   int Arrow;    // Код стрелки 
   double Color; // Цвет стрелки
//  Проверка для всех открытых и отложенных ордеров    
   for(i = 0; i < OrdersTotal(); i++) 
        {     
          OrderSelect(i, SELECT_BY_POS);   
          // Символы ордера и графика не совпадают
          if(OrderSymbol() != Symbol())
                 continue;        // Следующий ордер
       switch(OrderType())  // Параметры стрелок
         {
           case OP_BUY:       Arrow = 1; Color = BUYcolor;
                              name = OrderTicket() + " buy " +
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at "+ 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;         
           case OP_SELL:      Arrow = 2; Color = SELLcolor;
                              name = OrderTicket() + " sell " +
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break; 
           case OP_BUYLIMIT:  Arrow = 1; Color = PENDINGcolor;
                              name = OrderTicket() + " buylimit " +
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break; 
           case OP_BUYSTOP:   Arrow = 1; Color = PENDINGcolor;
                              name = OrderTicket() + " buystop " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break; 
           case OP_SELLLIMIT: Arrow = 2; Color = PENDINGcolor;
                              name = OrderTicket() + " selllimit " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " +
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break; 
           case OP_SELLSTOP:  Arrow = 2; Color = PENDINGcolor;
                              name = OrderTicket() + " sellstop " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break; 
         }
       // Стрелка открытия ордера
       ObjectCreate(name, OBJ_ARROW, 0, OrderOpenTime(), OrderOpenPrice());
       ObjectSet(name, OBJPROP_ARROWCODE, Arrow); 
       ObjectSet(name, OBJPROP_COLOR, Color);
     }
//  Проверка для всех закрытых и удалённых ордеров
   for(i = 0; i < HistoryTotal(); i++)  
        {     
          OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
          // Символы ордера и графика не совпадают
          if(OrderSymbol() != Symbol())
                 continue;   // Следующий ордер
       switch(OrderType())
         {
           case OP_BUY:       Arrow = 1; Color = BUYcolor;
                              name = OrderTicket() + " buy " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " +
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break;
           case OP_SELL:      Arrow = 2; Color = SELLcolor;
                              name = OrderTicket() + " sell " +
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(),
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_BUYLIMIT:  Arrow = 1; Color = PENDINGcolor;
                              name = OrderTicket() + " buylimit " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_BUYSTOP:   Arrow = 1; Color = PENDINGcolor;
                              name = OrderTicket() + " buystop " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_SELLLIMIT: Arrow = 2; Color = PENDINGcolor;
                              name = OrderTicket() + " selllimit " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_SELLSTOP:  Arrow = 2; Color = PENDINGcolor;
                              name = OrderTicket() + " sellstop " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
         }
       // Стрелка открытия ордера
       ObjectCreate(name, OBJ_ARROW, 0, OrderOpenTime(), OrderOpenPrice());
       ObjectSet(name, OBJPROP_ARROWCODE, Arrow); 
       ObjectSet(name, OBJPROP_COLOR, Color);
       switch(OrderType())
         {
           case OP_BUY:       Arrow = 1; Color = BUYcolor;
                              name = OrderTicket() + " buy  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " +  
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_SELL:      Arrow = 2; Color = SELLcolor;
                              name = OrderTicket() + " sell  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_BUYLIMIT:  Arrow = 1; Color = PENDINGcolor;
                              name = OrderTicket() + " buylimit  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_BUYSTOP:   Arrow = 1; Color = PENDINGcolor;
                              name = OrderTicket() + " buystop  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break;
           case OP_SELLLIMIT: Arrow = 2; Color = PENDINGcolor;
                              name = OrderTicket() + " selllimit  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); break;
           case OP_SELLSTOP:  Arrow = 2; Color = PENDINGcolor;
                              name = OrderTicket() + " sellstop  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
         }       
       // Стрелка закрытия ордера
       ObjectCreate(name, OBJ_ARROW, 0, OrderCloseTime(), OrderClosePrice());
       ObjectSet(name, OBJPROP_ARROWCODE, 3); 
       ObjectSet(name, OBJPROP_COLOR, Color);
       // Прорисовка линий закрытых позиций
       name = OrderTicket() + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), 
              MODE_DIGITS)) + "->" + DoubleToStr(OrderClosePrice(), 
              MarketInfo(OrderSymbol(), MODE_DIGITS));
       ObjectCreate(name, OBJ_TREND, 0, OrderOpenTime(), OrderOpenPrice(), 
                    OrderCloseTime(), OrderClosePrice());
       ObjectSet(name, OBJPROP_STYLE, STYLE_DOT); 
       ObjectSet(name, OBJPROP_WIDTH, 1);
       ObjectSet(name, OBJPROP_RAY, false);
       ObjectSet(name, OBJPROP_COLOR, Color); 
    }
   return(0);
  }
//+------------------------------------------------------------------+
MQL4 Comments
16316
MQL4 Comments  
Как в него загрузить данные про открытые/закрытые позиции по депозиту к которому нет on-line доступа. Возможно это делать из, например, Statement'а или другого файла.
Валерий
1433
Валерий  
Alex3:
Как в него загрузить данные про открытые/закрытые позиции по депозиту к которому нет on-line доступа. Возможно это делать из, например, Statement'а или другого файла.
Никак. Скрипт берёт данные из истории счёта, а она загружается с сервера. Для переноса с отчёта посмотрите скрипт KimIV http://codebase.mql4.com/ru/code/8099
MQL4 Comments
16316
MQL4 Comments  
Спасибо.
Rashid Umarov
Админ
12738
Rashid Umarov  
Еще один вариант скрипта, в поле Description пишется время открытия/закрытия с точностью до секунды. На рисунке подчеркнуто розовым цветом.




//+------------------------------------------------------------------+
//|                                                Show history.mq4  |
//|                                                         Valmars  |
//|                                                   valmars@bk.ru  |
//+------------------------------------------------------------------+
#property copyright "Valmars"
#property link      "valmars@bk.ru"
 
extern color BuyColor=Blue;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start() 
  { 
// Удаление всех стрелок сделок с графика
   ObjectsDeleteAll(0,OBJ_ARROW);
// Удаление всех линий закрытых позиций с графика
   for(int i = 0; i < ObjectsTotal(); i++)
     {
       if(ObjectType(ObjectName(i)) == OBJ_TREND) 
           if(!ObjectGet(ObjectName(i), OBJPROP_RAY))
               ObjectDelete(ObjectName(i)); 
     }
   string name;  // Имя объекта-стрелки
   int Arrow;    // Код стрелки 
   double Color; // Цвет стрелки
//  Проверка для всех открытых и отложенных ордеров    
   for(i = 0; i < OrdersTotal(); i++) 
        {     
          OrderSelect(i, SELECT_BY_POS);   
          // Символы ордера и графика не совпадают
          if(OrderSymbol() != Symbol())
                 continue;        // Следующий ордер
       switch(OrderType())  // Параметры стрелок
         {
           case OP_BUY:       Arrow = 1; Color = BuyColor;
                              name = OrderTicket() + " buy " +
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at "+ 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;         
           case OP_SELL:      Arrow = 2; Color = Red;
                              name = OrderTicket() + " sell " +
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break; 
           case OP_BUYLIMIT:  Arrow = 1; Color = Yellow;
                              name = OrderTicket() + " buylimit " +
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break; 
           case OP_BUYSTOP:   Arrow = 1; Color = Yellow;
                              name = OrderTicket() + " buystop " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break; 
           case OP_SELLLIMIT: Arrow = 2; Color = Yellow;
                              name = OrderTicket() + " selllimit " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " +
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break; 
           case OP_SELLSTOP:  Arrow = 2; Color = Yellow;
                              name = OrderTicket() + " sellstop " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break; 
         }
       // Стрелка открытия ордера
       ObjectCreate(name, OBJ_ARROW, 0, OrderOpenTime(), OrderOpenPrice());
       ObjectSet(name, OBJPROP_ARROWCODE, Arrow); 
       ObjectSet(name, OBJPROP_COLOR, Color);
       ObjectSetText(name,name+":"+TimeToStr(OrderOpenTime(),TIME_DATE|TIME_SECONDS));
     }
//  Проверка для всех закрытых и удалённых ордеров
   for(i = 0; i < HistoryTotal(); i++)  
        {     
          OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
          // Символы ордера и графика не совпадают
          if(OrderSymbol() != Symbol())
                 continue;   // Следующий ордер
       switch(OrderType())
         {
           case OP_BUY:       Arrow = 1; Color = BuyColor;
                              name = OrderTicket() + " buy " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " +
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break;
           case OP_SELL:      Arrow = 2; Color = Red;
                              name = OrderTicket() + " sell " +
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(),
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_BUYLIMIT:  Arrow = 1; Color = Yellow;
                              name = OrderTicket() + " buylimit " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_BUYSTOP:   Arrow = 1; Color = Yellow;
                              name = OrderTicket() + " buystop " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_SELLLIMIT: Arrow = 2; Color = Yellow;
                              name = OrderTicket() + " selllimit " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_SELLSTOP:  Arrow = 2; Color = Yellow;
                              name = OrderTicket() + " sellstop " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
         }
       // Стрелка открытия ордера
       ObjectCreate(name, OBJ_ARROW, 0, OrderOpenTime(), OrderOpenPrice());
       ObjectSet(name, OBJPROP_ARROWCODE, Arrow); 
       ObjectSet(name, OBJPROP_COLOR, Color);
       ObjectSetText(name,name+":"+TimeToStr(OrderCloseTime(),TIME_DATE|TIME_SECONDS));
       switch(OrderType())
         {
           case OP_BUY:       Arrow = 1; Color = BuyColor;
                              name = OrderTicket() + " buy  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " +  
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_SELL:      Arrow = 2; Color = Red;
                              name = OrderTicket() + " sell  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_BUYLIMIT:  Arrow = 1; Color = Yellow;
                              name = OrderTicket() + " buylimit  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
           case OP_BUYSTOP:   Arrow = 1; Color = Yellow;
                              name = OrderTicket() + " buystop  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS));
                              break;
           case OP_SELLLIMIT: Arrow = 2; Color = Yellow;
                              name = OrderTicket() + " selllimit  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); break;
           case OP_SELLSTOP:  Arrow = 2; Color = Yellow;
                              name = OrderTicket() + " sellstop  " + 
                              DoubleToStr(OrderLots(), 2) + " " + 
                              OrderSymbol() + " at " + 
                              DoubleToStr(OrderOpenPrice(), 
                              MarketInfo(OrderSymbol(), MODE_DIGITS)); 
                              break;
         }       
       // Стрелка закрытия ордера
       ObjectCreate(name, OBJ_ARROW, 0, OrderCloseTime(), OrderClosePrice());
       ObjectSet(name, OBJPROP_ARROWCODE, 3); 
       ObjectSet(name, OBJPROP_COLOR, Color);
       ObjectSetText(name,name+":"+TimeToStr(OrderCloseTime(),TIME_DATE|TIME_SECONDS));
       // Прорисовка линий закрытых позиций
       name = OrderTicket() + DoubleToStr(OrderOpenPrice(), MarketInfo(OrderSymbol(), 
              MODE_DIGITS)) + "->" + DoubleToStr(OrderClosePrice(), 
              MarketInfo(OrderSymbol(), MODE_DIGITS));
       ObjectCreate(name, OBJ_TREND, 0, OrderOpenTime(), OrderOpenPrice(), 
                    OrderCloseTime(), OrderClosePrice());
       ObjectSet(name, OBJPROP_STYLE, STYLE_DOT); 
       ObjectSet(name, OBJPROP_WIDTH, 1);
       ObjectSet(name, OBJPROP_RAY, false);
       ObjectSet(name, OBJPROP_COLOR, Color); 
    }
   return(0);
  }
//+------------------------------------------------------------------+
MQL4 Comments
16316
MQL4 Comments  
Rosh:
Еще один вариант скрипта, в поле Description пишется время открытия/закрытия с точностью до секунды. На рисунке подчеркнуто розовым цветом.

а как встроить подсчет ордеров ?


с http://forum.mql4.com/ru/16946

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