[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 373

 
sv.:

奇怪。
,它显示了一切。
,也许图表需要垂直压缩,如果通道很宽,放大后可能看不到。

调整参数后出现了一些问题。只有一个非常狭窄的范围符合EA的条件。向左走一步,向右走一步--什么都没有。而这些条件并不符合平面的定义。我在4位数的100分时得到一个平局。而且一切都显示得很准确。

//+------------------------------------------------------------------+
//|                                           ind_FletChannel_07.mq4 |
//|                                            Copyright © 2013, sv. |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2013, sv."
#property link      "7009731@mail.ru"
//----
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1 Blue
#property indicator_color2 Red
#property indicator_color3 Blue
#property indicator_color4 Red
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
//----
extern int    Distans     = 20;      // Количество баров для определения канала
extern int    Channel     = 1000;     // Размер в пипсах канала
extern int    ZoneUnSence = 80;      // Размер выхода за границы канала, в пипсах
extern int    PauseBar    = 1;       // А это по ходу дела - смещение баров,т.е. где нужно считать.
//----
double Up[];
double Down[];
double UpSupport[];
double DownResistance[];

double pnt;
double high,   low;
double high_1 = 0,
       low_1  = 0;
bool   up_chanel, dn_chanel, FirstChanel;
bool   DrawChannel = false;
int    limit,  History=0;        // 0- все бары
int    n=0, n_up=0, n_dn=0;
int    Bar;

//+------------------------------------------------------------------+
int init() 
  {
//----
 //  pnt=Point;
 //  if(Digits==5 || Digits==3) pnt*=10;
   
 //  IndicatorDigits(Digits);
 //  IndicatorBuffers(4);
//----      
   SetIndexBuffer(0,Up);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexEmptyValue(0,0.0);

   SetIndexBuffer(1,Down);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexEmptyValue(1,0.0);
   
   SetIndexBuffer(2,UpSupport);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexEmptyValue(2,0.0);

   SetIndexBuffer(3,DownResistance);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexEmptyValue(3,0.0);
//----      
   return(0);
  }
//+------------------------------------------------------------------+
int start() 
  { 
   limit = Bars-IndicatorCounted()-1; 
   if(limit > 1)                    limit = Bars-1;
   if(History!=0 && limit>History)  limit = History-1;                   // кол-во пересчетов по истории

   Bar = limit;
   
   // ------------------------------------------------------------------
   for(int i=limit; i>=0; i--) 
     {
      if(i < Bar-PauseBar)
       {
        // если не активна отрисовка канала, ищем канал.
        if(DrawChannel==false)
         {
          // отределяется минимум и максимум на заданном интервале Distans
          double low  = iLow (NULL,0,iLowest (NULL,0,MODE_LOW, Distans,i));
          double high = iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,Distans,i));
          
          // и если разность между максимумом и минимумом меньше заданной ширины канала Channel
          if( (high-low) < Channel*Point )  DrawChannel=true;
         }  
       }
      // ------------------------------------------------------------------
      if(DrawChannel)
       {  
        // определяются границы канала как максимум и минимум на интервале Distans
        
        // отрисовка первоначального отправного канала
        if(FirstChanel) { Up[i]   = high;   Down[i] = low;  }
        if(up_chanel)   { Up[i]   = high;   UpSupport[i]      = high - Channel*Point; }   // отрисовка канала тренда вверх
        if(dn_chanel)   { Down[i] = low;    DownResistance[i] = low  + Channel*Point; }   // отрисовка канала тренда вниз
        
        // определяются границы отправного первоначального канала
        // ------------------------------------------------------------------
        if( high_1==0 && low_1==0 )    
         {
          FirstChanel=true;  high_1=high;  low_1=low; 
         }
        else                     // если первоначальный отправной канал уже определён и отрисован
         { 
          if(high > high_1)      // если верхняя граница нового канала выше верхней границы предыдущего канала, то это восходящий тренд
           {
            up_chanel=true;      // активируем флаг отрисовки канала тренда вверх
            high_1 = high;       // и перезаписываем значение
            low_1  = low;
           }
        
          if(low < low_1)        // если нижняя граница нового канала ниже нижней границы предыдущего канала, то это нисходящий тренд
           {
            dn_chanel=true;      // активируем флаг отрисовки канала тренда вниз
            high_1=high;         // и перезаписываем значение
            low_1=low;
           }
         }  
        // ------------------------------------------------------------------
        
        if(Up[i]!=0 && UpSupport[i]!=0)        // пока условие выполняется, границы канала не изменяются
         {
          if ((Close[i] > Up[i]        + ZoneUnSence*Point) ||
              (Close[i] < UpSupport[i] - ZoneUnSence*Point))
           {
            // если условие не выполняется, флаг сбрасывается - Т.е. если не в границах канала
            up_chanel=false;
            dn_chanel=false;
            FirstChanel=false; 
            DrawChannel=false;
           }
         } 
        // ------------------------------------------------------------------
        if(Down[i]!=0 && DownResistance[i]!=0)
         {
          if ((Close[i] > DownResistance[i]+ZoneUnSence*Point) ||
              (Close[i] < Down[i]-ZoneUnSence*Point))
           {
            // если условие не выполняется, флаг сбрасывается - Т.е. если не в границах канала
            up_chanel=false;
            dn_chanel=false;
            FirstChanel=false;
            DrawChannel=false;
           }
         }
        if(Up[i]!=0 && Down[i]!=0)
         {
          if ((Close[i] > Up[i]   + ZoneUnSence*Point) ||
              (Close[i] < Down[i] - ZoneUnSence*Point))
           {
            // если условие не выполняется, флаг сбрасывается
            up_chanel=false;
            dn_chanel=false;
            FirstChanel=false; 
            DrawChannel=false;
           }
         }    
        Bar = i; 
       }    
     } 
   // Конец перебора
   // ------------------------------------------------------------------
   return(0);
  }
