[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 170

 
splxgf:
作者のバージョンにこの2行を追加するだけで、原理的にはかなりスピードアップできるはずです。
本当ですか?
 
MaxZ:
本当ですか?

基本的には、UPPprice/LOWpriceの範囲に入らないキャンドルをチェックと計算から除外するという提案ですが...。は、2行で除外されます。ループから抜け出さないということは、価格が必要な範囲にあるということであり、標準的なチェックを行うのです。INSを扱うロジックは非常に複雑なので、前の反復からこの変数の値を使用することはナンセンスであるため、あなたのコードは、結果の不利益にのみ速く行くかもしれません。

 
splxgf:

基本的には、UPPprice/LOWpriceの範囲に入らないキャンドルをチェックと計算から除外するという提案ですが...。は、2行で除外されます。ループから抜け出さないということは、価格が必要な範囲にあるということであり、標準的なチェックを行うのです。INSを扱うロジックは非常に複雑なので、前の反復からこの変数の値を使用することはナンセンスであるため、あなたのコードは、結果の不利益にのみ速く行くかもしれません。

ということは、確信犯!?:))))


先ほど、コードを引用されましたね。

splxgf:
        if (LOWprice > iHigh(NULL,60,i)) continue;
        if (UPPprice < iLow (NULL,60,i)) continue;

価格がLowより下にある場合、なぜ価格がHighより上にあるかどうかを確認する必要があるのでしょうか?あなたのバージョンでは、この条件は除外されていません。しかし、私の提案では

         if (UPP)
            ... // не выполнится
         if (LOW)
            if (LOWprice < iLow (NULL,60,i))
               continue;
            else
            ..

は除外されます。

私のコードが最適でない可能性があることは否定しません。

しかし、何倍の速さだと思いますか?

         if (UPP)

の方が効くでしょう。

         if (LOWprice > iHigh(NULL,60,i))

?

実際、そうなんです。

UPP = LOWprice > iHigh(NULL, 60, i);

私だけが知っている事実(現在のヒストリカルバーの内側でビッドした場合を除く)、そしてあなたが計算する...。

 
abolk:


そうですね。

3行の明確なコードを、理解しにくいコードに変えてしまうほど、ひねくれなければならないのです。

iLow, iHighのチェックを分割するアイデアがあれば、すぐにでも分割できたはずです。

そして、ワイセツなことはしないでください

