//+----------------------------------------------------------------------------+
//|                                                    fromHistoryOnGraph.mq4  |
//|                                                                            |
//|                                                    Ким Игорь В. aka KimIV  |
//|                                                       http://www.kimiv.ru  |
//|                                                                            |
//|  01.11.2007  Скрипт для переноса сделок из истории счёта на график.        |
//|              Carrying the Deals from History on Graph.                     |
//|                                                                            |
//|  Скрипт выполняет чтение сделок из истории счёта и отображает их           |
//|  на графике в виде разноцветных прямоугольников или линий.                 |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link      "http://www.kimiv.ru"
#property show_inputs

extern bool   DeleteOldObjects = True;      // Удалять старые объекты
extern string _P_Objects = "---------- Параметры объектов";
extern int    TypeObjects      = 1;         // Тип объектов (0-прямоуг. 1-линия)
extern color  clObjBuy         = Aqua;      // Цвет прибыльных покупок
extern color  clObjBuyLoss     = Blue;      // Цвет убыточных покупок
extern color  clObjSell        = Salmon;    // Цвет прибыльных продаж
extern color  clObjSellLoss    = Red;       // Цвет убыточных продаж
extern string _P_Arrows = "---------- Параметры указателей";
extern bool   ShowArrow        = True;      // Показывать указатели
extern int    KodArrowBuy      = 241;       // Код указателя покупки
extern int    OffSetArrowBuy   = -15;       // Смещение указателя покупки
extern color  clArrowBuy       = Blue;      // Цвет указателя покупки
extern int    KodArrowSell     = 242;       // Код указателя продажи
extern int    OffSetArrowSell  = 15;        // Смещение указателя продажи
extern color  clArrowSell      = Red;       // Цвет указателя продажи
extern string _P_Text = "---------- Параметры текста";
extern bool   ShowTextBalance  = True;      // Показывать текст баланса
extern int    OffSetText       = 50;       // Смещение текста
extern int    SizeText         = 9;         // Размер текста
extern color  clTextProfit     = Green;     // Цвет суммы прибыли
extern color  clTextLoss       = Red;       // Цвет суммы убытка
extern color  clTextBalans     = Green;     // Цвет суммы баланса

//------- Глобальные переменные -----------------------------------------------+
int    frogBalance     = 0;
string frogNameObjLine = "LDeal";      // Наименования объектов ЛИНИЯ
string frogNameObjRect = "RDeal";      // Наименования объектов ПРЯМОУГОЛЬНИК


//+----------------------------------------------------------------------------+
//|  script program start function                                             |
//+----------------------------------------------------------------------------+
void start()
{
  datetime ot, ct;
  double   op, cp;
  int      i, k=OrdersHistoryTotal(), s=0, ty;

  if (DeleteOldObjects) ObjectsDeleteAll();
  for (i=0; i<k; i++)
  {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
    {
      ty=OrderType();
      if (OrderSymbol()==Symbol() && ty<2)
      {
        ot=OrderOpenTime();
        op=OrderOpenPrice();
        ct=OrderCloseTime();
        cp=OrderClosePrice();
        SetProp(i, ty, ot, op, ct, cp); s++;
        if (ShowArrow) SetPropArrow(i, ty, ot, op);
        if (ShowTextBalance) SetPropText(i, ct, cp);
      }
      Comment("Прочитано: ",i+1," сделок из ",k,"\n",
              "Отображено на графике: ",s);
    }
  }
}

//+----------------------------------------------------------------------------+
//|  Установка свойств объектов                                                |
//|  Параметры:                                                                |
//|    or - номер объекта                                                      |
//|    ty - операция                                                           |
//|    ot - дата, время открытия                                               |
//|    op - цена открытия                                                      |
//|    ct - дата, время закрытия                                               |
//|    cp - цена закрытия                                                      |
//+----------------------------------------------------------------------------+
void SetProp(int or, int ty, datetime ot, double op, datetime ct, double cp)
{
  string no;
  if (TypeObjects==0) no=frogNameObjRect; else no=frogNameObjLine;

  if (ObjectFind(no+or)<0) {
    if (TypeObjects==0) ObjectCreate(no+or, OBJ_RECTANGLE, 0, 0,0, 0,0);
    else ObjectCreate(no+or, OBJ_TREND, 0, 0,0, 0,0);
  }
  ObjectSet(no+or, OBJPROP_TIME1 , ot);
  ObjectSet(no+or, OBJPROP_PRICE1, op);
  ObjectSet(no+or, OBJPROP_TIME2 , ct);
  ObjectSet(no+or, OBJPROP_PRICE2, cp);
  if (ty==OP_BUY)
  {
    if (op<cp) ObjectSet(no+or, OBJPROP_COLOR, clObjBuy);
    if (op>cp) ObjectSet(no+or, OBJPROP_COLOR, clObjBuyLoss);
  }
  if (ty==OP_SELL)
  {
    if (op>cp) ObjectSet(no+or, OBJPROP_COLOR, clObjSell);
    if (op<cp) ObjectSet(no+or, OBJPROP_COLOR, clObjSellLoss);
  }
  if (TypeObjects==1) ObjectSet(no+or, OBJPROP_RAY , False);
}

