绘制一个正方形或长方形。真的需要帮助... - 页 2

 

下午好。真的需要帮助,但却不知道该怎么做。如果你能提供帮助。

需要一个指标来标记每个月的第一个柱子。随着高价和低价线的绘制,直到月底,可选择月数。

Pr.(三个月。用线标出三个月)。或者看一下样品。

提前感谢。

 

这里有一个样本脚本,从开盘+和-20点开始标记当天的情况。 同样,你可以对月份进行定义,并分别对这个月的高点和低点进行定义。

/********************************************************************\
                                                           20-20.mq4 |
                                                            Viktorov |
                                                   v4forex@yandex.ru |
\********************************************************************/
#property copyright "Viktorov"
#property link      "v4forex@yandex.ru"
#property version   "1.00"

MqlDateTime mqlDateTime;
MqlRates    mqlRates[1];
/********************Script program start function*******************/
void OnStart()
{
  double point = _Digits%2 == 0 ? _Point : _Point*10;
   datetime dt = ChartTimeOnDropped();
    TimeToStruct(ChartTimeOnDropped(), mqlDateTime);
     if(CopyRates(_Symbol, PERIOD_D1, dt, 1, mqlRates) < 0)
      Print("");
       string objName = TimeToString(mqlRates[0].time, TIME_DATE);
        ObjectCreate(0, objName, OBJ_TREND, 0, mqlRates[0].time, mqlRates[0].open, mqlRates[0].time+PeriodSeconds(PERIOD_D1), mqlRates[0].open);
        ObjectSetInteger(0, objName, OBJPROP_RAY_RIGHT, false);
       ObjectCreate(0, objName+"+20", OBJ_TREND, 0, mqlRates[0].time, mqlRates[0].open+20*point, mqlRates[0].time+PeriodSeconds(PERIOD_D1), mqlRates[0].open+20*point);
      ObjectSetInteger(0, objName+"+20", OBJPROP_RAY_RIGHT, false);
     ObjectCreate(0, objName+"-20", OBJ_TREND, 0, mqlRates[0].time, mqlRates[0].open-20*point, mqlRates[0].time+PeriodSeconds(PERIOD_D1), mqlRates[0].open-20*point);
    ObjectSetInteger(0, objName+"-20", OBJPROP_RAY_RIGHT, false);
   Comment(mqlRates[0].open, "\n"
         , objName, "\n"
         , sizeof(mqlDateTime), "\n"
         );
}/*******************************************************************/
 
AlexeyVik:

这里有一个样本脚本,从开盘+和-20个点来标记当天的情况。 同样,你可以对月份进行定义,并分别对这个月的高点和低点进行定义。

非常感谢你,虽然有点费劲,但似乎还行。
 

AlexeyVik: 谢谢你的反馈。

我不知道我是否正确地陈述了我的同花顺。我需要这样的东西。图片

如果你能提供帮助,或者告诉我如何在一个指标中实现它,我将非常感激。

我是编程新手。

竖线的绘制是正确的。

我不明白如何将 "地平线和圆圈与高点和低点绑定到第一根蜡烛上"。

希望得到任何帮助。

 

阅读关于CopyRates()函数和MqlRates 结构的文档。在他们的帮助下,我们可以获得所有必要的数据来实现你的愿望。

然后告诉我你有什么,你不能实现什么。否则,帮助你的请求就会被解读为要求为你做这件事。对不起,我说得太直白了。

 

这里是源代码。我希望你能帮助我完善它。我需要找到每个月第一周的最高点和最低点。

//+------------------------------------------------------------------+

#property copyright ""

#property link      ""


#property indicator_chart_window

   

    //---  Внешние Глобальные переменные 

extern int     TF = 43200;               //--- Через сколько баров рисуются линии (На каком Т/Ф)

extern int     barsToProcess = 5;        //--- Кол-во отображаемых периодов (линий) 

extern string  TimeFrames = "M1,5,15,30; 60H1; 240H4; 1440D1; 10080W1; 43200MN.";  //--- Подсказка кол-во боров в Т/Ф


    //---  Глобальные переменные    

string    Name_Line;         //--- Имя Вертикальных уровней


//double    Price_H = High[0]; //--- Макс цены  

//double    Price_L = Low[0];  //--- Мин цены




