エラー、バグ、質問 - ページ 1439

 
George Merts:

私の経験では、もしプログラマーがインデックス20で10個のアイテムを含む配列に何かを書き込んだとしたら、それはプログラマーが間違いを犯したことを意味し、プログラムは配列のサイズを大きくして疑わしい行為を隠すのではなく、エラーを発生させるべきでしょう。

サイズを調整する配列」ばかりでは、利便性よりも潜在的なエラーを隠すという意味でずっと厄介です。さらに、配列のサイズを把握する必要がないことも、修正困難なバグにつながる危険な行為である可能性があります。

その言語を使って仕事をしたことがないのは、私のせいでしょうか?追加するインデックスを指定する必要は全くありません。自動的にインデックスが割り当てられ、配列のサイズも大きくなります。プログラマーは、この操作中にインデックスを間違える可能性がないだけです。

同様の動作をクラスで実装し、関連する関数pop、shift、unshiftなどを追加することができます。そして、コードからコードへクラスのワゴンをドラッグし、各コードはそこから%10...20の関数を使用します。これは良い解決策になりそうですか?私が考える正しい解決策の一例は、ObjectsDeleteAll関数に 接頭辞で削除する機能を追加することです。これはより高度なプログラミングに向けたもう一つのミクロンであり、ほとんどのコーダーはごみ箱に飛んでいくので自作の関数です。残念ながら、アレイではほとんど見られませんが...。

 

И таскать телегу классов из кода в код, при том что в каждом коде из неё используются %10..20 функций.

インクルードmqhファイルというのをご存知ないのでしょうか?
 

スマートアレイ」クラスを書く必要はありません。MetaQuotes標準ライブラリ にすでにあります。

 
こんにちは。私はMT5を使用して、ブローカー「Otkritie」経由で先物を操作しようとしています。
SymbolInfoTick関数に アクセスしたところ、MqlTick構造体の最後の2つのパラメータが
- time_msc, flag が欠落している。この問題を解決することは可能なのでしょうか?例えば、このホームページのMT5を例にとります。
ブローカーのサーバーに接続してみてください。あるいは、別の方法で必要な情報を得ることが可能です。
売り手と買い手、どちらが取引を始めたのでしょうか?
 
Alexander Puzanov:

問題の言語を扱ったことがないのは私だけでしょうか?追加された要素にインデックスを指定する必要は全くなく、自動的に割り当てられ、配列のサイズも大きくなります。プログラマーは、この操作の間、インデックスでミスをする機会がないだけです

あーあ...プログラマーがミスをする可能性は?どんな複雑なプログラムでも、すべてのバリエーションを考慮できると思うのは間違いです。

それらの「デフォルトアクション」はすべて、複雑なオブジェクトのプロパティでなければなりません。変数、配列、単純な構造体などの単純なオブジェクトは、できるだけ「デフォルト」プロパティを持たないようにしなければなりません。

例えば、作成時には、0ではなく、未定義の値を格納しなければならない。

同様の動作をクラスで実装し、関連する関数pop、shift、unshiftなどを追加することができます。そして、コードからコードへクラスのワゴンをドラッグし、各コードはそこから%10...20の関数を使用します。これは正しい解決策だと思いますか?

論理的には正しい解答なのです。このようなクラスで作業する場合、その動作は透過的です。

また、「カートロードのクラスをドラッグする」というのはどうでしょう。コーディングするときはドラッグせず、ライブラリにプラグインするだけです。また、コンパイルの際、通常のリンカーはライブラリのすべてのメソッドを実行ファイルに入れるのではなく、使用するメソッドのみを実行ファイルに入れるはずです。

私が考える正しい解決策の例 -ObjectsDeleteAll関数に 接頭辞による削除を追加する - これはより高度なプログラミングに向けたもう一つのミクロンです - そしてほとんどのコーダーはこの自作関数をゴミ箱に捨ててしまいました。残念ながら、アレイではこのようなことは起こりそうにありません...。

同じ理由で、これも間違ったアプローチだと私は思っています。この機能には、その機能らしくないタスクが搭載されており、そのアプリケーションのロジックに従わないのです。

正しい解決策は、グラフ上にクラス・オブジェクト・マネージャーを用意して、そのリストを保持し、関数が呼ばれるたびに必要なものを削除することだと思われます。名称の接頭辞は、対象物に関する何らかの情報を人に明らかにするためにのみ機能するものであるべきだと思う。また、削除は、オブジェクトの名前に基づくのではなく、その名前を配列に保存しておく必要があります。

 
Demal:
こんにちは。私はMT5を使用して、ブローカー「Otkritie」経由で先物を操作しようとしています。
SymbolInfoTick関数に アクセスしたところ、MqlTick構造体の最後の2つのパラメータが
- time_msc, flag が欠落している。この問題を解決することは可能なのでしょうか?例えば、このホームページのMT5を例にとります。
ブローカーのサーバーに接続してみてください。あるいは、別の方法で必要な情報を得ることが可能です。
売り手と買い手、どちらが取引を始めたのでしょうか?
  1. 今お使いの端末のビルドは?
  2. デモサーバーと実サーバーのどちらに接続していますか?
 
バージョン 5.0 ビルド 1150, デモ
 
Demal:
バージョン 5.0 ビルド 1150, デモ

端末を更新してください(MetaQuotes-Demoのサーバーに接続する必要があります)。現在のビルド。

Terminal        MetaTrader 5 build 1210 started (MetaQuotes Software Corp.)

これがその台本です。

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                              Copyright © 2015, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2015, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlTick last_tick;
//--- 
   if(SymbolInfoTick(Symbol(),last_tick))
     {
      Print("time = ",last_tick.time,"; bid = ",last_tick.bid,
            "; ask = ",last_tick.ask,"; volume = ",last_tick.volume,
            "; time_msc = ",last_tick.time_msc,"; flag = ",last_tick.flags);
     }
   else Print("SymbolInfoTick() failed, error = ",GetLastError());
  }
//+------------------------------------------------------------------+

このような結果を得ることができます。

Test (RTS-12.15,H1)     time = 2015.11.26 09:42:57; bid = 88360.0; ask = 88400.0; volume = 2; time_msc = 1448530977000; flag = 0

ファイル:
Test.mq5  2 kb
 
Karputov Vladimir:

端末を更新してください(MetaQuotes-Demoのサーバーに接続する必要があります)。現在のビルド。

これがその台本です。

このような結果を得ることができます。

ありがとうございます。なぜ、何も変わっていないかのようにフラグの値が0になっているのかわかりますか?
 
Demal:
ありがとうございます。なぜフラグの値が0なのか、まるで何も変わっていないかのようです
CopyTicksを 使えば、きっと幸せになれます。そして、SymbolInfoTickは おそらく新しいティック構造を扱う方法をまだ知らないのです。
ファイル:
CopyTicks.mq5  4 kb