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

 
Alex_Profit:

我不知道该怎么做。你能给我一个提示吗?最长期限为一个月。

在变量t_Line 中,我们需要插入第1、2、3、4、kv的值。

我无法理解。

我将不胜感激。

哦,这是一个怎样的程序......。你明白你写的是什么,还是什么?为什么同一个计数器上会有两个循环?至少要在每次迭代时手动检查变量i 的值。

什么是barToProcess?它在哪里声明,等于什么?同样,一个限制 两个循环,它不会导致任何好的结果;当你写这样的代码时,你必须战胜自己,这样就不会白费力气了。

计算图表上运行的TF的条数,与MN1的周期一起工作,是没有意义的。

我认为没有必要写一个每季度画一条线的指标,同时在图表上不断运行,我认为对于这些任务,脚本就可以做到,运行,标记图表,卸载。

 

不是我写的,是我发现了一个这样的指标,然后开始拆解它。我自己刚刚开始,所以我不是很擅长。我读过用户手册,但它并不总是能被理解的。我在开车时有 "嘎吱嘎吱 "的声音。有一个可以征求意见的论坛,这很好。如果能就编程问题与人交谈,那就太好了。

特别感谢你的批评。然而,这个问题仍然没有解决。同样感谢你的回应。

 
Alex_Profit:

不是我写的,是我发现了一个这样的指标,然后开始拆解它。我自己刚刚开始,所以我不是很擅长。我读过用户手册,但它并不总是能被理解的。我在开车时有 "吱吱 "声。有一个可以征求意见的论坛,这很好。如果能就编程问题与人交谈,那就太好了。

特别感谢你的批评。然而,这个问题仍然没有解决。不过,感谢你的回应。

好吧,这是一个粗略的草图,例如,在我的膝盖上刚才写了一个快速脚本。

void OnStart()
{
   int limit=iBars(_Symbol,PERIOD_MN1);
   for(int i=0;i<=limit;i++)
   {
      datetime timemn=iTime(_Symbol,PERIOD_MN1,i);
      int  month=TimeMonth(timemn);
      if(month==1 || month==4 || month==7 || month==10)
      {
         int qt=0;
         switch(month)
         {
            default:break;
            case 1: qt=1;break;
            case 4: qt=2;break;
            case 7: qt=3;break;
            case 10: qt=4;break;
         }
 
         string name=StringConcatenate("Qt"+IntegerToString(qt)+", "+TimeToStr(timemn));
         ObjectCreate (name,OBJ_VLINE,0,timemn,0);         //--- Создаём обьект вертикальную линию
         ObjectSet    (name,OBJPROP_STYLE,2);              //--- Со стилем
         ObjectSet    (name,OBJPROP_COLOR,DimGray);        //--- Со цветом  
         ObjectSet    (name,OBJPROP_WIDTH,0);              //--- С  толщиной
         ObjectSet    (name,OBJPROP_BACK,0);               //--- С типом отображения. Объект на заднем плане
      }
   }   
}

一个小的缺点--如果该季度在周末开始,那么线就画 在周五的最后一个条形上。而历史上的第一个季度也将保持没有线,例如,如果历史从第2天开始。这是为了指定月份的数字,如果它不是1号,那么就应该取下一个月的数字。

要从图表中删除这个脚本的所有行,可以运行这个脚本。

void OnStart()
{
     ObjectsDeleteAll(0,"Qt");
}

你可以制作一个循环的脚本,检查所需条形图上特定线条的存在,这样就不会试图在已经画好的线条上再加一条线,并且在脚本的去初始化时删除标记。

你还可以在设置中放入行参数,还有很多事情可以做。

 
evillive:

这是一个粗略的草图,例如,我只是在我的膝盖上写了一个快速脚本。

这很好。非常感谢你。

我想知道要花多长时间才能学会这些招数?

 

大约与阅读语言参考资料并记住那里的内容和位置所需的时间一样长。