//+------------------------------------------------------------------+

int init()

  {  

   //--- 

        return(0);

  }

//+------------------------------------------------------------------+

int deinit()

  {

   int i;  

         for (i=0; i<Bars; i++)                                    //--- Выбираем все установленные объекты  

           {

              ObjectDelete(Name_Line + DoubleToStr(i,0));        //--- Удаляем все установленные линии

           }       

   return(0);

  }

//+------------------------------------------------------------------+

int start()

{                  

int counted_bars = IndicatorCounted();     //--- перем counted_bars = функц.  Возвращает количество баров

int limit;                                 //--- переменная  старт кол-во баров. Линии рисуем о по всем барам

int i=0;                                   //--- переменная i = 0 обнуление

   

if(counted_bars > 0) counted_bars --;      //--- последний посчитанный бар будет пересчитан 

  //--- основной цикл 

  limit = Bars - counted_bars;         

  for(i = 0; i < limit; i ++)

      {  

         //+-----  Выбираем количество линий отображаемых на экране 

         if(limit > barsToProcess)                                     //--- Если кол-во линий > Кол-ву отображаемых периодов (линий) 

         {

           limit = barsToProcess;                                      //--- Тогда устанавливаем Кол-во отображаемых периодов (линий)

           Name_Line = "Time_VLine M" + TF + " "+DoubleToStr(i,0);      //--- И присваиваем имя с соответствующими параметрами 

 //+------------------------ Рисуем линии -----------------------------------------------------+                 

             while (i<limit)                                           //--- Пока есть линии в окне терминала. Или пока висит индикатор в окне терминала.                        

             {   

               datetime t_Line  = iTime(Symbol(),TF,i);                 //--- В ПЕРЕМ t_Line Будет Присваиваться значение времени открытия бара


                   {

                      ObjectCreate (Name_Line + DoubleToStr(i,0),OBJ_VLINE,0,t_Line,0);         //--- Создаём обьект вертикальную линию

                      ObjectSet    (Name_Line + DoubleToStr(i,0),OBJPROP_STYLE,2);              //--- Со стилем

                      ObjectSet    (Name_Line + DoubleToStr(i,0),OBJPROP_COLOR,DimGray);        //--- Со цветом  

                      ObjectSet    (Name_Line + DoubleToStr(i,0),OBJPROP_WIDTH,0);              //--- С  толщиной

                      ObjectSet    (Name_Line + DoubleToStr(i,0),OBJPROP_BACK,0);               //--- С типом отображения. Объект на заднем плане

 //+-----------------------------------------------------------------------------+                 

                   }

                    i++;

             }

          }

      }

      

return(0);


}


 
     if(CopyRates(_Symbol, PERIOD_W1, dt, 1, mqlRates) < 0)        //--- Если бросили скрипт на выбранную свечку

      Print("");

在我的代码中,这不是一支蜡烛,而是一天。在你们那里,是一个星期。

从这一点上,你可以得到 画线的时间。你可能需要一个月的时间。月初的时候。但它很少与一周的开始相吻合。因此,你必须再施点魔法,弄清楚如何计算第一周的情况。

        ObjectCreate(0, objName, OBJ_TREND, 0, mqlRates[0].time + PERIOD_MN1, mqlRates[0].high, mqlRates[0].time + PeriodSeconds(PERIOD_MN1), mqlRates[0].high); 

因此,可以说是感受到了差异。在mql4中还没有很大的区别,但谁知道会有什么变化等着我们......

//--- Что здесь не так, при построении линии по лоу. На графике её нет. И Ошибки компиляции тоже нет? 

 //--- НО по отдельности всё работает.     

注意趋势线的名称。

 //----- Для чего нужен этот блок если линия отрисовывается на графике и без него   

我有3条线,这就是为什么我有3个函数和3条线的名称。

 
谢谢你的帮助,但我没有完全理解。
 

那么只有一个问题的答案

//--- Что здесь не так, при построении линии по лоу. На графике её нет. И Ошибки компиляции тоже нет? 

 //--- НО по отдельности всё работает.     

你这里有相同的行名,它应该是不同的。

你为什么要删除和更正你的信息?

 

你很长时间没有回复,我以为你没有回答愚蠢的问题,所以我把它们删除了。