//+------------------------------------------------------------------+

我把它改了一下--我试着去理解它。但它是这样工作的。我用的是H1。糟糕的是,由于参数的选择,我没能在其他TF上显示出来。例如,在5分钟和15分钟。- 人们可以建议,使用这些TFs就有可能实现平坦。(如果有更有经验的人给出了一些想法或指出了错误)。

我没有注意到渲染方面的任何问题。

在你的指标中,以及在大多数人的情况下,画一次的东西就是正常的指标书写 模板。但是现在发生的事情(如你所说--在当前柱状体上)并不符合这个指标的条件。因此,在目前的酒吧没有问题。

 
Chiripaha:

调整参数后出现了一些问题。只有一个非常狭窄的范围符合EA的条件。向左走一步,向右走一步--什么都没有。而这些条件并不符合平面的定义。我在4位数的100分时得到一个平局。一切都画得很清楚。

我可能改动了一下--我试着去理解它。但它是这样工作的。我用的是H1。糟糕的是,我没能通过参数选择在其他TFs上显示它。例如,在5分钟和15分钟。- 人们可以建议,使用这些TFs就有可能实现平坦。(如果有更有经验的人给出了一些想法或指出了错误)。

我没有注意到绘画方面的任何问题。

你在这个指标中所拥有的,以及绝大多数,都是在渲染曾经的东西;这对于指标编写模板来说是正常的。但是现在发生的事情(如你所说--在当前柱状体上)并不符合这个指标的条件。因此,在目前的酒吧里没有任何问题。


参数PauseBar是将一个通道与另一个通道分开的最小距离,在你的版本中,这个参数应该大于5,然后在不同的其他参数下绘制
但是,用新条子渲染的问题仍然存在。

 
sv.:


参数PauseBar是一个通道与另一个通道之间的最小距离,在你的版本中,这个参数应该大于5,然后它与其他不同的参数一起绘制
但随着新酒吧的到来,渲染的问题仍然存在。

说实话,我不理解你的指标的工作逻辑(尽管我理解其本质)。但是...

看--问题恰恰就在这块。

        if(FirstChanel) { Up[i]   = high;   Down[i] = low;  }                             // отрисовка первоначального отправного канала
        if(up_chanel)   { Up[i]   = high;   UpSupport[i]      = high - Channel*Point; }   // отрисовка канала тренда вверх
        if(dn_chanel)   { Down[i] = low;    DownResistance[i] = low  + Channel*Point; }   // отрисовка канала тренда вниз

在某些时候,值不会被写入缓冲区,因此它们被分配的值是 "零"。因此,棍子倒了--到了零。如何建立逻辑,添加什么--我无法理解。但数据显然没有被写入,因为你有标志,包括参数

DrawChannel=false;

因此,这些值不会被分配到缓冲区。- 你需要以某种方式来玩弄这个。

 
Chiripaha:

我还不能说得更具体--说实话,我不理解你的指标的逻辑(尽管我确实理解)。但是...

看--问题恰恰就在这块。

在某些时候,值不会被写入缓冲区,因此它们被分配的值是 "零"。因此,棍子倒了--到了零。如何建立逻辑,添加什么--我无法理解。但数据显然没有被写入,因为你有标志,包括参数

因此,这些值不会被分配到缓冲区。- 你需要以某种方式来玩弄这个。


我明白了,所以这是个逻辑问题。我会考虑的。
谢谢你的帮助。

P.S.
检查一下,在你的历史上,增加PauseBar参数与另一组其他参数,是否一切都渲染得很好,还是也有问题?

 
如何查看和显示扩展的ascicode表符号?
 
sv.:


我明白了,所以这是个逻辑问题。我将继续思考。
谢谢你的帮助。

P.S.
你至少要检查一下,当用一组不同的其他参数增加PauseBar参数时,你的历史记录上是否能正确显示一切,还是也有问题?

我通过增加PauseBar检查,在1分钟和5分钟时得到了这些棒子。但我想不出如何正确绕过它们。我理解,你需要写上大概(但不是很明显),如果价值

DrawChannel=false;

в

if(dn_chanel)   { Down[i] = low;    DownResistance[i] = low  + Channel*Point; }   // отрисовка канала тренда вниз

前一个条形图的值 - 类似这样。

if(dn_chanel)   { Down[i] = Down[i+1];    DownResistance[i] = DownResistance[i+1]; }   // отрисовка канала тренда вниз
但当我尝试这样做时,我的整个指标都 "动 "了起来--因为我不明白其中的逻辑,也不明白应该把它放在哪里,在什么条件下。
 
zfs:
如何查看和显示扩展的ascicode表字符?

这被称为ANSI。

脚本附后。

附加的文件:
ansi.mq4  2 kb
[Deleted]  
第一次在论坛上,我决定问一个我感兴趣的问题--是否有可能在终端进行修改,在已经开仓的情况下插入我的评论(1次或多次)? 不是在你打开评论时立即进行。而是在你已经打开的情况下--使当前评论出现?
 
请告知如何解决这个问题:同一个EA在几个图表上,一个开单的信号同时出现在两个图表上,比如说。然而,我们需要第二个订单不要打开。EA有一个检查未平仓订单的功能,但这没有帮助,因为第一个EA可能已经平仓了,第二个也发出了平仓请求。是否有任何可能的解决方案?
 
Twoberg:
第一次在论坛上,我决定问一个我感兴趣的问题--是否有可能在终端进行这样的修改,在已经打开的位置上插入我的评论(1次或多次)? 不是在你打开评论时立即进行。而是在你已经打开它时--这样就会出现当前的评论?

没有