这是假设你至少有一种类似C语言的编程技能。技巧不仅仅体现在语法上,你需要了解程序将如何 "生存",什么跟什么。

如果没有这个条件,但有学习的愿望,一年时间应该绰绰有余。

 
evillive:

如果你没有这个条件,但你想学习,一年的时间应该绰绰有余。

我明白了。

 

我甚至不知道如何解决这个问题。我需要对它进行最后的润色。我也还搞不清楚怎么做。

竖线 是画出来的,没有问题。但如何在高位柱上画出蓝条,对我来说仍然是个谜。

这条线是当天的。 试图将其与缓冲区绑定,但没有成功。

如果您能提供帮助,我将非常感激。

谢谢你。

 
Alex_Profit:

我甚至不知道如何解决这个问题。我需要对它进行最后的润色。我也还搞不清楚怎么做。

竖线是画出来的,没有问题。但如何在高位柱上画出蓝条,对我来说仍然是个谜。

这条线是当天的。 试图将其与缓冲区绑定,但没有成功。

如果您能提供帮助,我将非常感激。

谢谢你。

向我们展示代码,我们将一起修复它。
 

不要踢我,代码是 "马虎 "的。我已经明白了。我希望通过实例和错误达到一个合乎逻辑的结果。

最低限度的任务,它是有效的。而且随着经验的积累,它将变得 "更漂亮"。

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

#property strict

#property indicator_chart_window

   

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

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


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

string Name_VLine;     //--- Имя Элементов

string Name_CHECK;     //--- Имя Элементов


//MqlDateTime mqlDateTime;

MqlRates    mqlRates[1];


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

int init()

  {  

    return(0);

  }

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

int deinit()

  {

   int i;  

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

           {

              ObjectDelete(Name_VLine + " VLine"  + DoubleToStr(i,0));          //--- Удаляем все объекты

              ObjectDelete(Name_CHECK + "H_CHECK"  + DoubleToStr(i,0));  //--- Удаляем все объекты

              ObjectDelete(Name_CHECK + "L_CHECK"  + DoubleToStr(i,0));  //--- Удаляем все объекты

           }       

   return(0);

  }

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

int start()

{                  

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

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

   

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

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

  limit = Bars - counted_bars;         

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

      {

      

 //+------------------------ При выборе кол-ва линий отобразим их ко-во------------------------+                 

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

         {

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

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

             {   

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

               CopyRates(_Symbol, PERIOD_H4, t_Line, 1, mqlRates);

   {


         //--- кубики по хай (В место галочек нужно подставить кубики)

         ObjectCreate    (0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].high, t_Line,mqlRates[0].high);

         ObjectSetInteger(0,Name_CHECK + "H_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen); 

   

         //--- кубики по лоу (В место галочек нужно подставить кубики)

         ObjectCreate    (0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJ_ARROW_CHECK, 0, t_Line, mqlRates[0].low, t_Line,mqlRates[0].low);

         ObjectSetInteger(0,Name_CHECK + "L_CHECK" + DoubleToStr(i,0), OBJPROP_COLOR, clrGreen); 

        

    //+------------------------ Рисуем вертикальную линии -----------------------------------------------------+                 

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

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

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

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

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

 }

  i++;

             }

          }

      }

      

   return(0);

}


 
Alex_Profit:

不要踢我,代码是 "马虎 "的。我已经明白了。我希望通过实例和错误达到一个合乎逻辑的结果。

最低限度的任务,它是有效的。而且随着经验的积累,它将变得 "更漂亮"。

那么,它在哪里工作?这些线是在每个柱子上画的,而不是在TK上。或者在上面的图片中,TF=H1?

在一张纸上计算出每个周期迭代时的极限和 i 将等于多少。

按照我的理解,上面显示的我的例子从来没有被核算过。

可以使用指标缓冲区 来绘制刻度线箭头,就像连接烛台阴影的线条一样。