[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 373

 
sv.:

strano.
controllato, mostra tutto.
forse il grafico deve essere compresso verticalmente, se il canale è largo, potrebbe non essere visibile quando si ingrandisce.

È venuto fuori qualcosa dopo aver regolato i parametri. Solo una gamma molto ristretta si adatta alle condizioni dell'EA. Un passo a sinistra, un passo a destra - niente. E queste condizioni non rientrano nella definizione di appartamento. Sto ottenendo un flat a 100 punti in 4 cifre. E tutto è mostrato accuratamente.

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

L'ho modificato un po' - ho cercato di capirlo. Ma funziona così. Ho usato H1. È male che non sono riuscito a mostrarlo su altri TF a causa della selezione dei parametri. Per esempio, su 5 e 15 minuti. - Si potrebbe suggerire che sarebbe possibile ottenere un flat usando questi TF. (Se qualcuno con un punto di vista più esperto dà qualche idea o fa notare gli errori).

Non ho notato alcun problema con il rendering.

Nel tuo indicatore, così come nel caso della maggioranza, ciò che viene disegnato una volta è ciò che è normale per il modello di scrittura dell'indicatore. Ma quello che sta succedendo ora (come hai detto tu - sulla barra attuale) non rientra nelle condizioni di questo indicatore. Pertanto, non c'è nessun problema al bar attuale.

 
Chiripaha:

Qualcosa è venuto fuori dopo aver regolato i parametri. Solo una gamma molto ristretta si adatta alle condizioni dell'EA. Un passo a sinistra, un passo a destra - niente. E queste condizioni non rientrano nella definizione di appartamento. Sto ottenendo un flat a 100 punti in 4 cifre. Tutto è disegnato chiaramente.

Forse l'ho alterato un po' - ho cercato di capirlo. Ma funziona così. Ho usato H1. È male che non sono riuscito a mostrarlo su altri TF attraverso la selezione dei parametri. Per esempio, su 5 e 15 minuti. - Si potrebbe suggerire che sarebbe possibile ottenere un flat usando questi TF. (Se qualcuno con un punto di vista più esperto dà qualche idea o fa notare gli errori).

Non ho notato alcun problema con il disegno.

Quello che avete in questo indicatore, così come la grande maggioranza, è il rendering di ciò che era una volta; il che per il modello di scrittura dell'indicatore è normale. Ma quello che sta succedendo ora (come hai detto tu - sulla barra attuale) non rientra nelle condizioni di questo indicatore. Pertanto, non c'è nessun problema sulla barra attuale.


Il parametroPauseBar è la distanza minima che separa un canale dall'altro, nella tua edizione questo parametro dovrebbe essere maggiore di 5, poi viene disegnato a diversi altri parametri.
Ma il problema del rendering con le nuove barre rimane.

 
sv.:


Il parametroPauseBar è la distanza minima che separa un canale dall'altro, nella tua versione questo parametro dovrebbe essere maggiore di 5, poi viene disegnato con diversi altri parametri.
Ma il problema del rendering con l'arrivo di nuove barre è rimasto.

Per essere onesto, non capisco la logica del lavoro del tuo indicatore (anche se ne capisco l'essenza). Ma...

Guarda - il problema sta esattamente in questo blocco:

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

Ad un certo punto i valori non vengono scritti nei buffer e quindi viene loro assegnato il valore "zero". Da qui i bastoni verso il basso - a zero. Come costruire la logica e cosa aggiungere - non riesco a capire. Ma i dati non vengono scritti ovviamente perché avete dei flag, compreso il parametro

DrawChannel=false;

Pertanto, i valori non vengono assegnati ai buffer. - Devi giocare con questo in qualche modo.

 
Chiripaha:

Non posso ancora essere più specifico - Per essere onesto, non capisco la logica del tuo indicatore (anche se lo capisco). Ma...

Guarda - il problema sta esattamente in questo blocco:

Ad un certo punto i valori non vengono scritti nei buffer e quindi viene loro assegnato il valore "zero". Da qui i bastoni verso il basso - a zero. Come costruire la logica e cosa aggiungere - non riesco a capire. Ma i dati non vengono scritti ovviamente perché avete dei flag, compreso il parametro

Pertanto, i valori non vengono assegnati ai buffer. - Devi giocare con questo in qualche modo.


Capisco, quindi è una questione di logica. Ci penserò.
Grazie per il vostro aiuto.

P.S.
Controlla se tutto è reso bene sulla tua cronologia con l'aumento del parametro PauseBar con un'altra serie di altri parametri, o c'è un problema anche con questo?

 
come si visualizza il simbolo della tabella ascicode estesa?
 
sv.:


Capisco, quindi è una questione di logica. Continuerò a pensare.
Grazie per il vostro aiuto.

P.S.
Almeno controlli se tutto viene visualizzato correttamente sulla tua cronologia quando aumenti il parametro PauseBar con un diverso insieme di altri parametri, o c'è un problema anche con questo?

Ho controllato con l'aumento di PauseBar e ho ottenuto questi stick a 1 e 5 minuti. Ma non riesco a capire come bypassarli correttamente. Capisco che bisogna scrivere probabilmente (ma non ovviamente) se il valore

DrawChannel=false;

в

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

il valore delle barre precedenti - qualcosa del genere:

if(dn_chanel)   { Down[i] = Down[i+1];    DownResistance[i] = DownResistance[i+1]; }   // отрисовка канала тренда вниз
Ma quando provo a farlo, tutto il mio indicatore si "muove" - perché non capisco la logica e non capisco dove metterlo e in quali condizioni.
 
zfs:
come si visualizza il carattere esteso della tabella ascicode?

Questo si chiama ANSI.

Lo script è allegato.

File:
ansi.mq4  2 kb
 
Per la prima volta sul forum, ho deciso di fare una domanda che mi interessa - è possibile fare modifiche nel terminale per inserire il mio commento (1 o più volte) quando una posizione è già aperta? non immediatamente quando si apre un commento. ma quando lo si è già aperto - in modo che il commento corrente appaia?
 
Per favore consigliatemi come risolvere il problema: lo stesso EA è su diversi grafici, un segnale per aprire un ordine appare su due grafici allo stesso tempo, per esempio. Tuttavia, abbiamo bisogno che il secondo ordine non si apra. L'EA ha un controllo per un ordine aperto ma non aiuta perché il primo EA ha probabilmente aperto un ordine e il secondo invia anche una richiesta di aprire un ordine. Ci sono soluzioni possibili?
 
Twoberg:
Per la prima volta sul forum, ho deciso di fare una domanda che mi interessa - è possibile fare tali modifiche nel terminale per inserire il mio commento (1 o più volte) su una posizione già aperta? non immediatamente quando si apre un commento. ma quando lo si è già aperto - in modo che il commento corrente appaia?

No