[ARQUIVO]Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por ela. Não posso ir a lugar nenhum sem você - 5. - página 373

 
sv.:

estranho.
verificado, mostra tudo.
talvez o gráfico precise ser comprimido verticalmente, se o canal for largo, pode não ser visível quando ampliado.

Algo surgiu depois de ajustar os parâmetros. Apenas uma faixa muito estreita se ajusta às condições da EA. Um passo para a esquerda, um passo para a direita - nada. E estas condições não se enquadram na definição de um apartamento. Estou obtendo um apartamento de 100 pontos em 4 dígitos. E tudo é mostrado com precisão.

//+------------------------------------------------------------------+
//|                                           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);
  }
//+------------------------------------------------------------------+

Eu o alterei um pouco - tentei entendê-lo. Mas funciona dessa forma. Eu usei H1. É ruim que eu não tenha conseguido mostrá-lo em outras TFs devido à seleção de parâmetros. Por exemplo, em 5 e 15 minutos. - Poder-se-ia sugerir que seria possível conseguir um apartamento usando essas TFs. (Se alguém com um ponto de vista mais experiente der algumas idéias ou apontar os erros).

Mas eu não notei nenhum problema com a renderização.

Em seu indicador, assim como no caso da maioria, o que é desenhado uma vez é o que é normal para o modelo de escrita do indicador. Mas o que está acontecendo agora (como você disse - na barra atual) não se enquadra nas condições deste indicador. Portanto, não há nenhum problema no bar atual.

 
Chiripaha:

Algo surgiu depois de ajustar os parâmetros. Apenas uma faixa muito estreita se ajusta às condições da EA. Um passo para a esquerda, um passo para a direita - nada. E estas condições não se enquadram na definição de um apartamento. Estou obtendo um apartamento de 100 pontos em 4 dígitos. Tudo é desenhado claramente.

Posso tê-lo alterado um pouco - tentei compreendê-lo. Mas funciona dessa forma. Eu usei H1. É ruim que eu não tenha conseguido mostrá-lo em outras TFs através da seleção de parâmetros. Por exemplo, em 5 e 15 minutos. - Poder-se-ia sugerir que seria possível conseguir um apartamento usando essas TFs. (Se alguém com um ponto de vista mais experiente der algumas idéias ou apontar os erros).

Não notei nenhum problema com o desenho.

O que você tem neste indicador, assim como a grande maioria, é renderizar o que já foi; o que para o modelo de escrita do indicador é normal. Mas o que está acontecendo agora (como você disse - na barra atual) não se enquadra nas condições deste indicador. Portanto, não há nenhum problema no bar atual.


O parâmetroPauseBar é a distância mínima que separa um canal de outro, em sua edição este parâmetro deve ser maior que 5, então ele é desenhado em outros parâmetros diferentes.
Mas o problema de renderização com barras novas permanece.

 
sv.:


O parâmetroPauseBar é a distância mínima que separa um canal de outro, em sua edição este parâmetro deve ser maior que 5, então ele é desenhado com outros parâmetros diferentes.
Mas o problema de renderização com a chegada de novas barras permaneceu.

Para ser honesto, não entendo a lógica do trabalho de seu indicador (embora eu entenda sua essência). Mas...

Veja - o problema está exatamente neste bloco:

        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; }   // отрисовка канала тренда вниз

Em algum momento, os valores não são escritos em buffers e, portanto, lhes é atribuído um valor "zero". Daí os paus para baixo - para zero. Como construir lógica e o que acrescentar - não consigo entender. Mas os dados não são escritos obviamente porque você tem bandeiras, incluindo o parâmetro

DrawChannel=false;

Portanto, os valores não podem ser atribuídos aos amortecedores. - Você precisa brincar com isso de alguma forma.

 
Chiripaha:

Ainda não posso ser mais específico - Para ser honesto, não entendo a lógica de seu indicador (embora eu o entenda). Mas...

Veja - o problema está exatamente neste bloco:

Em algum momento, os valores não são escritos em buffers e, portanto, lhes é atribuído um valor de "zero". Daí os paus para baixo - para zero. Como construir lógica e o que acrescentar - não consigo entender. Mas os dados não são escritos obviamente porque você tem bandeiras, incluindo o parâmetro

Portanto, os valores não podem ser atribuídos aos amortecedores. - Você precisa brincar com isso de alguma forma.


Entendo, então é uma questão de lógica. Vou pensar sobre isso.
Obrigado por sua ajuda.

P.S.
Verifique se tudo está bem apresentado em sua história com o parâmetro PauseBar crescente com outro conjunto de outros parâmetros, ou há algum problema com isso também?

 
como visualizar e exibir o símbolo da tabela de ascicode estendida?
 
sv.:


Entendo, então é uma questão de lógica. Vou continuar pensando.
Obrigado por sua ajuda.

P.S.
Você ao menos verifica se tudo é exibido corretamente em seu histórico ao aumentar o parâmetro PauseBar com um conjunto diferente de outros parâmetros, ou há algum problema com ele também?

Verifiquei com o PauseBar crescente e consegui estes bastões a 1 e 5 minutos. Mas não consigo descobrir como contorná-las corretamente. Eu entendo que você precisa escrever provavelmente (mas não obviamente) se o valor

DrawChannel=false;

в

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

o valor das barras anteriores - algo como isto:

if(dn_chanel)   { Down[i] = Down[i+1];    DownResistance[i] = DownResistance[i+1]; }   // отрисовка канала тренда вниз
Mas quando tento fazer isso, todo meu indicador "se move" - porque não entendo a lógica e não entendo onde colocá-lo e sob quais condições.
 
zfs:
como visualizar e exibir o caráter de tabela de ascicode estendida?

Isto é chamado ANSI.

O roteiro está anexado.

Arquivos anexados:
ansi.mq4  2 kb
 
Pela primeira vez no fórum, decidi fazer uma pergunta que me interessa - é possível fazer mudanças no terminal para inserir meu comentário (1 ou mais vezes) quando uma posição já está aberta? não imediatamente quando você abre um comentário. mas quando você já o abriu - para que o comentário atual apareça?
 
Favor aconselhar como resolver o problema: A mesma EA está em vários gráficos, um sinal para abrir uma ordem aparece em dois gráficos ao mesmo tempo, por exemplo. No entanto, precisamos da segunda ordem para não abrir. A EA tem um cheque para um pedido aberto, mas isso não ajuda porque a primeira EA provavelmente abriu um pedido e a segunda também envia um pedido para abrir um pedido. Existe alguma solução possível?
 
Twoberg:
Pela primeira vez no fórum, decidi fazer uma pergunta que me interessa - é possível fazer tais mudanças no terminal para inserir meu comentário (1 ou mais vezes) sobre uma posição já aberta? não imediatamente quando você abre um comentário. mas quando você já o abriu - para que o comentário atual apareça?

Não

Razão: