アドバイザープロジェクト - ページ 2

 
Vasiliy Sokolov:

括弧を並べ替えても、ごちゃごちゃした感じはなくならない。アドバイスする前に、せめて自分のレベルを平均まで上げてください。

私のレベルはどうなっているのでしょうか?

 
STARIJ:

解説は番組本文の半分を占めること

私は、最初に「ここで何が起こるべきか」という長い解説を書き、その間にそれを実装するコードを書くこともあります :-) ところで、私はこの方法を初心者にも勧めています。
 
Maxim Kuznetsov:
私が書くものの中には、最初に「こうあるべき」という長いコメントを書いて、それを実装するコードを書くものもあります :-) ところで、私は初心者にもこのようなアプローチを勧めています。
まず、関数のスタブとして、何をするのか、return(何か)を記述します。次に、コード
 
Vitaly Muzichenko:

このスタイルで、常に一定で変化しない関数を書いてはいけない

簡潔に書けば、どうせ誰も見ないし、スペースも半分で済む。


コードに常にコメントし、コードのこの部分は何のために責任があるのか、それは難しいことではありません、そして今、あなたは常にコードが何であるかを知っているだろうし、それを勉強する時間を短縮する


Vitalyさん、ちゃんと12インチのノートPCの画面を持っているんですね?

昔、CV-1420で英数字画面24行×80文字でも、スペースを確保しようとしたのを覚えています ))今はどうにかして、早く理解できるように書くことを心がけています。

 
Vitaly Muzichenko:

このスタイルで、常に一定で変化しない関数を書いてはいけない

簡潔に書けば、どうせ誰も見ないし、スペースも半分で済む。


コードのすべての時間をコメントし、コードのこの作品は何のために責任がある、それは難しいことではありませんし、ここで最終化で常にどのようなコードを知っているだろうし、それを勉強する時間を減らすために

そして、この下にある4つの括弧が何を指しているのか、目で見て確かめてください。これは非常にまずいコードスタイルです。一般的にはMSが一番で、MQがK&Rスタイルを公言しているからと言って、それを真似る理由はないでしょう。パンチカードや80×24のモニタの時代はとっくに終わっているのです。

void CloseOrders(int cmd) {
 for(int i=OrdersTotal()-1;i>=0;i--) {
  if(OrderSelect(i,SELECT_BY_POS)) {
   if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) {
    if(OrderType()==OP_BUY && cmd==OP_BUY) {
     if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Blue)) Print("Order BUY not close! Error = ",GetLastError());
    }
     if(OrderType()==OP_SELL && cmd==OP_SELL) {
      if(!OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Red)) Print("Order SELL not close! Error = ",GetLastError());
    }
}}}}
ワシリー・ソコロフ
では、コードの9割はコメントですね。それに、無意味で読みにくいコードはできるだけ多くあるべきで、そうすればもっとコメントをつけることができるはずです

でも、年をとったら、「FXと私」という本の形でコメントを公開することもできますよ )))) 。いや、むしろ「俺とFX」の方がいい。

 
Alexey Volchanskiy:

そして、その下にある4つの括弧が何を指しているのか、目を凝らしてみてください。これは非常にまずいコードスタイルです。一般的にはMSが一番で、MQがK&Rスタイルを実践していることは、それを真似る理由にはならない。パンチカードや80×24のモニタの時代はとっくに終わっているのです。


でも、年をとったら、「FXと私」という本の形でコメントを公開することもできますよ )))) 。いや、「俺とFX」の方がいい。

作業画面27インチ。

再読はしませんが、引用します。"このスタイルで 常に一定で変化しない関数を書いては いけない"

プラットフォームがリリースされた時に一度だけ書かれ、今後も変わることのない関数になぜ目を摘むのか。ロットサイズや注文数、代表的なものを取得するために、関数内のコードを変更・編集することはよくあることでしょうか?では、なぜ32インチモニター3画面に引き伸ばすのか?

追伸:添付のコードは、kodobaseから偽造したものです。

 
Vitaly Muzichenko:

27インチ ワーキングスクリーン

