どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 224

 
Integer:


どうして「it」の代わりに「ito」と書くのか、教えてください。

1.it "のスペルは "e "であって "e "でないことを知らないのか?

2.手を動かすのが億劫で、「e」を押した方が楽なのでは?

3.キーボードに「e」キーはないのですか?ない場合は、なぜないのか?

4.何か特別なポン付けなのでしょうか?

5.その他、不明な点がある。何ですか?


私はロシア人ではないので、キーボードにロシア語の文字がありません。しかも、発音キーボード(ソフトです)を使っています。p "を押しても、"p "と表示される。e」の文字もある。と入力しなければならない。

文法が忘れられて久しいので、文法的な間違いがある。ロシア語で書かなければならないのは掲示板だけで、それも何年も経ってからです。

間違いがあったことをお詫びします。あまり蹴らないでください。

 
artmedia70:

iFractals() は「空の値」(EMPTY_VALUE) ではなく、フラクタルがないとしてゼロを返すので、この行は削除してかまいません。

質問は以下の通りです。2つの連続するフラクタルに注目するインジケータを作ろうとしているのでしょうか?それとも、EAで現在のバーに最も近い2つの連続したフラクタルを検索しているのでしょうか?なぜなら、インジケータとExpert Advisorの検索方法は異なっており、インジケータは最後から最初へ、つまり過去から現在へ計算し、Expert Advisorは現在から過去へバーを検索するためです。したがって、Expert Advisorとインジケーターでは、検索方向も異なります。

そして最後の質問ですが、出力はどうすればいいのでしょうか?



iFractals() が何を返すかには興味がない(今まで知る必要がない)。もし本当に0なら - そうです、すみません、嘘をつきました、EMPTY_VALUEは チェックする必要がないのです。

この定式化は、いい加減な正当化として思いついたものです。私たちは、EMPTY_VALUEの一般的なケースを考え、0を返すローカルなケースを考えなかったのです。

しかし、そんな初歩的なことも知らなかったとは、恥ずかしいやら、自分でも面食らうやら。

Artmedia70 さんのおっしゃる通り、 Expert Advisorの場合はアプローチが 異なります。

時間がないので、夜、家に帰ってからやります。 お互いによく理解して いなかったので (2つのフラクタルの条件を見つけた後、イベントを処理する必要があります)、すべてOK です。

//----
   БЛОК ПРОВЕРКИ НОВОГО БАРА;                //проверить наличие нового бара 

   int   a1=0,                               //преведущий фрактал (-1 ->нижний, 1 -> верхний)
         a2,                                 //нынешний фрактал  (-1 ->нижний, 1 -> верхний)
         a3,                                 //сума преведущий + нынешний
         kilkict,                            //была введена с мыслю уменьшить перерасчет после глобального расчета (идея просто еще не реализована)
         frac,                               //frac - флаг существования фракталов,
         frac1=0,                            //frac1- счетчик фракталов (+1 или 0 за цикл)сейчас просто выполняет роль фильтра, надо найти сперва 2 фрактала чтобы приступить к их сравнению.
         i;
     
   kilkict=Bars;                            

   for (i=3; i<kilkict;i++){                 // 3
      a2=0;
      frac=0;
      if(iFractals(NULL, 0, MODE_UPPER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //не нужно для iFrctals()данной проверки условий
            a2+=1;                           //к числу фракталов добавляем 1
            frac=1;                          //флаг - фрактал есть
            frac1++;                         //счетчик увеличиваем на 1
         }
      }
      if(iFractals(NULL, 0, MODE_LOWER, i)>0) {            
         if (Bufer0!=EMPTY_VALUE) {          //не нужно для iFrctals() данной проверки условий
            if(a2==0){              
               frac1++;                      //счетчик увеличиваем на 1 
               frac=1;                       //флаг - фрактал есть
            }
            a2+=-1;                          //к числу фракталов добавляем -1(т. е. уменшаем)
         }
      } 
      if (frac==0){continue;}                // если флага нет (фрактал не найден)
      if (frac1==1){                         //если счетчик равен 1,
         a1=a2; 
         continue;
      }          
      a3=a1+a2;
      if(a3<0)           { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; continue;}//Два фрактала вниз  подряд найдено// 
      if(a3>0)           { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; continue;}//Два фрактала вверх подряд найдено //
      if(a3==0 && a1==0) { a1=a2; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; БЛОК ОБРАБОТКИ УСЛОВИЯ ДВА ФРАКТАЛА НАЙДЕНО; }// Два фрактала подряд вверх и два фрактала подряд вниз найдено //
   } 

 
gince:


...

間違いがあったことをお詫びします。あまり厳しく言わないでください。


ただ、不思議なことに、おかしな現象が起きているんです。
 
Integer:

ただ、不思議なことに、おかしな現象が起きているんです。

訂正ありがとうございます。
 
if(!SL==0)
   {
  dollarsPerPip = lot/SL;
   }

誰がそんなことするんだ?

if(SL>0) dollarsPerPip = lot/SL;

なぜわざわざ{ }をたくさんつけて、処理を遅くするのか...。

或いは

if(SL) dollarsPerPip = lot/SL;
 
gince:


