私のアプローチコアはエンジンです。 - ページ 166 1...159160161162163164165166167168169170171172173...184 新しいコメント Реter Konow 2019.01.31 19:22 #1651 Nikolai Semko: ピーター、証拠はどこにあるんだ?ex5の1スレッド(ex4で実験する意味もない)と2スレッドで1プログラムの実行速度を比較した研究報告書はどこにあるのでしょうか?それはあくまで仮説に過ぎず、ところで私は、あなたからあなたのアプローチの利点について少なくとも一つの定式化を受けなかったときに、初めて(ここで)述べたのです。あなたはすでに、私の仮説を事実として使っているのです。個人的には、利点があることは認めますが、純粋に直感的に(知識ではなく)、2つのプログラム間の相互作用とデータ交換が自由でないことと、プロセッサが両方のex5に対して1つであることから、何の利点もないことに75%賭けます。しかし、その答えは、開発者自身か、定性的な実験によってしか与えられない。プログラム間のデータ交換が低コストであることの証明は、私が提供できます。数千文字の文字列を渡す場合も。実験をしてみました。テストEAを2つ探してアップロードしてみます。リソースを介した通信はプロセッサに負荷をかけず、再描画のみを行います。 エンジンには様々な機能が蓄積され、ユーザーのGUIというごく一部だけが存在することになります。つまり、エンジンには、別のアプリケーションで部分的にしか必要とされないコードが含まれ、残りのコードは他のグラフィックス上の他のアプリケーションで使用することができる。このように、エンジンは異なるEAが同時に使用する補助的な機能となるため、独自のスレッドで動作する別プログラムとする必要があります。 Реter Konow 2019.01.31 19:29 #1652 これです。最初のグラフに 載せる。 //+------------------------------------------------------------------+ //| TEST_2.mq4 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ union Char_Uint{uchar Char[32000]; uint Uint[8000];}; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { EventSetMillisecondTimer(16); //---------------------------------------------- if(!ObjectCreate(0,"Resource",OBJ_BITMAP_LABEL,0,0,0))Print("Object is not created! ",GetLastError()); else Print("Object created!"); //------------------------------- if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"::Resource"))Print("BMPFILE is not created!"); else Print("BMPFILE created!"); //---------------------------------------------- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { Char_Uint u; string String = NULL; int q = MathRand(),w = 0; if(q > 10000)q = 10000; //------------------------------------------------------- //Формируем случайную строку. //------------------------------------------------------- for(int a1 = 0; a1 < q; a1++) { String += (string)a1 + "^"; w++; if(w == 10) { String += "$"; w = 0; } } //------------------------------------------------------- //Получаем размер собранной строки. //------------------------------------------------------- int StrSize = StringLen(String); //------------------------------------------------------- //Копируем строку в массив Char[]. //------------------------------------------------------- StringToCharArray(String,u.Char); //------------------------------------------------------- //Cохраняем строку переведенную в байты в ресурсе. //------------------------------------------------------- if(!ResourceCreate("::Resource",u.Uint,8000,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA))Print("Resource is not created!"); //------------------------------------------------------- } //+------------------------------------------------------------------+ Реter Konow 2019.01.31 19:30 #1653 そして、こちらは2枚目になります。 //+------------------------------------------------------------------+ //| Resource reader.mq4 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ union Char_Uint { uchar Char[32000]; uint Uint[8000]; }; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping EventSetMillisecondTimer(16); if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"\\Experts\\TEST_2.ex4::Resource"))Print("Resource is not connected!"); else Print("Resource connected!"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- Char_Uint u; uint width,height; string msg[],pars[]; //----------------------------- if(!ResourceReadImage("\\Experts\\TEST_2.ex4::Resource",u.Uint,width,height))Print("Failed to read resource! ",GetLastError()); //----------------------------- string String = CharArrayToString(u.Char); //----------------------------- ushort Msep = StringGetCharacter("^",0); int s = StringSplit(String,Msep,msg); for(int a1 = 0; a1 < s; a1++) { ushort Psep = StringGetCharacter("$",0); StringSplit(msg[a1],Psep,pars); } //----------------------------- Alert(" String ",String); //----------------------------- //------------------------------------------------------------------------------------------------------- ArrayInitialize(u.Char,0); ResourceCreate("\\Indicators\\DRIVE.ex4::EA_2_DRIVE",u.Uint,8000,1,0,0,0,COLOR_FORMAT_ARGB_RAW); //------------------------------------------------------------------------------------------------------- } //+------------------------------------------------------------------+ Nikolai Semko 2019.01.31 19:30 #1654 Реter Konow:プログラム間のデータ交換が低コストでできることを証明できる。数千文字の文字列を転送する場合にも。ある実験をしたんです。テストEAを2つ探してアップロードしてみます。リソースを介した通信はプロセッサに負荷をかけず、再描画のみを行います。 エンジンには様々な機能が蓄積され、ユーザーのGUIというごく一部だけが存在することになります。つまり、エンジンには、別のアプリケーションで部分的にしか必要とされないコードが含まれ、残りのコードは他のグラフィックス上の他のアプリケーションで使用することができる。このように、エンジンは異なるEAが同時に使用する補助的な機能センターとなるため、別プログラムとする必要がある。 しかし、1つのエンジンが複数のプログラムに対応する場合、エンジン内で異なるプログラムの処理が順次行われ、各アプリケーションでエンジンクラスのインスタンスが並行して実行されるため、全体の処理速度が低下することになります。 Реter Konow 2019.01.31 19:30 #1655 2つ目のEAにはAlertがあります。開いている間は、プロセッサに負荷がかかります。コメントアウトすると、すぐに負荷がなくなります。 Реter Konow 2019.01.31 19:35 #1656 Nikolai Semko: しかし、エンジンが複数のアプリケーションに対応する場合、各アプリケーションでエンジンクラスのインスタンスが並列に実行される一方で、異なるプログラムに順次対応するため、全体の処理速度が低下します。プログラムは非同期に、必要に応じてエンジンにアクセスします。1つは渡された配列に基づいてグラフを作成するよう要求し、もう1つは数式を使って値を計算するよう要求し、3つ目は何か別のことを要求する...。これらはすべて、一度に連続したプロセスではなく、随時発生するものです。 この場合、エンジンはあるアプリケーションのGUIを搭載し、ユーザーは別のアプリケーションのGUIに切り替わることになります。 Реter Konow 2019.01.31 19:39 #1657 アプリケーションにエンジンを搭載すると、余計なものがたくさん入ってしまいます。そのため、個々のEAに合わせたエンジンのカスタマイズが必要です。ユーザーも対応できないでしょう。長くて複雑です。そして、エンジンの汎用性を高めることができなくなる。 Nikolai Semko 2019.01.31 19:47 #1658 Реter Konow: アプリケーションにエンジンを搭載すると、余計なものがたくさん入ってしまいます。そのため、個々のEAに合わせたエンジンのカスタマイズが必要です。ユーザーも対応できないでしょう。長くて複雑です。そして、エンジンの普遍性を高めるための開発の邪魔をすることになるのです。 何の意味もない言葉の羅列に過ぎないのです。 Реter Konow 2019.01.31 19:50 #1659 Nikolai Semko: ただ、意味のない言葉を並べただけ。ただ、私の言葉を信じてください。自分が何をやっているのか、わかっている。 Nikolai Semko 2019.01.31 19:51 #1660 Реter Konow:ただ、私の言葉を信じてください。自分が何をやっているのか、わかっている。 いいえ、そんなことはありません。しないんですね。 1...159160161162163164165166167168169170171172173...184 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ピーター、証拠はどこにあるんだ?
プログラム間のデータ交換が低コストであることの証明は、私が提供できます。数千文字の文字列を渡す場合も。実験をしてみました。テストEAを2つ探してアップロードしてみます。リソースを介した通信はプロセッサに負荷をかけず、再描画のみを行います。
エンジンには様々な機能が蓄積され、ユーザーのGUIというごく一部だけが存在することになります。つまり、エンジンには、別のアプリケーションで部分的にしか必要とされないコードが含まれ、残りのコードは他のグラフィックス上の他のアプリケーションで使用することができる。このように、エンジンは異なるEAが同時に使用する補助的な機能となるため、独自のスレッドで動作する別プログラムとする必要があります。
これです。最初のグラフに 載せる。
そして、こちらは2枚目になります。
プログラム間のデータ交換が低コストでできることを証明できる。数千文字の文字列を転送する場合にも。ある実験をしたんです。テストEAを2つ探してアップロードしてみます。リソースを介した通信はプロセッサに負荷をかけず、再描画のみを行います。
エンジンには様々な機能が蓄積され、ユーザーのGUIというごく一部だけが存在することになります。つまり、エンジンには、別のアプリケーションで部分的にしか必要とされないコードが含まれ、残りのコードは他のグラフィックス上の他のアプリケーションで使用することができる。このように、エンジンは異なるEAが同時に使用する補助的な機能センターとなるため、別プログラムとする必要がある。
しかし、エンジンが複数のアプリケーションに対応する場合、各アプリケーションでエンジンクラスのインスタンスが並列に実行される一方で、異なるプログラムに順次対応するため、全体の処理速度が低下します。
プログラムは非同期に、必要に応じてエンジンにアクセスします。1つは渡された配列に基づいてグラフを作成するよう要求し、もう1つは数式を使って値を計算するよう要求し、3つ目は何か別のことを要求する...。これらはすべて、一度に連続したプロセスではなく、随時発生するものです。
この場合、エンジンはあるアプリケーションのGUIを搭載し、ユーザーは別のアプリケーションのGUIに切り替わることになります。
アプリケーションにエンジンを搭載すると、余計なものがたくさん入ってしまいます。そのため、個々のEAに合わせたエンジンのカスタマイズが必要です。ユーザーも対応できないでしょう。長くて複雑です。そして、エンジンの普遍性を高めるための開発の邪魔をすることになるのです。
ただ、意味のない言葉を並べただけ。
ただ、私の言葉を信じてください。自分が何をやっているのか、わかっている。
ただ、私の言葉を信じてください。自分が何をやっているのか、わかっている。