//+----------------------------------------------------------------------------+
//|  Установка свойств объекта УКАЗАТЕЛЬ                                       |
//|  Параметры:                                                                |
//|    or - номер ордера (объекта)                                             |
//|    op - операция                                                           |
//|    ot - дата, время                                                        |
//|    op - цена                                                               |
//+----------------------------------------------------------------------------+
void SetPropArrow(int or, int ty, datetime ot, double op)
{
  string no="ADeal";

  if (ObjectFind(no+or)<0) ObjectCreate(no+or, OBJ_ARROW, 0, 0,0);
  ObjectSet(no+or, OBJPROP_TIME1, ot);
  if (ty==OP_BUY)
  {
    ObjectSet(no+or, OBJPROP_PRICE1   , op+OffSetArrowBuy*Point);
    ObjectSet(no+or, OBJPROP_COLOR    , clArrowBuy);
    ObjectSet(no+or, OBJPROP_ARROWCODE, KodArrowBuy);
  }
  if (ty==OP_SELL)
  {
    ObjectSet(no+or, OBJPROP_PRICE1   , op+OffSetArrowSell*Point);
    ObjectSet(no+or, OBJPROP_COLOR    , clArrowSell);
    ObjectSet(no+or, OBJPROP_ARROWCODE, KodArrowSell);
  }
}

//+----------------------------------------------------------------------------+
//|  Установка свойств объектов ТЕКСТ                                          |
//|  Параметры:                                                                |
//|    or - номер ордера (объекта)                                             |
//|    dt - дата, время                                                        |
//|    pp - цена                                                               |
//+----------------------------------------------------------------------------+
void SetPropText(int or, datetime dt, double pp)
{
  color  cl, clText;
  double p1, p2, ss;
  string no, no1="T1Deal", no2="T2Deal";

  if (TypeObjects==0) no=frogNameObjRect; else no=frogNameObjLine;

  p1=ObjectGet(no+or, OBJPROP_PRICE1);
  p2=ObjectGet(no+or, OBJPROP_PRICE2);
  cl=ObjectGet(no+or, OBJPROP_COLOR);

  if (p1!=0 && p2!=0)
  {
    if (ObjectFind(no1+or)<0) ObjectCreate(no1+or, OBJ_TEXT, 0, 0,0);
    if (ObjectFind(no2+or)<0) ObjectCreate(no2+or, OBJ_TEXT, 0, 0,0);
    ObjectSet(no1+or, OBJPROP_TIME1 , dt);
    ObjectSet(no2+or, OBJPROP_TIME1 , dt);
    ObjectSet(no1+or, OBJPROP_PRICE1, pp+OffSetText*Point);
    ObjectSet(no2+or, OBJPROP_PRICE1, pp-OffSetText*Point);
    if (cl==clObjBuy || cl==clObjBuyLoss)
    {
      ss=(p2-p1)/Point;
      frogBalance+=ss;
      if (ss<0) clText=clTextLoss; else clText=clTextProfit;
      ObjectSetText(no1+or, DoubleToStr(ss, 0), SizeText, "", clText);
      ObjectSetText(no2+or, DoubleToStr(frogBalance, 0), SizeText, "", clTextBalans);
    }
    if (cl==clObjSell || cl==clObjSellLoss)
    {
      ss=(p1-p2)/Point;
      frogBalance+=ss;
      if (ss<0) clText=clTextLoss; else clText=clTextProfit;
      ObjectSetText(no1+or, DoubleToStr(ss, 0), SizeText, "", clText);
      ObjectSetText(no2+or, DoubleToStr(frogBalance, 0), SizeText, "", clTextBalans);
    }
  }
}
//+----------------------------------------------------------------------------+