インジケーターとExpert Advisorの検索方法は異なり、インジケーターは端から端まで、つまり過去から現在までを計算し、Expert Advisorは現在から過去までのバーを見て います。

for (i=kilkict;i>0;i--)

結果-2高→売り(矢印の下)、2安→買い(矢印の上)。信号はフラクタルの右側に+2本表示されます。それこそ冒頭のヒストリーでビジュアル的に確認したいですね。そして、おそらくフィルターも必要でしょう。

では、「歴史を見るだけならともかく、なぜこの指標を書くことで自分が疲れてしまうのか」ということです。Articulusのインジケーターへのリンクが表示されましたね。まさに思い通りになる。

//+------------------------------------------------------------------+
//|                                                    iFractals.mq4 |
//|                             Copyright © 2010, EGEN Software LTD. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright   "Copyright © 2010, EGEN Software LTD."
#property link        "http://www.metaquotes.net"

#property indicator_chart_window

#property indicator_buffers   2
#property indicator_color1    Lime
#property indicator_color2    Red
#property indicator_width1    2
#property indicator_width2    2

datetime TIME; double F,F1,F2;

double WAVE.0[];
double WAVE.1[];

bool EQ(int value1, int value2)
{
   return(value1==value2);
}

bool ZERO(int value)
{
   return(EQ(value,0));
}

int MathSign(double value1, double value2)
{
   if(value1<0)
      if(value2<0) return(-1);
   if(value1>0)
      if(value2>0) return(1);
   return(0);
}

bool TOTAL(int index)
{
   return(index<Bars);
}

double FRACTALS(int mode, int shift)
{
  return(iFractals(NULL,0,mode,shift));
}

double UPPER(int shift)
{
   return(FRACTALS(MODE_UPPER,shift));
}

double LOWER(int shift)
{
   return(FRACTALS(MODE_LOWER,shift));   
}

int PEAK(int shift)
{
   int peak=0;
   double F1=UPPER(shift); 
   if(F1>0) peak++;
   double F2=LOWER(shift); 
   if(F2>0) peak--;
   F=F1+F2; 
   return(peak);
}

void init()
{
   IndicatorBuffers(2);
   SetIndexBuffer(0,WAVE.0);
   SetIndexStyle(0,DRAW_ARROW,EMPTY);  
   SetIndexArrow(0,236);    
   SetIndexBuffer(1,WAVE.1);
   SetIndexStyle(1,DRAW_ARROW,EMPTY);      
   SetIndexArrow(1,238);
   IndicatorDigits(Digits);
   IndicatorShortName("iFractals");  
}

bool F1(int shift)
{
   int peak=PEAK(shift);
   if(ZERO(peak)) return(false); 
   F1=F*peak;
   return(true);
}

int WAVE.1(int shift)
{   
   for(int i=shift; TOTAL(i); i++) 
      if(F1(i)) break; 
   return(i);
}

bool F2(int shift)
{
   int peak=PEAK(shift);
   if(ZERO(peak)) return(false); 
   F2=F*peak;
   return(true);
}

int WAVE.2(int shift)
{   
   for(int i=shift; TOTAL(i); i++) 
      if(F2(i)) break; 
   return(i);
}

void WAVE(int shift)
{
   WAVE.0[shift]=EMPTY_VALUE;
   WAVE.1[shift]=EMPTY_VALUE;
   shift=WAVE.1(shift); 
   int index=shift; shift++;
   shift=WAVE.2(shift);
   int wave=MathSign(F1,F2);
   F1=MathAbs(F1);
   F2=MathAbs(F2);
   if(wave<0) 
      if(F1<F2) WAVE.1[index]=F1; else WAVE.0[index]=F1;                  
   if(wave>0) 
      if(F1>F2) WAVE.0[index]=F1; else WAVE.1[index]=F1;       
}   

void CheckWave()
{
   for(int i=3; TOTAL(i); i++) WAVE(i);
}   

void start()
{
   CheckWave();
}

物語を編纂して見る。そして、結論を導き出す。

それとも「ハンモックに立つ」方が快適なのでしょうか?

 
artmedia70:

では、「ネタを見たいだけなのに、なぜこのインジケーターを書いて自分を苦しめているのか?Articulusのインジケーターへのリンクが表示されましたね。まさに思い通りになる。

コンパイルして履歴を見る。そして、結論を出す。

それとも「ハンモックに立つ」方が快適なのでしょうか?



と、七面鳥の論理をなぞっていますね ))

20の機能を理解する必要はないだろう?

 
VOLDEMAR:

誰がそんなことするんだ?

なぜわざわざ{ }をたくさんつけて、処理を遅くするのか...。

或いは


面白い!知らなかった!調べてみますね。
 
ALXIMIKS:


と、七面鳥の論理をなぞっていますね ))

20機能で飽きないのか?

そこにあるすべての関数は、一目で理解できる結果を返します。一目でわかるようにボケない。それは火を見るより明らかです。それに、彼に何が必要なんだ?彼はコードではなく、ストーリーを見る必要があるのです。
 
VOLDEMAR:

誰がそんなことするんだ?

なぜわざわざ{ }をたくさんつけて、処理を遅くするのか...。

というのも一つの方法です。

訂正ありがとうございます。

私はこの愚かな習慣を持っています。

条件文を書くときに

を使うと、すぐに括弧を つけることができます。