MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1693

 
Taras Slobodyanik #:

IsTestingの代わりにIsVisualModeを使用するのがよいでしょう。

IsVisualModeなし、IsTestingなしでも可能です。

質問は他のことだった

 

magic=rand() について

地元の居酒屋が「Yobtv」と叫ばないのが不思議なくらい...。

ここでプログラミングを勉強しているのだから、fackupにどれくらい時間がかかるか調べてみてください。現実的な条件下で、魔法の複製を手に入れるチャンスはどのくらいあるのだろうか? そして、そのようなレーキを踏む価値はあるのだろうか?

 
Valeriy Yastremskiy #:

これも可能です。マッチングする可能性は低い。

一致するかどうかのチェックも別途あるので、OKドックです。

 
Maxim Kuznetsov #:

magic=rand() について

地元の居酒屋が「Yobtv」と叫ばなかったのが不思議なくらい...。

ここでプログラミングを勉強しているのだから、fackupにどれくらい時間がかかるか調べてみてください。現実的な条件下で、魔法の複製を手に入れるチャンスはどのくらいあるのだろうか? そして、そのような熊手を踏む価値はあるのだろうか?

参考文献より
"GetTickCount()
OS起動時からインクリメントしており、49日間は繰り返さないので、繰り返さないシーケンスを得るには、MathSrand(GetTickCount) を使用します。"

 
MakarFX #:
ああ、うまくいった、ありがとう...

した

if (IsTesting()) 
     {
      if(ObjectGetInteger(0,"button1",OBJPROP_STATE)==true)
        {
          ...
          ObjectSetInteger(0,"button1",OBJPROP_STATE,false);
        }
     }
 
Maxim Kuznetsov #:

現地の専門家が「Yobtv」と大合唱しなかったのは不思議だ......。

説得もせず、議論もせず、学ばせる...自分で解決させる

 
Maxim Kuznetsov #:

magic=rand() について

地元では「ヨブテッブ」と大合唱にならなかったのが不思議なくらいです。

///

ダック、何回目?

 
Nerd Trader #:
ああ、うまくいった、ありがとう...あぁ、今、このボタンだけで、1ティックごとに150の注文を止めずに開けている...。した



これを行う

if (IsTesting()) 
     {
      if(ObjectGetInteger(0,"button1",OBJPROP_STATE)==true)
        {
          ObjectSetInteger(0,"button1",OBJPROP_STATE,false);
          ...
        }
     }
 

スクリプトはこのスレッドからです。

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
enum EResult {Ok,AllocError};

template<typename T>
EResult GetRepeat(const T &arr[],T &ret[],uint count)
  {
   int size=ArraySize(arr);   // Присваиваем переменной количество элементов массива arr
   if(ArrayResize(ret,size)!=size)
      return AllocError;// Устанавливаем новый размер массиву ret, равный size
   int ii=0;
   for(int i=0; i<size;)
     {
      T tmp=arr[i];        // переменная перегруженной функции с значениями массива arr
      uint repeatCount=1;  // будем считать одинаковые подряд значения массива arr
      while(++i<size&&arr[i]==tmp) // если следующее значение то же
         ++repeatCount;              // плюсуем repeatCount
      if(repeatCount>=count)
         ret[ii++]=tmp;
     }
   return ArrayResize(ret,ii)==ii?Ok:AllocError;// новый размер массива ret
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   int si=0;
   int arr[]= {1,2,4,4,4,4,4,4,7,55,55,7,7,7,7,79,77,66,66,2,2,2,2,2};
   int ret[];
   if(!GetRepeat(arr,ret,cou))
      si=ArraySize(ret);
   for(int i=0; i<si; i++)
      Print(si," ret[i] =",ret[i]);
  }    
//+------------------------------------------------------------------+

このセリフは理解できない。

if(!GetRepeat(arr,ret,cou))

なぜ「!」なのか?なぜ列挙型が 選ばれるのですか?

 

なぜこのようなことをするのかわかりませんが、本来はブーリアン関数なのです。


作者はこんなことを考えたのだろう。

enumの場合、要素は0から始まる:Ok=0, AllocError=1

つまり、GetRepeatは0か1のどちらかを返す。

で、cpの場合は0が偽、1が真です。

それぞれGetRepeatは戻り値の否定です


自分の頭や人の頭を混乱させないというのは、とても簡単なことなんです。

bool GetRepeat(...)
   {
   ...
   return ArrayResize(ret,ii)==ii;
   }