プログラミングの勉強を手伝ってください。 - ページ 3

 
Tio Nisla:
先ほど、somebodyfunc()関数が金額を返す以外に何らかの操作をしたり、取引パラメータを計算したりする場合、そのような使い方をすると捕捉しにくいアーティファクトが発生し、コードの作者が「あれ?どうして4回なんだ?O_o F$#@!!!!3回あるはずなのでは?なぜ私のEAは私に嘘をつくのか」。それが、専門家が毛根まで激怒した「シットコド」である。当たり前のことなので、私は話題にしませんでしたが、あなたは私のためにそれをやってくれました。しかし、配列の再初期化を行わずに動的に計算されたインデックスによるアドレス指定は、別のものであることを考慮に入れていません。素の sys では通常 GPF になり、プラスでは例外とそのハンドラへのスマートポインタと配列になります。mqlでは、何につながるかは不明です。

エルーシブ・アーテファクト」とは何か? 宗教的なものなのか?作り話を信じるのか?

 
Aleksandr Slavskii:

皆さん、パーソナリティですが、真実を見極めましょう。

サンプルでは、ループの繰り返し ごとにPositionsTotal() が呼び出されていますね。

でも、Dimitriさんは逆に、コンパイラが違う方法でやっていると言っているわけですが、私には理解できません。説明する。

PositionsTotal() 関数が毎回ポジションを再計算するのではなく、単にオープンポジションの数を含む変数の値を返すというなら、たしかにその通り、もう一つ変数を宣言する意味はありませんが、では、コンパイラは何をしなければならないのでしょうか

そして、この関数が毎回オープンポジションを再計算するのであれば、コンパイラはこの関数の値がさらなる計算に影響するかどうかを理解し、関数か変数のどちらかを使用しなければならないことがわかりました。

うまくいかないようです。

その都度再計算したり、再計算しなかったりしますが、PositionTotal()の呼び出しは確実にコストがかかります。そして、これは簡単な実験によって簡単に証明される。しかし、彼らは私を粉々にするような殺人的な実験をする代わりに、「見つけにくい人工物」を使った派手な議論を持ち出すのです。そのサンプルコードは、あなたが知っている最初のページから見つけて、そこでどのように見えるか見ることができます)))掲示板に貼り付ける前に意図的に変更されたのです(大拍手)。そして、あくまでも初心者に無用な負担をかけないようにするためであった。

そしてコンパイラは、コードを最適化し、関数を通さずに直接変数を呼び出すという意味です。

int x;

for(;i<x;)

и

for(;i<F();)

int F(){return(x);}

これはArraySize()関数でよくわかります。関数を呼び出すことと、その関数で変数を使うことの区別がつかないのです。しかし、PositionsTotsl()では、残念ながらそうではありません。

ちなみに、ループの中で変数を宣言すると速度が低下することもあるので、その点も注意が必要です。何がニブルに届いていないのか?知らないんですか?ここでも議論になりますが、4と5には違いがあります。

 

確かにPositionsTotal()は、毎回オープンポジションの 数を要求してきますね。それとも、最適化されて、更新マーク付きの定数に値が保存され、変化しなければ常に同じ数値を返すだけなのでしょうか)?

この機能には、内部で何らかの最適化がなされているはずです。そんな重要でコストのかかる機能を「どうせやるから」と作るのは、開発者も馬鹿ではありません。

憤慨している人は、同じループの両バリエーションを実行するのに、どれだけの時間とリソースがかかるか確認してください。

うんこを投げる必要はない。


純粋に学術的な興味でPositionsTotal()のソースコードを見てみたいのですが。


まあ、考えてみれば、一番簡単なのは、この値を格納する端末のグローバル変数を作ることでしょう。そして、この値のみを返す。そして、ポジションのオープンやクローズ時に更新することで、変数を安全にし、同期させることで、万が一、そこに何かが書き込まれたとしても大丈夫なようにします。

ということだと思います。

まあ、ポジションに関するデータ自体は、何らかのデータ構造で保存されているでしょうから、むやみにサーバーを回さずに取得することは可能だったのでしょうけど。一般的には、どのようなコールフォー/のバリエーションでも、生産性ではすべてが正常であると思います。


そして、そのコードスタイルが美学的に美しいかどうかは、誰もが自分で判断することです)

 
Nikolay Mitrofanov:

憤慨している人は、同じサイクルの両方のバリエーションを動かすのにどれだけの時間とリソースが必要なのか確認してください。

うんこを投げる必要はない。

Dmitriyの権威を疑っているわけではないので、私に向けられたものでない ことを祈ります。TioNislaも、長い間コーディングをしているようですが


