MQL5におけるOOPに関する質問 - ページ 42

 
Igor Makanu:

...

はすべてprivateメソッドで呼び出されますが、ソースコードでCheckPointer(m_order)==POINTER_INVALIDから逃れるための「ジェダイの考え方」はあるのでしょうか?

...

これはトリックではない可能性が高いです。アルゴリズムがそうなっていて、順序がない場合はコードのこの部分は実行されないはずです。

あるいは、そのような意図があったのかもしれません。しかし、ありえないことですが、ポインタがあっても注文があるとは限らないので、注文があるかどうかを確認する必要があります。

 
Igor Makanu:

そして、私の記憶が正しければ、今年の初めには、ログでNULLの設定を解除して0を得ることができましたが、現在は、次のようなエラーが発生します。

変更点

トレーディング、自動売買システム、ストラテジーテスターに関するフォーラム

バグ、バグ、質問

キリル・ベローゾフ さん 2017.12.14 21:34

Print(NULL); // 'NULL' - expression of 'void' type is illegal
Alert(NULL); // 'NULL' - expression of 'void' type is illegal

引退の時期

 
A100:

変更点

そうですね、でもMT4でやっていた方法を思い出して、ポインタの登録を解除してみました。

class A {};

A *a;
void OnStart()
{  Print("1 : ",a);
   a= new A;
   Print("2 : ",a);
   a = NULL;
   Print("3 : ",a);

delete a;
}

2019.09.17 07:52:40.855 tst (EURUSD,H1) 1 : 0

2019.09.17 07:52:40.856 tst (EURUSD,H1) 2 : 1048576

2019.09.17 07:52:40.856 tst (EURUSD,H1) 3 : 0

2019.09.17 07:52:40.856 tst (EURUSD,H1) 1 未削除のオブジェクトが残っています。

2019.09.17 07:52:40.856 tst (EURUSD,H1) 1 object of type A left

2019.09.17 07:52:40.856 tst (EURUSD,H1) 24 bytes of leaked memory

ドミトリー・フェドセーエフ

これはおそらく、注文がない場合はこの部分が実行されないようなアルゴリズムになっているはずです。

あるいは、そのように意図されているのかもしれません。しかし、ポインタがあってもオーダーがあるとは限らないので、オーダーの存在を確認する必要があります。

問題によっては、私はすでにコードで、それ自体が市場にあるものを見るだろう "注文オブジェクト "を作成する方法を書いている - デザイナーで注文を検索するマジックを使用して、それが見つかった場合は、それを拾うでしょう、価格に応じて注文を開く、注文タイプ自体がカウント(市場または保留)、ロット正規化、再引数が前のティックで、次のティックで正常に注文配置後、SLの配置などなど... 。 は、"order object "が介在することなく、すべて自分自身で行われる。

最終的には、ストラテジーは注文の利益(現在かすでに決済されているかは関係ない!)と注文 自体の状態(未発注、有効、すでに決済されている)に興味があるのです。


というのは、ポインタをチェックする必要があり、後でチェックせずに試すことができるからです。)

 
Igor Makanu:

ではなく、昔持っていたものを書きたかったのです。

という感じでした。

が、MQLでマクロ置換を確認する方法を思い出しました。

2019.09.16 22:57:42.837 tst (EURUSD,H1) a = 1

2019.09.16 22:57:42.837 tst (EURUSD,H1) POINTER_INVALID= 0

2019.09.16 22:57:42.837 tst (EURUSD,H1) NULL = 0


そして、私の記憶が正しければ、今年の初めには、NULLをログにアンプリンターすることができ、そこで0を得ることができましたが、今ではエラーが表示されるようになりました。

つまり、NULLの挙動は今後も変わらないはずですが、NULLの代わりに何が代入されているのかが不明です。おそらく、この状況を今チェックすると、if(CheckPointer(m_order)==POINTER_INVALID)) と書かれているように、 正しいコードと言える でしょう))

お気軽にご応募ください。ソースコードのNULLは98%の信頼性で#define NULL nullptrのようなものです。
 
Vladimir Simakov:

そして、砂糖にはこれ。

最初の簡単なテストでは

void OnStart()
{
    A * const a = new A;
    DELETE(a); //Error: 'a' - constant cannot be modified
}

砂糖ではなく、別のものであることを......。液性物質

 
A100:

最初の簡単なテストでは

砂糖ではなく、別のものであることを......。より液状の物質。

ないため)NULLは、ここでもそこでもない。CheckPointer()関数を 使用する必要があります。ポインタはそれ自体でゼロにする必要はありません。削除後はそれ自体でPOINTER_INVALIDになります。

 
Dmitry Fedoseev:

なぜなら、そこはあなたのいる場所ではないからです))NULLは、ここでもそこでもない。CheckPointer()関数を 使用する必要があります。ポインタを削除すると勝手にPOINTER_INVALIDになるので、自分でゼロにする必要はない。

管理人を読んでいると、「コードを正しく書け」というのはたいてい次のように聞こえます。

MQLは一般的に、常に厳しいです、新しいビルド、新しいトラブル、あなたは私が間違ってそれを使用した場合、ここに行くとサインを見つけるために開始します )))) 。

 
A100:

最初の簡単なテストでは

砂糖ではなく、別のものであることを......。液性物質

いい人だ。フリーランスの仕事、市場での製品、プログラミングに関する出版物の統計はどこにあるのでしょうか?それとも、コンスタントポインターの話題で誰かの目を引きたいのか、あるいは物質タイプの話題で自分の知識をひけらかしたいのか......?今後は、コンパイラーエラーを再現しようとするのではなく、例の文脈を考慮するようにしてください。
 
Vladimir Simakov:
親愛なる人へ。フリーランスの仕事、市場での製品、プログラミングに関連する出版物の統計は どこにありますか?それとも、コンスタントポインターの話題で誰かの目を引きたいのか、物質タイプの話題で自分の知識をひけらかしたいのか・・・?今後は、コンパイラーエラーを再現しようとするのではなく、例の文脈を考慮するようにしてください。

私は単純な文脈で、コード(この場合はマクロ)がエラーで書かれている場合、それを報告する(そしてそれを証明する例を示す)ことが可能だと考えています。そして、この文脈では、統計と 何の関係があるのか、私にはよくわからないのです

 
A100:

そして、この文脈では、統計と 何の関係があるのか、私にはよくわからないのです。

シンプルであれば、人は集まってくる。

;)

SZZY:あなたの記事はほとんど常に良いアイデアですが、材料のプレゼンテーションは、まあ、完全に善意ではなく、もちろんあなたのビジネスが、イモ、助けたい - ヘルプ、巧妙でありたい、まあ、しばしばそれはそう判明する

それはあなた次第ですが、オンラインリソースで自尊心を高める - ....入力し続けるのが面倒くさい。