Mt4 サポート終了。 - ページ 25

 
Artyom Trishkin:

と聞かれるような関数を書けばいいだけです。"M5には新しいバーが ありますか?"と尋ねると、YES/NOの答えが返ってきます。

例えば、こんな感じです。

ここにあなたの関数IsNewBar()があります。私たちは、タスクをさらに拡張して、それをさらにひねったり回転させたりします。


OOPの有用性を示すには、あまり良い例ではないような気がします。
例えば、1つの機能だけを使ったバリエーションを紹介します。

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
void OnTick()
  {
   IsNewBar(0,false); // режим сбора информации
   if(IsNewBar()) Print("Пришел новый бар текущего ТФ");  // режим считывания информации
   if(IsNewBar(PERIOD_H4)) Print("Пришел новый бар H4");  // режим считывания информации
   if(IsNewBar(PERIOD_D1)) Print("Пришел новый бар D1");  // режим считывания информации
   
  }
bool IsNewBar(ENUM_TIMEFRAMES tf=PERIOD_CURRENT,bool out=true)
  {
   static const ENUM_TIMEFRAMES TF[22]=
     {
      PERIOD_CURRENT,PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M20,PERIOD_M30,
      PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1
     };
   static bool newbar[22];
   static bool FirstTime=true;
   static int acb[22]; // array of current bars
   if(FirstTime)
     {
      for(int i=0;i<22;i++) acb[i]=Bars(Symbol(),TF[i]);
      FirstTime=false;
      return(false);
     }
   int curtf=0;
   while(TF[curtf]!=tf) curtf++;
   if(out) return (newbar[curtf]);
   for(int i=0;i<22;i++)
     {
      int CurBars=Bars(Symbol(),TF[i]);
      if(acb[i]<CurBars)
        {
         acb[i]=CurBars;
         newbar[i]=true;
        }
      else newbar[i]=false;
     }
   return(false);
  }

もちろん、OnTickから 削除してOnTimerに 挿入することも可能です。

 
Реter Konow:

この質問についてですが、私は間違っていると思います。サービスデスクにご確認ください。引用符の到着に関係なく、プラットフォームに新しいバーが 形成されているかどうか、という質問に答えさせます。いいえ」の場合は、新しいバーのイベントで、そのバーに引用があったかどうかを確認します。もしそうなら、新しいバーが形成されたことになる。こうすればいいんです。あまり変える必要はありません。

ああ、ママ・ミーア...。もう情報だけ読んでください。それを知らないとはとても驚きで、その話をされると、こちらも疑心暗鬼になってしまいます。そんな子供じみた質問には、サービスデスクの方にも目を向けません。笑われてしまいますよ。あなたのプロフィールにservicedeskへのリンクがあります。
 
Nikolai Semko:

OOPの有用性を示すには、あまり良い例ではないような気がします。
例えば、1つの機能だけを使ったバリエーションを紹介します。

もちろん、OnTickから 削除してOnTimerに 挿入することも可能です。

ロジックは見ていないのですが、まあ仮に正しく動作するとしましょう。

また、任意のキャラクターによって?

プログラムはMarket Overviewウィンドウからシンボルのリストを使用し、ユーザーはいつでもシンボルセットを変更できると想像してください。

 
個人的には@Nikolai Semkoの OOPコードを見ませんでした。


謹んで申し上げます。

 

Artyomは少し質問が遅れていますが、質問はこうです:正しく動作するように手続き型で書いてください。

void OnTick()
 {
 
  if(IsNewBar("AUDCAD",PERIOD_H1)) {
   // задача №1
  }
 
  if(IsNewBar("GBPJPY",PERIOD_M15)) {
   // задача №2
  }
 
  if(IsNewBar("EURUSD",PERIOD_H4)) {
   // задача №3
  }

 }

// Функция "Новый бар"
bool IsNewBar(....) {
 здесь код, который нужно написать
}
 
Реter Konow:

はいタイマーで。引用符のない新しいバーが表示されます。我々は、Optisk()で引用符を固定することができる一方で、バーが出現 するイベントに正確に興味を持っています。

いずれにせよバーが表示されます。


ここでは 、バーについて解説しています。

Time[i] バーのオープン時間は通常、ティック到着時間と一致しません。どの時間枠のバーの開始時刻も、常に時間枠の倍数です。時間枠内に発生した最初のティックはバーが形成されるもの で、時間枠内にティックが到着しない場合は、時間枠内にバーは形成されません。

 
Vitaly Muzichenko:

Artyomはその質問をあまり取り上げませんでしたが、問題はこうです:手続き型で書いて、正しく動作するようにすること

早く、便利に、簡単に、シンプルに実行できるように、徐々にタスクを追加していきたいと思いました。後でOOPを使って簡単にできることを示すため。

しかし、OOPを否定した張本人自身が、問題の解決に背を向けてしまったのです :)

 
Artyom Trishkin:

早く、便利に、簡単に、シンプルに実行できるように、徐々にタスクを追加していきたいと思いました。その時、OOPでいかに簡単にできるかを示すこと。

しかし、OOPの主な拒絶者自身が、課題の解決策を拒絶している :)

そうですね......自分ではあまり述べていなかったので、言い換えますね。

アルテムは少し質問を開けなかったし、質問はこれである:それが 正しく 働くことプロシージャルの様式で書くため

多分、彼は戻って来て、非常に簡単でシンプルであることを証明するでしょう。

 
Vitaly Muzichenko:

自分ではうまく言えなかったので、言い直します。

Artyomはその質問をあまり取り上げませんでしたが、その質問とは、手続き型で書いて、正しく 動作する ようにすることです。

もしかしたら、彼は戻ってきて、それがとても簡単でシンプルであることを証明してくれるかもしれません。

最終的には彼のプロシージャルスタイルのコードを、このようなループで動作させるという目標がありました。

   ENUM_TIMEFRAMES array_timeframes[]=
      {
      PERIOD_M1,PERIOD_M2,PERIOD_M3,PERIOD_M4,PERIOD_M5,PERIOD_M6,PERIOD_M10,PERIOD_M12,PERIOD_M15,PERIOD_M30,
      PERIOD_H1,PERIOD_H2,PERIOD_H3,PERIOD_H4,PERIOD_H6,PERIOD_H8,PERIOD_H12,PERIOD_D1,PERIOD_W1,PERIOD_MN1
      };
   int total=SymbolsTotal(true), total_tf=ArraySize(array_timeframes);
   for(int i=0; i<total; i++){
      string symbol_name=SymbolName(i,true);
      for(int j=0; j<total_tf; j++){
         if(IsNewBar(symbol_name,array_timeframes[j])){
            Print("Новый бар на ",symbol_name," ",EnumToString(array_timeframes[j]));
            }
         }
      }
 
Artyom Trishkin:

最終的には、彼の手続き型のコードがそのようなループの中で動くようになるという目標がありました。

シンボルループ、引用符が到着したときに新しいバーが 開くかどうかのチェックなど、私のソリューションに簡単に追加することができました。それとOOPはどう関係があるのですか?

あなたは間違った例を選んでいます。他のことを自由に考えてください。