[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 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分に。- そのTFを使って、フラットを実現することも可能だということです。(経験豊富な方からのアイデアや間違いの指摘があれば)。

しかし、レンダリングに問題があるとは感じていません。

あなたのインジケーターでも、大多数の場合と同様に、一度描かれたものが、インジケーターの書き方 テンプレートとして正常なものなのです。しかし、今起こっていること(おっしゃるとおり、現在のバーで)は、このインジケータの条件に当てはまりません。したがって、現在のバーでは問題はない。

 
Chiripaha:

パラメータを調整したら何か出てきた。EAの条件に合うのは、非常に狭い範囲だけです。左へ一歩、右へ一歩......何もない。そして、これらの条件は、フラットの定義に当てはまらない。4桁の100点満点でフラットになっている。すべてがクリアに描かれています。

少し改変しているかもしれませんが......理解しようとしました。でも、そういう仕組みになっているんです。H1を使ってみた。パラメータ選択で他のTFに表示できなかったのはまずかったですね。例えば、5分と15分に。- そのTFを使って、フラットを実現することも可能だということです。(経験豊富な方からのアイデアや間違いの指摘があれば)。

描画に問題は感じませんでした。

このインジケーターもそうですが、大半のインジケーターは、かつてあったものをレンダリングしているもので、インジケーターを書くテンプレートとしては普通のことです。しかし、今起こっていること(おっしゃるとおり、現在のバーで)は、このインジケータの条件に当てはまりません。従って、現在のバーでは問題ありません。


PauseBar パラメータは、1つのチャンネルと別のチャンネルを分離する最小距離で、あなたの版ではこのパラメータは5以上でなければならず、その後、別のパラメータで描画 されます。
しかし、新しいバーでのレンダリングに問題が残ります。

 
sv.:


PauseBar パラメータは、1つのチャンネルと別のチャンネルを分離する最小距離で、あなたの版ではこのパラメータは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; }   // отрисовка канала тренда вниз

ある時点では、バッファに値が書き込まれないため、値として「0」が割り当てられる。それゆえ、スティックはゼロになった。ロジックをどう組み立てるか、何を足すか......理解できない。しかし、パラメータを含むフラグがあるため、明らかにデータは書き込まれません。

DrawChannel=false;

そのため、バッファに値が割り振られることはない。- どうにかして遊びたいんですよね。

 
Chiripaha:

まだ具体的には言えないのですが......正直なところ、あなたのインジケーターのロジックは理解できません(理解はできるのですが......)。でも...

いいですか、問題はまさにこのブロックにあるんです。

ある時点でバッファに値が書き込まれなくなるため、値として "0 "が割り当てられる。それゆえ、スティックはゼロになった。ロジックをどう組み立てるか、何を足すか......理解できない。しかし、パラメータを含むフラグがあるため、明らかにデータは書き込まれません。

そのため、バッファに値が割り振られることはない。- どうにかして遊びたいんですよね。


なるほど、理屈の問題なんですね。考えておくよ。
よろしくお願いします。

追伸
PauseBarパラメータを他のパラメータのセットで増加させ、あなたの履歴上ですべてがうまくレンダリングされているかどうかを確認し、またはそれにも問題があるのでしょうか?

 
拡張ASCICODEテーブルシンボルを表示するにはどうしたらいいですか?
 
sv.:


なるほど、理屈の問題なんですね。考え続ける。
よろしくお願いします。

追伸
少なくとも、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
 
フォーラムで初めて、私は私に興味のある質問をすることにしました - それはポジションが既に開いているときに私のコメント(1回以上)を挿入するために端末に変更を加えることは可能ですか?あなたがコメントを開いたときにすぐにではなく、あなたが既にそれを開いているとき - 現在のコメントが表示されるようにする?
 
同じEAが複数のチャートにあり、注文を開くシグナルが2つのチャートに同時に表示されるなど、問題を解決する方法をご教示ください。ただし、2順目は開かないようにする必要があります。EAには未決済注文のチェック機能がありますが、最初のEAがおそらく注文を開いていて、2番目のEAも注文を開く要求を送ってくるので、役に立ちません。何か解決策はあるのでしょうか?
 
Twoberg:
フォーラムで初めて、私は私に興味のある質問をすることにしました - それはすでにオープンポジションに私のコメント(1回以上)を挿入するために、端末でそのような変更を加えることは可能ですか? あなたがコメントを開いたときにすぐにではありません。

いいえ