Скрипты: Show history

 

Show history:

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

Author: Валерий

 

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

 
Исправлено.
 
Очень полезный скрипт, добавил возможность выбора цвета стрелок.
 
Оказывается, забыл прицепить свой вариант скрипта. Цепляю.
//+------------------------------------------------------------------+
//|                                                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);
  }
//+------------------------------------------------------------------+
 
Как в него загрузить данные про открытые/закрытые позиции по депозиту к которому нет on-line доступа. Возможно это делать из, например, Statement'а или другого файла.
 
Alex3:
Как в него загрузить данные про открытые/закрытые позиции по депозиту к которому нет on-line доступа. Возможно это делать из, например, Statement'а или другого файла.
Никак. Скрипт берёт данные из истории счёта, а она загружается с сервера. Для переноса с отчёта посмотрите скрипт KimIV http://codebase.mql4.com/ru/code/8099
 
Спасибо.
 
Еще один вариант скрипта, в поле 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);
  }
//+------------------------------------------------------------------+
 
Rosh:
Еще один вариант скрипта, в поле Description пишется время открытия/закрытия с точностью до секунды. На рисунке подчеркнуто розовым цветом.

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


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

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