こんにちは、
お疲れさまでした
ちょっとしたお願いがあります。(主に自分の知識を増やすために)正直に記事に目を通しましたが、記事のサイクルの長さと他のプロジェクトに対応する必要性から、変更を理解するために過去の記事をさかのぼって見直さなければなりません。このプロジェクトは成長しているので、可能であれば、将来の記事で、現在のライブラリーの構造を説明してほしい。
よろしくお願いします。
かなりシンプルな構造を説明する方法を考えてみます。非常にシンプルで、同時にライブラリーの異なるクラス間に多くのリンクがあります。
作成されたものはすべてCEngineに蓄積され、現時点ではこのオブジェクトからライブラリの全クラスにアクセスできます(さらに別のアクセスポイントとして、ユーザー関数のクラスにもアクセスできるようになる予定ですが、すでに完成しています)。しかし、現時点では、作成されたすべてのクラスのメソッドのうち、その時点で必要なものにしかアクセスできません。
あるクラスのデータを別のクラスで使えるようにするために、クラス自身はお互いにポインターを使う。このような関係をすべて見せ始めると、さらに混乱することになる。また、多くのクラスやクラス内のリストに継承されているベースオブジェクトをすべて表示し、それらがタイマーのどこで動作しているのかも表示するとなると、混乱が生じるだろう。
だから、単純に1つのクラスの構造を示し、他のクラスはすべてこの構造と同じにする方がずっと簡単なのだ。そして、これはとてもシンプルだが、ライブラリ全体の構造とその相互関係を表示するには絶対に不十分だ。
そしてもうひとつ、ライブラリーは徐々に拡張していくが、これもまた、冒頭で述べたライブラリー・オブジェクトを構築 するというコンセプトの枠内でのことである。だから、その構造を一度理解すれば十分で、その後はとてもシンプルになる。
しかしもちろん、どうすればもっとシンプルでわかりやすい方法ですべてを示すことができるかを考えるつもりだ(そしてすでに考えている)。
アルテム、こんにちは。あなたの仕事はかけがえのないものです!私のような人間がそれを質的に保存できるように、開発の機会と時間を費やしてくれてありがとう。
提案があるのですが、githubであなたのライブラリをリポジトリとして公開してはどうでしょうか?そうすれば何ができるか:
- もちろん、バージョン管理システムです。
- 誰もがDoEasyライブラリの開発に参加できる。
- コードを素早く検索し、いつでも最新バージョンにアクセスできる。
例えば、ライブラリの勉強中にいくつかのバグを見つけて修正し、コードの一部を最適化しました。そのような場合、私はバージョン管理システムの枠組みの中であなたに特別なリクエストを送ることができ、それによってあなたは私の改良を現在のバージョンのライブラリに受け入れるかどうかを決めることができます。
あなたは素晴らしい仕事をしているし、私たち(私のような人間はたくさんいる)はDoEasyを改善するために、共通の利益のために自分の時間を投資することができる。私は提案の実現に協力する用意があります。
アルテム、こんにちは。あなたの仕事はかけがえのないものです!私のような者が質的に保存できるよう、開発の機会と時間を費やしてくれてありがとう。
提案があるのですが、githubであなたのライブラリをリポジトリとして公開してはどうでしょうか?何をするのか:
- もちろん、バージョン管理システムです。
- 誰でもDoEasyライブラリの開発に参加できる。
- コードを素早く検索し、いつでも最新バージョンにアクセスできる。
例えば、ライブラリの勉強中にバグを見つけて修正したり、コードを最適化したりしました。そのような場合、バージョン管理システムの枠組みの中で特別なリクエストを送ることができます。
あなたは素晴らしい仕事をしているし、私たち(私のような人間はたくさんいる)はDoEasyを改善するために、共通の利益のために自分の時間を投資することができる。私は提案の実現に協力する用意があります。
こんにちは。ご意見ありがとうございます。
現時点では、リポジトリについて話したり考えたりするのは時期尚早です - ライブラリは活発に開発中で、私が計画したものをすべて作成して公開するまでは、計画から外れたくありません。また、サードパーティのユーザーによる多数の修正や改訂は、作者の気を計画に従うことからそらすだけだろう。
しかし、発見されたエラーとその除去方法については、エラーが発見された記事のディスカッションで直接報告する方が良い - それはライブラリの開発と発見されたエラーの除去を助けるだけである。
TradingControl.mqh ファイルをコンパイルすると、2 つのエラーが発生します:
'CTrading::OpenPosition<double,d...' - プライベートメンバー関数にアクセスできません TradingControl.mqh 328 21
'CTrading::OpenPosition<double,double>' の宣言を参照してください Trading.mqh 146 24
'CTrading::PlaceOrder<double,double...' - プライベートメンバー関数 TradingControl にアクセスできません。mqh 344 18
'CTrading::PlaceOrder<double,double,double,double>' Trading.mqh 156 26 の宣言を参照。
これらのメソッドは CTrading クラスの private セクションにあります。これらのメソッドをこのクラスのパブリック・セクションに移動すると、エラーはなくなります。しかし、添付されたファイルでは(私の理解では、これらは動作しています)、これらのメソッドもCTradingクラスのprivateセクションにあり、TradingControl.mqhファイルをコンパイルすると、これらの2つのエラーが発生します。
Artyomさん、ではどのように動作するのでしょうか?ここにエラーがあるか、私が何かを誤解しているかのどちらかです。
P.S. 次のパート31の添付ファイルをダウンロードしましたが、そこでもこれらのメソッドはCTradingクラスのprivateセクションにあり、コンパイル時にこの2つのエラーが発生します。
TradingControl.mqhファイルのコンパイル時に2つのエラーが発生します:
'CTrading::OpenPosition<double,d...' - プライベートメンバー関数 TradingControl.mqh 328 21
'CTrading::OpenPosition<double,double>' の宣言を参照してください。mqh 146 24
'CTrading::PlaceOrder<double,double...' - プライベートメンバー関数 TradingControl にアクセスできません。mqh 344 18
'CTrading::PlaceOrder<double,double,double,double>' の宣言を参照 Trading.mqh 156 26
これらのメソッドは CTrading クラスの private セクションにあります。これらのメソッドをこのクラスのパブリック・セクションに移動すると、エラーはなくなります。しかし、添付ファイルでは(私が理解するところでは、これらは動作しています)これらのメソッドもCTradingクラスのprivateセクションにあり、TradingControl.mqhファイルをコンパイルする際にこれらの2つのエラーが発生します。
Artemさん、ではどのように動作するのでしょうか?ここにエラーがあるか、私が何かを誤解しているかのどちらかです。
P.S. 次のパート31の添付ファイルをダウンロードしましたが、そこでもこれらのメソッドはCTradingクラスのprivateセクションにあり、コンパイル時にこれら2つのエラーが発生します。
これは最近のアップデート後に発生しました。外部からアクセスできないようにprotectedセクションに置くようにしてください。パブリックなメソッドはあまりにひどいです。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 MetaTraderプログラムを簡単かつ迅速に開発するためのライブラリ(第25部): 未決取引リクエスト - リクエストオブジェクトの管理 はパブリッシュされました:
前の記事では、ライブラリオブジェクトの一般的な概念に対応する保留中リクエストオブジェクトのクラスを作成しました。今回は、保留中リクエストオブジェクトの管理を許可するクラスについてです。
当初は、保留中リクエストを管理するための必要なすべてのメソッドを備えた独立したクラスを作成したかったのですが、ライブラリのメインCTradingクラスと保留中リクエストを管理するために作成された新しいクラスは相互に関連しているため、保留中リクエストオブジェクトを管理するための新しいクラスをメインの取引クラスの子孫にする方がはるかに簡単なことがわかりました。
保留中リクエストオブジェクトの管理全体がクラスタイマーで実行されるため、基本取引クラスタイマーを仮想化します。つまり、保留中リクエスト管理クラスのタイマーも仮想化されます。次に、基本取引クラスタイマーに関連するすべてがクラスタイマーで設定され、保留中リクエストオブジェクトを管理するためにクラスで機能するすべてのものがそのクラスのタイマーで設定されます。
保留中リクエストオブジェクトを管理するクラスとは別に、小さなクラスを作成して一時停止を調整し、遅延時間の間プログラムの実行を停止するSleep()関数の使用を回避します。Pauseオブジェクトを使用すると、ティックに依存しなくなります。つまり、週末に待機する必要があるコードをテストできるようになります。一時停止はタイマーで制御されます。
作者: Artyom Trishkin