また、ねじれた面倒なコードが、時に単純な3行よりも速く走ることがあると考えたことはありませんか?:)))
 
 INS = True;
   
   for (int i=1; i<=6000; i++)
   {
      if (INS)
      {
         if (LOWprice > iHigh(NULL,60,i))
         {
            INS = False;
            UPP = True;
            LOW = False;
            continue;

このコードの部分を考えてみましょう。

INS=True。

ループは行った

飛行に問題がない場合

if (LOWprice...) 例えば、条件はtrueだが、INS=Falseとなり、次の反復に進むため、おかしくなる。

で、(false)なら、もう一本だから、もういいや...。

私のコードに関しては、価格をチェックするのではなく、バーが現在の価格から+300/300pips以内かどうかをチェックし、そうであればそれを考慮する必要があるのです。その他の最適化については、例えば最初の2つのチェックで不要なバーを90%排除できるため、それほど重要ではありません。

 
splxgf:

もしそうなら(false)、もうダメだ、違うバーなんだから、何を...と聞かなければならない。

出航はしていないが、他に出航している{ ...}.
 

と言って、本当に泳いでしまった...。

なぜブール変数は、各条件の後にもう一つ if (LOWprice >iHigh(NULL,60,i)) 、つまり同じ卵でも横からプラス1条件とたくさんの代入があると高速化すると思うのですが...。

 

うわっ!

ここで議論が白熱する。

とりあえずこんな感じにしておきます。

 extern int Distance = 3000;
 int CountH,NewCountH,CountL,NewCountL,CountB,NewCountB;
 
 double ResistH,ResistL,ResistB;
 
//======================================================================
int start(){


   double bid = Bid;
   double UPPprice = bid+Distance*Point;
   double LOWprice = bid-Distance*Point;
      NewCountH=0;
      NewCountL=0;
      NewCountB=0;
      ResistH=0;
      ResistL=0;
      ResistB=0;
  
   while(LOWprice<UPPprice)
    {
      CountH=0;
      CountL=0;
      for(int i=1; i<=6000; i++){  
          if(iHigh(NULL,60,i)>LOWprice) 
          if(LOWprice>iLow(NULL,60,i)) 
          if(LOWprice> bid) CountH++; else CountL++;
       }  
      if(CountH>NewCountH){NewCountH=CountH;ResistH=LOWprice;} 
      if(CountL>NewCountL){NewCountL=CountL;ResistL=LOWprice;}   
      LOWprice=LOWprice+25*Point;
    }
      CountB=0;
      for(i=1; i<=6000; i++){  
          if(iHigh(NULL,60,i)>=bid) if(bid>=iLow(NULL,60,i)) CountB++;
       }
      if(CountB>NewCountB){NewCountB=CountB;ResistB=bid;}  
 
     
   
    Comment("\n", 
      "\n",     
//      "\n", "     Spread                                ", MarketInfo(Symbol(), MODE_SPREAD),  
      "\n", "     Distance                             ", Distance, 
      "\n", "     CountH                               ", NewCountH, 
      "\n", "     CountB                               ", NewCountB, 
      "\n", "     CountL                                ", NewCountL, 
      "\n", "-------------------------------------------------- ",     
      "\n");
      

    if(ObjectFind("RH") == -1) {
      ObjectCreate("RH", OBJ_HLINE, 0, 0, ResistH);
      ObjectSet("RH", OBJPROP_COLOR, Magenta);
      ObjectSet("RH", OBJPROP_STYLE, STYLE_DOT);
     }else ObjectMove("RH", 0, iTime(NULL,0,0), ResistH);

    string text=DoubleToStr(NewCountH,0);
    ObjectDelete("RHtxt"); 
     if(ObjectFind("RHtxt") == -1) {
       ObjectCreate("RHtxt", OBJ_TEXT, 0, 0, 0);
       ObjectSetText("RHtxt", text , 8, "Arial", Aqua);
       ObjectMove("RHtxt", 0, iTime(NULL,0,0), ResistH);
      }else ObjectMove("RHtxt", 0, iTime(NULL,0,0), ResistH);
      
    string text3=DoubleToStr(NewCountB,0);
    ObjectDelete("RBtxt"); 
     if(ObjectFind("RBtxt") == -1) {
       ObjectCreate("RBtxt", OBJ_TEXT, 0, 0, 0);
       ObjectSetText("RBtxt", text3 , 8, "Arial", Aqua);
       ObjectMove("RBtxt", 0, iTime(NULL,60,0), ResistB);
      }else ObjectMove("RBtxt", 0, iTime(NULL,60,0), ResistB);

    if(ObjectFind("RL") == -1) {
      ObjectCreate("RL", OBJ_HLINE, 0, 0, ResistL);
      ObjectSet("RL", OBJPROP_COLOR, Magenta);
      ObjectSet("RL", OBJPROP_STYLE, STYLE_DOT);
     }else ObjectMove("RL", 0, iTime(NULL,0,0), ResistL);
     
    string text2=DoubleToStr(NewCountL,0);
    ObjectDelete("RLtxt");
    if(ObjectFind("RLtxt") == -1) {
      ObjectCreate("RLtxt", OBJ_TEXT, 0, 0, 0);
      ObjectSetText("RLtxt", text2 , 8, "Arial", Aqua);
      ObjectMove("RLtxt", 0, iTime(NULL,0,0), ResistL);
     }else ObjectMove("RLtxt", 0, iTime(NULL,0,0), ResistL);

 return (0);}            //====== THE END ======================

値動きを見ていると、とても面白いです。常に最も抵抗の少ない方向に進みます。

将来の動きを予測することもできます。観察する。

価格は水の流れのようなものです。

皆さん、ありがとうございました。

 

highの値が最も大きいバー番号の求め方を教えてください。


Search_High=MathMax( High[i],High[1])

 
001:

チャイ値の最も高いバーの番号の求め方を教えてください。


Search_High=MathMax( High[i],High[1])

https://docs.mql4.com/ru/array/ArrayMaximum にアクセスすることができます。

を通して、アレイのHigh.