勉強中だから聞くのです。

 

PositionsTotal()は、常に正しい数値を返す必要が ありポジションの数が 変わるとすぐにその値を変更しなければならないという厄介な ものです。そのため、単純な変数やArraySize()のような高速性は期待できない。

 
Aleksandr Slavskii:

...


勉強中だから聞いているんです。

習い事をしている人は、こんな些細なことでは全く困らない。アイデアをコードに変換する(あるいは、明確でないプロセスを一連の動作に変換する)能力に集中する。そして、そのコードは好きなようにいじることができるのです。

 
Dmitry Fedoseev:

学習中の方は、このような細かいことは全く気にしないでください。アイデアをコードに変換する(あるいは、明確でないプロセスを一連の動作に変換する)ことに集中する。そして、そのコードは好きなようにいじることができるのです。

理解しようとする人、深堀りする人はいいと思うんです。

小さなことに注意を払わないことで、コーダーは自分の思うままにコードを書く習慣が身についてしまうのです。そして、コードを梳くことは二重の作業を意味し、しばしば作者だけでなく、まだ幸運にもコードで作業している人たちにとってもそうです。

ちゃんと書いて、細かいところまで理解できるのに、わざわざコードを書く必要があるのでしょうか(笑)。

あなたのアドバイスは...その...IMHO


あなたのアドバイスは、経験豊富なプログラマー(強い自信のある人)にとって良いもので、その人は、どこで何を掃除しなければならないかを知っているので、掃除することができます。

 
Nikolay Mitrofanov:

私としては、理解しようとしたり、深く掘り下げたりする人はいいなと思うのですが...。

小さなことに注意を払わないことで、コーダーは間違った方法でコードを書く習慣を身につけてしまうのです。そして、コードを梳くことは二重の作業を意味し、しばしば作者だけでなく、まだ幸運にもコードで作業している人たちにとってもそうです。

ちゃんと書いて、細かいところまで理解できるのに、わざわざコードを書く必要があるのでしょうか(笑)。

あなたのアドバイスは...その...IMHO


あなたのアドバイスは、経験豊富なプログラマー(強い自信のある人)にとって良いもので、彼はどこで何を梳かなければならないかを知っているので、梳かすことができます。

初心者はなおさらです。「ここは const なしで書ける、ここは static なしで書ける、などなど」フォーラムで言い合うレベルではなく、少なくとも何とかして問題を解決したほうがいい。

このようなコードを修正するために、誰かが私にインジケータを送らない週はありません: for(int i=0;i<Bars;i++).そして、ここで問題をこすっていると、スピードが出るかもしれない...。は、30%です。

効率的なEAであっても(テストのスピードという意味で)、構文の複雑さの問題ではなく、特定の戦略ごとに毎回生まれ変わるそのアルゴリズムの問題である。

 
Dmitry Fedoseev:

初心者はなおさらです。「ここはconstなしで書ける、ここはstaticなしで書ける、などと掲示板で言い合うレベルではなく、せめてなんとか解決したほうがいいでしょう。

このようなコードを修正するために、誰かが私にインジケータを送らない週はありません: for(int i=0;i<Bars;i++).そして、ここで問題をこすっていると、スピードが出るかもしれない...。は、30%です。

初心者のプログラマーが フォーラムで何かを質問するということは、その答えを知りたい、興味がある、必要としているということです。アドバイスをもらうためにスレッドを作成したこともありました。

お題の意味を正しく理解すれば、彼のアイデアの実装の問題は、「適当にやってもうまくいく」ではなく、「できるだけベストで、できるだけ正しく」だったのです。それはいいことだ。これは正しい。

どんな活動でも「なんとなく」というのは、ひどいやり方です。

まずは把握すること、そして知識を持って実行すること、これが最良のアプローチです。

 
Nikolay Mitrofanov:

初心者のプログラマーが フォーラムで何かを質問するということは、その答えを知りたい、興味がある、必要としているということです。アドバイスをもらうためにスレッドを作ったこともあったそうです。

私がこのスレッドの著者を正しく理解したならば、彼のアイデアの実装の問題は、もはや「ただうまくいくように好きなようにやる」のではなく、すぐに「可能な限り、正しく」やることなのです。それはいいことだ。これは正しい。

どんな活動でも「なんとなく」というのは、ひどいやり方です。

まず理解すること、そして知識を持って実行することが一番です。

何を知っているのか?このアルゴリズムが自然界に存在しないのであればともかく、自分で発明しなければならないわけで、すべてを定義するのがアルゴリズムなのです。