外汇指标
CCT
回复:0  浏览:119
  • 楼主admin 圈主
  • 2019-05-05 05:06
XAUUSDH1.png

  1. //+------------------------------------------------------------------+
  2. //|                                              CCT_BreakoutBox.mq4 |
  3. //|                           Copyright Complete Currency Trader Ltd |
  4. //|                                                                  |
  5. //+------------------------------------------------------------------+
  6. #property copyright "Copyright, Complete Currency Trader Ltd"
  7. #property link      ""
  8. #property version   "1.00"
  9. #property strict
  10. #property indicator_chart_window

  11. extern string OpenTime = "10:00";
  12. extern int PipsAbove = 100;
  13. extern int PipsBelow = 100;
  14. extern color BoxColor = DarkOliveGreen;
  15. extern int MaxBoxes = 50;
  16. //+------------------------------------------------------------------+
  17. //| Custom indicator initialization function                         |
  18. //+------------------------------------------------------------------+
  19. int onInit()
  20. {
  21.    return(INIT_SUCCEEDED);
  22. }

  23. void onDeinit(const int reason)
  24. {
  25.    for(int i = ObjectsTotal()-1; i>=0; i--)
  26.    {
  27.       if(StringFind(ObjectName(i),"BOXMODEL9") != -1)
  28.          ObjectDelete(ObjectName(i));
  29.    }
  30. }
  31.   
  32. //+------------------------------------------------------------------+
  33. //| Custom indicator iteration function                              |
  34. //+------------------------------------------------------------------+
  35. int onCalculate(const int rates_total,
  36.                 const int prev_calculated,
  37.                 const datetime &time[],
  38.                 const double &open[],
  39.                 const double &high[],
  40.                 const double &low[],
  41.                 const double &close[],
  42.                 const long &tick_volume[],
  43.                 const long &volume[],
  44.                 const int &spread[])
  45. {
  46.    datetime startTime = StrToTime(OpenTime);   
  47.    int targetTimeframe = getTargetTf(startTime);
  48.    
  49.    int days = -1, lastDay = -1;
  50.    for(int i = 0; i < Bars; i++)
  51.    {
  52.       int today = iTime(Symbol(), PERIOD_D1, iBarShift(Symbol(), PERIOD_D1, Time[i]));
  53.       
  54.       // skip till new day
  55.       if(today == lastDay)
  56.          continue;
  57.       else
  58.       {
  59.          days++;
  60.          lastDay = today;   
  61.       }   
  62.       
  63.       // objects drawn, exit
  64.       if(ObjectFind("BOXMODEL9"+DoubleToStr(today,0)) != -1)
  65.       break;
  66.       
  67.       // draw box on new day         
  68.       if(ObjectFind("BOXMODEL9"+DoubleToStr(today,0)) == -1)
  69.       {
  70.          int shift = iBarShift(Symbol(), targetTimeframe, startTime-days*1440*60, true);
  71.          if(shift != -1)
  72.          {
  73.             double price = iOpen(Symbol(), targetTimeframe, shift);
  74.             ObjectCreate("BOXMODEL9"+DoubleToStr(today,0), OBJ_RECTANGLE, 0, startTime-days*1440*60, price+PipsAbove*Point, startTime-(days-1)*1440*60-TimeHour(startTime)*60*60-TimeMinute(startTime)*60, price-PipsBelow*Point);
  75.             ObjectSet("BOXMODEL9"+DoubleToStr(today, 0), OBJPROP_COLOR, BoxColor);
  76.          }
  77.       }
  78.       
  79.       if(days == MaxBoxes)
  80.          break;         
  81.    }
  82.    return(rates_total);
  83. }

  84. //+------------------------------------------------------------------+
  85. // returns tf to get data from depending on user input
  86. //+------------------------------------------------------------------+
  87. int getTargetTf(datetime time)
  88. {
  89.    if(TimeMinute(time) == 0 && Period() <= 60)
  90.       return(Period());
  91.    else if(TimeMinute(time) == 0 && Period() >= 60)
  92.       return(PERIOD_H1);
  93.    else if(TimeMinute(time) == 15)
  94.       return(PERIOD_M15);
  95.    else if(TimeMinute(time) == 30)
  96.       return(PERIOD_M30);
  97.    else if(TimeMinute(time) == 45)
  98.       return(PERIOD_M15);   
  99.    else
  100.       return(PERIOD_M1);   
  101. }