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

 

splxgf:

DhP です。

このサイクルを「軽くする」ためにはどうしたらいいのでしょうか?数えるのにとても時間がかかる。
 if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i)) if(LOWprice> bid) CountH++ else CountL++;

いっそのこと、こんな風に。

 if(iHigh(NULL,60,i)>LOWprice) if(LOWprice>iLow(NULL,60,i)) if(LOWprice> bid) CountH++ else CountL++;

また、HighとLowの値の配列を生成するアイデアもある。これで少しはスピードアップするかも?

 
abolk:


オーダーが選択されるhttps://docs.mql4.com/ru/trading/OrderSelect- ルーピングまたはチケットによる選択

とすると、Order*()関数は、関連するオーダーパラメータを検索します。

ぶしつけな質問で申し訳ないのですが。

OrderSelect 関数で MODE_HISTORY を選択用のデータソースとして使用する場合、つまり、クローズした注文と削除した注文の中から選択する場合、最後にクローズした注文の番号はどのようにして求めますか。これらの注文は、プログラム上ではどのように番号付けされているのでしょうか?最後から一番目なのか、その逆なのか?

 
Xaoss1990:

もちろん、くだらない質問で申し訳ないのですが。

OrderSelect 関数の データソースが MODE_HISTORY の場合、つまり、クローズした注文と削除した注文の中から選択する場合、最後にクローズした注文の番号を調べるにはどうしたらよいでしょうか。これらの注文は、プログラム上ではどのように番号付けされているのでしょうか?最後から一番目なのか、その逆なのか?


ネットにはこんな質問がよくある

http://forum.alpari.ru/showthread.php?t=27708

 
Xaoss1990:

馬鹿な質問で申し訳ないのですが

OrderSelect 関数で MODE_HISTORY を選択用のデータソースとして使用した場合、つまり、クローズした注文や削除された注文の中から注文を選択した場合、最後にクローズした注文の番号を調べるにはどうすればよいですか。これらの注文は、プログラム上ではどのように番号付けされているのでしょうか?最後から一番目なのか、その逆なのか?


閉じたものの最後を見つけるための関数は,閉じた時間が最大のオーダーを見つけるための関数と同様である
 
LazarevDenis:


これらの質問の多くは、すでにインターネット上で質問されています。

http://forum.alpari.ru/showthread.php?t=27708

О!見つけました、ありがとうございます。

OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);

そうなんですよね!?

 
DhP:

このサイクルを「緩和」するにはどうしたらいいのか。計算にとても時間がかかります。

スペルバウンド

   INS = True;
   
   for (int i=1; i<=6000; i++)
   {
      if (INS)
      {
         if (LOWprice > iHigh(NULL,60,i))
         {
            INS = False;
            UPP = True;
            LOW = False;
            continue;
         }
         if (LOWprice < iLow (NULL,60,i))
         {
            INS = False;
            UPP = False;
            LOW = True;
            continue;
         }
      }
      else
      {
         if (UPP)
            if (LOWprice > iHigh(NULL,60,i))
               continue;
            else
            if (LOWprice < iLow (NULL,60,i))
            {
               // INS = "False"
               UPP = False;
               LOW = True;
               continue;
            }
         if (LOW)
            if (LOWprice < iLow (NULL,60,i))
               continue;
            else
            if (LOWprice > iHigh(NULL,60,i))
            {
               // INS = "False"
               UPP = True;
               LOW = False;
               continue;
            }
         
         INS = True;
      }
      
      if (LOWprice > Bid)
         CountH++;
      else
         CountL++;
   }

価格はヒストリカルバーの内側よりも外側にあることが多いというロジックです。

INS=インサイド。

リーフレットでコードの正確さを確認しました。コード速度の確認はしていない。しかし、ブーリアン変数が良いアドバンテージを与えてくれることは確かです。

 
MaxZ:

スペルバウンド

価格はヒストリカルバーの内側よりも外側にあることが多いというロジックです。

INS=「中」。

追伸:コードの正しさを紙に書いて確認しました。コード速度の確認はしていない。でも、ブーリアン変数が良いアドバンテージになるのは確かです。


そうですね。

3行の明確なコードを理解しにくいコードに変えるなんて、よほどひねくれているのでしょう。

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

          if(LOWprice> bid)if(iHigh(NULL,60,i)>LOWprice)if( LOWprice>iLow(NULL,60,i))CountH++;  
          if(LOWprice<=bid)if(iHigh(NULL,60,i)>LOWprice)if( LOWprice>iLow(NULL,60,i))CountL++;
そして、何もいじってはいけない
 
      int HourPrices[20000];     
      for(int i=1; i<=6000; i++)
	 for (double cPrice=iLow(NULL,60,i);cprice<=iHigh(NULL,60,i);cPrice+=Point)
	  HourPrices[cPrice/Point]+=1;

このような配列から抵抗値を見つけるのは問題ない。新しいバーの 追加と古いバーの削除を同時に行うことができます。そして、そこから情報を取り出すのは、1つの条件で2サイクル、もしくはArrayMaximumが一度に必要な値を出すことになる。

 
abolk:


そうですね。

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

iLow、iHighのチェックを分けるという発想があれば、すぐにでも分けられたはずです。

で、何もいじらないこと

上で提案したものと似たようなバリエーション(ifの区切り)。

そして、あなたは私の考えを理解しようともしなかった(論理を簡単に説明したが)...。価格が高いときは、2回ではなく1回でチェックを行います。価格が安い場合も同様です。そして、価格がヒストリカルバーの範囲内にあるとき(これはかなりまれなことですが、これがロジックでありアイデアです!)、2つのチェックを行います(これ以外に方法はありません)。

チェックは店内ではなく、バーの外での価格です。さっき、彼らは干し草の中の針を探したが、私は、他の針が見えなければ、それも探さない......」。針は必要なときに姿を現す!:)))

 
MaxZ:

上で提案したのと似たような変形(ifが別々)。

そして、あなたは私の考えを理解しようともしなかった(論理を簡単に説明したが)...。価格が高いときは、2回のチェックではなく、1回のチェックにします。価格が安い場合も同様です。そして、価格がヒストリカルバーの範囲内にあるとき(これはかなりまれなことですが、これがロジックでありアイデアです!)、2つのチェックを行います(これ以外に方法はありません)。

         if (LOWprice > iHigh(NULL,60,i)) continue;
        if (UPPprice < iLow (NULL,60,i)) continue;
あなたのバージョンは、著者のバージョンにこの2行を追加するだけで済みますし、いくつかの条件を修正すれば、原理的にかなり速くなるはずです。