mql5言語の特徴、微妙なニュアンスとテクニック - ページ 214

 
fxsaber #:

そんなエントリーに出会ったのは初めてです。

使ってみてください)))

 
Vladimir Simakov #:

使ってみてください))))

ウラジミール、あなたはどこでこのようなスキームを得るのですか?私は、バー、最小限のサイクルを見つける上で私のトピックでは、その後、助けられた、どこかに既製の画像がありますか? 私は独学で、もともと別のプロファイルにあります。

このように、論理回路を組み合わせて、足し算をしたり、サイクルをスクロールさせたり......。
 
Vladimir Simakov #:

まあ、激しいバグですね。例

メモリが確保され、解放されるときにデストラクタが呼ばれるが(これはRAIIによれば期待される動作のヒントである)、オブジェクトの生成 時にコンストラクタが呼ばれることは忘れられている))。

2つ目の{}のエラーです。

リマインダー:ホバリングで1位、ユニオンで3位

 
Vladimir Simakov #:

活用してください)))

ああ、あの増長した後の饒舌なこと...。)
 
Fast235 #:

ウラジミール、あなたはどこでそのようなスキームを得るのですか?私はその時、最小限のサイクルで、バーを検索する私のトピックで、助けられた、どこかに既製の画像がありますか? 私は独学で、もともと別のプロファイルにあります。

論理回路を組み立て、足し算し、サイクルをスクロールするだけ...。

こういうのを、理解せずに既製品から使うのはやめましょう。このようなレコードで、あなたはここよりも少し複雑なものが必要な場合は、バグ、常に簡単に見つけることはできませんが、あなたはすぐに埋めることができます)))。

 
Vladimir Simakov #:

このようなものを、理解せずに既製品で使うのはやめましょう。このような記録では、ここより少し複雑なものが必要な場合、いつも簡単には見つからないバグを、瞬時に作ることができます)))

バーの検索は、列挙とテンプレートで行いました))

テンプレートはほとんど後回しにしていたのですが、1時間くらいでハマりました。

列挙と一緒にコードから削除したのは、おそらく、それらを使用するためのより深刻なタスクを持っていた

--

つける

フォーラムに書いてありますよ、ありがとうございました。

 
Vladimir Simakov #:

まあ、激しいバグですね。例

メモリが確保され、それを解放するときにデストラクタが呼ばれるが(これはRAIIによれば期待される動作のヒントとなる)、オブジェクトを作成する ときのコンストラクタは呼ばれ忘れている))。

投稿ありがとうございました。
修正しました。

このコードでは、MQLの初期化シーケンスがまだ不完全なため、コンパイルエラーが発生します。

構造体については、シーケンスによる初期化が適切なパラメータによるコンストラクタ呼び出しに置き換えられていません - これを追加する予定です(無期限に延期されましたが、いくつかの新しいコードが製品に「漏れ」ました)。



 

@A100

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

mql5の特性、ヒントとコツ

A100, 2021.11.16 13:43

というのも、意味がないんです。

struct X {
    int i;
};
void OnStart()
{
    X x[200000] = {};
}

F5がハングアップする。また、これは矛盾した 回避策です。


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

mql5の特性、ヒントとコツ

fxsaber, 2021.11.17 02:07

struct MqlTick2 : private MqlTick {};

void OnStart()
{
  MqlTick2 Ticks[4] = {}; // OK
  
  ZeroMemory(Ticks); // 'Ticks' - not allowed for objects with protected members or inheritance
}

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

mql5の特性、ヒントとコツ

A100, 2021.11.17 02:20

4番目の間違いは自分でやったんだろ。なぜZeroMemoryは{}より悪いのですか?つまり、コンパイラが何らかの理由で検出できないprivateへのアクセスの無認可の仕組みがあるのです。

デベロッパーが直さないことを見越しているのでしょうか?むかしは、コンパイラもZeroMemoryには 反応しなかったんですよ。


mqlがC++から生まれたことを思い出すと、これらのクラスはコンストラクタ(つまり暗黙のコンストラクタ)を持たないので、これらの例(対応するもの)は両方ともそこそこうまく動作するのです。

  • ClassX x[n]={}; と宣言すると、配列の各要素に値が初期化 されます。
  • ClassX にカスタムコンストラクタがない場合(ただし、デフォルトの未設定コンストラクタはある)、クラスオブジェクトのゼロ初期化が行われます - プライベートフィールドがあるかどうかに関係なく、です。
  • しかし、constフィールドがある場合、デフォルトコンストラクタが暗黙のうちに削除されるため、コンパイラエラーとなります。

C++での例。

#include <iostream>
using namespace std;

class X
{
    int a;
    public:
    int get(){return a;}

    //X(){}   //так массив x не обнуляется
    //а если нет конструктора - то обнуляется
};

int main()
{
    X x[10]={};
    for (int i=0; i<10;i++)   cout<<x[i].get()<<endl;
}

したがって、構造体/クラスにconstフィールドがなければ、このロジックは正しいことになります。

 
付け加えると、クラスが非自明なフィールド(オブジェクト)を持つ場合、そのようなフィールドのオブジェクト全体のゼロインの後に、そのデフォルトのc-torが呼び出されることになります。
 
fxsaber #:

こんな記録は見たことがない。

MQL5で調べたところ、もっとひどいかもしれません、インジケーターのヒストリーを数TF分汲み上げるくらいです。

void FindHighLow(THL &hl[], const ENUM_TIMEFRAMES tf, const datetime start_time, const int sz_buf = 1000)
{
   ZeroMemory(hl);//hl структура
   datetime st = start_time;
   MqlRates rates[];
   for(int i = 0, c = CopyRates(_Symbol, tf, st, sz_buf, rates); ArraySize(rates) > 0 && i < ArraySize(hl);
         st = rates[0].time - PeriodSeconds(tf), c = CopyRates(_Symbol, tf, st, sz_buf, rates))
   {
        for(int j  = ArraySize(rates) - 1; j >= 0 && i < ArraySize(hl); j--)
      	{
		....	
	}
   }


for文の中にいろいろ書けるんです )))