読み返さずに引用します。"このスタイルで 常に一定で変化しない関数を書いては いけない"

プラットフォームがリリースされた時に一度だけ書かれ、今後も変わることのない関数になぜ目を摘むのか。ロットサイズや注文数、代表的なものを取得するために、関数内のコードを変更・編集することはよくあることでしょうか?では、なぜ32インチモニター3画面に引き伸ばすのか?

彼らが眠るファイルは、300年に一度、同じように開かれる。

そして、開いたら......山のように見つけてきてください }}}}} 何が何だかわからない。

自分で書いてテストして、ライブラリやクラスに送って保存しているのに、なぜ自分でトラップを書くのでしょうか?それだけです。そして、記憶を呼び覚ます必要があるとき(もしかしたら、それをもとに何かをする必要があるかもしれない、何でもいい、何かを 追加する必要がある)--ただ座って、括弧を動かすだけだ......。

 
Vitaly Muzichenko:

27インチ ワーキングスクリーン

読み返さずに引用します。"常に一定で、 そのスタイルで変化することのない関数を書いては いけない"

プラットフォームがリリースされた時に一度だけ書かれ、今後も変わることのない関数になぜ目を摘むのか。ロットサイズや注文数、代表的なものを取得するために、関数内のコードを変更・編集することはよくあるのでしょうか?では、なぜ32インチモニター3画面に引き伸ばすのか?

追伸:コードはkodobaseから引っ張ってきて添付しています。

Vitaly: 最初のバージョンの関数では、どの閉じ括弧がどの開き括弧を参照しているかが明確に示されていますが、2番目のバージョンでは、ペアを探すのに目が疲れますね...。

通常、カスタムファンクションは画面に収まりきらないほど大きなものではありません。また、コンパイルしたEAで括弧がどのように配置されているかは全く問題ではありません。

 
Artyom Trishkin:

また、彼らが眠るファイルは300年に一度、開かれる。

しかし、いざ開いてみると、}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}))))))の中から探し出すしかないのである。

なぜ自分でトラップを書くかというと、書いたらテストして図書館や教室に送って保管してもらうのです。それだけです。そして、記憶を呼び覚ます必要があるとき(もしかしたら、それをもとに何かをするかもしれない、わからない...) - ただ座って、括弧を動かす...。

いや、ファイルには何も入っていないし、欲もないし、知人とプログラムを共有することも非常に多いし、アーカイブを送るのではなく、1ファイルだけ送ることもある。

すべての機能は一番下にありますが、実行コードは常にきちんとコメントされており、子供でも理解できるようになっています。

 
Gregory Kovalenko:
こんにちは。
コードの量が増えてくると、時に困難や混乱が生じることがあります。
膨大な行数のEAコードを見たことがありますが、複雑なEAはどのように設計されているのでしょうか。もしかしたら、このような複雑なアルゴリズムを扱うためのツールやテクニックがあるのでしょうか。

どのEAでも数千行のコードがあるのですが。(インクルージョンにより自動的に含まれます)。

実際、EAはCExpertクラステンプレートで構成されており、OnInit、OnTickなどの関数を持って います。EAの接続テンプレートでは、すべてのグローバル関数(イベント)は、このタイプのオブジェクトの対応する関数を呼び出します。

CExpertは、初期化時に、あらかじめ定義されたグローバル機能「EAパーツファクトリー」を介して、作業に必要なすべてのパーツを作成する方法を要求します。

Expert Advisor自体は5行で構成されています。EAの部品工場自体のオブジェクトをこのファイルで宣言し、インクルージョンが含まれています。

私自身は、仮想インターフェースと実装を分けたOOPアプローチがとても好きです。まず、インターフェイスファイル(すべての関数が仮想でゼロに等しい抽象クラス)について説明します。本クラスは、"インタラクションプロトコル "を定義する。そして、これらの機能がすべて実装された実クラスを継承する(機能の記述が「レベル別」に分散している場合は、全階層をクラスとすることもある)。

この方法では、エンティティを分離することで、プロジェクト全体のサポートや、クラスの再利用が非常に容易になります。