リニア減速はプログラミングエラーなのか、MT4の機能なのか? - ページ 4

 

下の工事だけでも価値があります。


    bool Ok=true;
     for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
       if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
        if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
         Ok=false;
        }}}}

もうちょっと

    bool Ok=true;
    for(i=OrdersTotal()-1;i>=0;i--){//проверяем наличие ордеров
      if(OrderSelect(i,SELECT_BY_POS)){
        if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic){
          if(OrderType()==OP_SELLSTOP||OrderType()==OP_SELLLIMIT){
            Ok=false;
          }
        }
      }
    }

で、何がどの順番で実行されるかは既に分かっています。 これは単なる書式設定です。しかし、コードを論理的に一貫した操作に分解し、別の関数に分離することもできます。そのため、メインのアルゴリズムは、ごちゃごちゃしたコードの山から解放されることになる。

 
micle:

問題は、コードの重複、条件文の多さです。実際、このコードは条件分岐のIf演算子を含め、なぜか99%の行で構成されています。調べれば比較の回数は10倍は減らせるはずです。 実行速度が遅くなるだけでなく、このコードは読みにくいものです。加筆する人は、少なくとも2つの主な仕事があります。

1 - 壊さないこと

2 - 必要な機能を追加する。

読めないコードは、あらゆる種類のチェックと比較の重複を引き起こし、これもまた追加費用となる。私自身、25年ほど前、プログラミングを始めたばかりの頃、先生もいない中、ただ面白いからとAtari 800XL PCのマニュアルを見ながら覚えたことを思い出します。

もちろん、「もし」というのは面白いもので、私が「もしそうなら、こうだ」と書いて、プログラマーがそれをコードで解釈するという私のTORもあるでしょうし、命令を使った直接作業に関わる「もし」もありますし、命令を使った操作はたくさんありますから...。

もちろん、ループのようなもので、その実行によって順序条件を何度も確認することだと思っていました。そして、コードを一から書き直すことでしか、この状況を改善できないことが判明した?

 
micle:

下の工事だけでも価値があります。

もうちょっと

で、何がどの順番で実行されるかは既に分かっています。 これは単なる書式設定です。しかし、コードを論理的に一貫した操作に分解し、別の関数に分離することもできます。そのため、メインのアルゴリズムがごちゃごちゃしたコードの山から解放されることになる。

でも、性能に何か影響はないのでしょうか?

 
micle:

重複コードに関するトラブル

重複は関係ないし、ifも関係ない。本当に遅くなるのは、ワラントで作業するときです。
 
micle:

下の工事だけでも価値があります。


もうちょっと

で、何がどの順番で実行されるかは既に分かっています。 これは単なる書式設定です。しかし、コードを論理的に一貫した操作に分解し、別の関数に分離することもできます。そのため、メインのアルゴリズムは、ごちゃごちゃしたコードの山から解放されることになる。

非常に強力な引数、あなたのコード、私は経験豊富なプログラマーを見ることができる場所?
 

rev 1.1

ストップロスを設定し、保留中の注文を フィルタリングするために、ミラーMAを使用する2つのオプションがあります。
maMirror - 標準のiMA関数を使用して計算され、バーごとに1回動作し、データはバーのオープン価格から取得されます。
演算アルゴリズム。

販売用。
初期計算点 maMirror=iMA+pipsXHmaM(o/b)
後続の計算点 maMirror=maMirror(1)-(iMA(0)+pipsXHmaM(o/b)-iMA(1)+pipsXHmaM(o/b))
の場合、計算終了点以降に計算を終了する。

購入する場合。
初期計算点 maMirror=iMA-pipsXHmaL
その後の計算点 maMirror=maMirror(1)-(iMA(0)-pipsXLmaM-iMA(1)-pipsXLmaM)
は、計算終了点以降で計算を終了する。


ToRを簡略化するために、演算と変数が互いに独立し、ユーザーが設定する2つの計算ブロックを置く必要があります。
maMBlock=0 - ブロックを使用しない(標準のストップロスが使用される)
maMBlock=1 - ブロック#1のみを使用します。
maMBlock=2 - ブロック#2のみを使用(標準のストップロスが使用されます。)
maMBlock=3 - 両方のブロックを使用する

ブロックNo.1
ストップロスを計算するストップロスは再計算され、注文はバーごとに maMirror の値で更新されます。
1 StartPoint=1 (maTがタッチされた後に計算)、StartPoint=2 (注文が開かれた後に計算)の場合、変数 StartPoint は計算の開始点を決定するために使用されます。
1.1 StartPointO=1の場合、maTがタッチされてから計算が完了します。
1.2.StartPointO=2の場合、注文がクローズされた後に決済が終了する。
1.3 maMirrorでストップロスを設定できない場合、注文はクローズされます。
1.4. Levl_Zerro=0(使用しない)、Levl_Zerro!=0(ストップロスは始値から数えて指定した最大値に更新、負の値はストップロスが正の値に変換されることを意味します。)

2ブロック
未約定注文のフィルタリングの計算
0.1 買い注文の場合、maMirror>保留中の注文の始値なら注文を出す
0.2 売りの場合、maMirror<待機中の注文の始値であれば発注される。
1 StartPoint変数は、StartPoint=1(計算はmaTがタッチされた後に行われる)、StartPoint=2(計算は注文が開かれた後に行われる)の場合、計算の開始点を決定するために使用されます。
1.1 StartPointB=1の場合、maTをタッチしてから計算を終了します。
1.2 StartPointB=2(注文終了後に決済が終了する)の場合。
2.maMirrorDell=0(使用しない) maMirrorDell=1(ポイント0からの条件が一致しない場合、すべてのオープンオーダーを削除する)

ユーザー変数
maMirrorO(iMAによる設定)
maMirrorB (iMAの設定)
StartPointO
StartPointB
pipsXHmaMo
ピップスXLmaMo
pipsXHmaMb
ピップスXLmaMb
マームブロック

maMirrorDell

私はプログラマーではなく、航空宇宙学会のエンジニアなので、)見積もりの割り当てを助ける、顧客が新しい仕事をしたい、どのくらい見積もればいいかわからない)

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5
 
まず、一番大きな問題は、コードが読めず、構造化されていないことでしょう。かなり明確なToRがあるのではないでしょうか。ToRを理解して正しい方向でコードを書けば、(原則として)実行速度が大幅に向上しますが、それ以外のコストもかかります。
 
-Aleks-:

性能に何か影響があるのでしょうか?

この例では、何の効果もありません。EAスクリプト全体でこのようなフォーマットを処理することは望めないし、完全にフォーマットを変更することもできない
 
zfs:
非常に強力な引数、あなたのコード、私は経験豊富なプログラマーを見ることができる場所?
私のコードはパブリックドメインではありません。商業的な開発は、高負荷なウェブサーバー上で動作します。特に、私のコードは、DorogaTVプロジェクトの 一環として、「いくつかの」都市の道路の交通渋滞を計算します。
 
TheXpert:
重複は関係ない、ifも関係ない。本当の意味でのスローダウンは、受注活動によってもたらされるものです。

TKコードでの注文の操作、あるいはTK自体、あるいはMT4での一般的な注文の操作?