[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 285

 
gyfto:

そうですね。終わったと思います。そのダニをセカンドキャンドルに詰め込んだ、リニューアルしたダニ捕り器がこちらです。

そうでした。

なった。

コードに対するコメント

1.CPU時間を節約するため、仮想ローソク足の選択でスイッチケースを作らず、代わりに選択のある部分をコメントアウトした(選択はコンパイル前に一度だけ特定のニーズで行われるため)。

2.現地時間(オフラインであること)が頭に浮かんでこない仕事中。while(time==TimeLocal()){//until one seconds has passed」のループの中に、FileWriteDoubleにMarketInfoが あるはずです(私には馬鹿の上塗りのように聞こえます)。そこで何がより論理的に見えるか教えていただければありがたいです。

3.著者の構成

init()の一番最後に宣言しています。

4.init()ダイナミックアレイの冒頭で

の代わりに使用される変数です。

5.最適化のために、理論的にはWinAPIのファイル関数を使い、44バイトのブロック(MarketInfo構造体の長さ、.hstの長さ)で一気に履歴に書き込むことが可能です。

6.Time[]セルに書き込む時間の作者のモデリングを完全に削除しました。同じ理由で、head while loopでは、TimeLocal()のチェックは行わず、TimeCurrent()のチェックのみを行っています。

7.コードの最適化のために、他に何か提案はありますか?

4から、インジケータを作ったと理解しなければ、そのような行為は明確ではありません。

ArrayResize (bid, 1);//урезаем и обнуляем использованные массивы
ArrayResize (ask, 1);

ArrayInitialize() が最も適しているのでは!

そして、ほとんどの場合、インジケータ・アレイの使用は拒否すべきです。

 
TarasBY:

ArrayInitialize()はおそらく動作するのか!?

ArrayInitialize(ask,EMPTY_VALUE);ってこと?してないんです。なぜきっちり切ったかというと、そういうケースを恐れてのことです。

(a, b, c)//1秒間に3回刻んだ後のaskの値(幻想的ですが、仮にそうしましょう)。

ArrayInitialize(ask, 0);//be (0, 0, 0)

FileWriteDouble(hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE);//Close[].

- Closeのセルは0になります。だから、そうならないようにサイズを再定義しているんです。ArrayInitialize(ask, EMPTY_VALUE)をチェックします。

TarasBY:

インジケータ配列の使用をやめて

躍動感があって、そこにひかれたんです。コマンドの数が少なく、プロセッササイクルの数が少ない。どんな理論値でも500ミリ秒の処理をしなければならない...。...させるために。

 
EAの送信とクローズ注文を手動ウィンドウに置き換え、このウィンドウから市場に参入することが可能かどうかを知っていますか?
 
gyfto:

ArrayInitialize(ask, EMPTY_VALUE);ってこと?してないんです。そのようなケースを恐れて、切り捨てるようになったのです。

(a, b, c)//1秒間に3回刻んだ後のaskの値(幻想的ですが、仮に)。

ArrayInitialize(ask, 0);//be (0, 0, 0)

FileWriteDouble(hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE);//Close[].

- Closeのセルは0になります。だから、そうならないようにサイズを再定義しているんです。ArrayInitialize(ask, EMPTY_VALUE);; チェックする。


ダイナミックであること、そこにひかれた。コマンドの数が少なく、プロセッササイクルの数が少ない。どんな理論的なボトルネックでも500ミリ秒の処理をこなさなければならない...。...させるために。

そうではなくて、何か、インジケーターの配列を縮めるのは無理なような気がするんです。さらに、このような配列に未入力のセルがある場合、そこには常に何らかの値が存在します:0またはEMPTY_VALUE、そしてこれらの計算では何が得られるのでしょうか?

bid[ArrayMaximum(bid)];
ask[ArrayMinimum(ask)];
そして、一般的なロジックでは、ティックコレクション全体をループで実行し、時間を個別に制御して、「新しいバー」の時間が過ぎるとすぐに、それをファイルに書き込み、その過程で作業アレイをゼロにしてクリッピングすることになるでしょう。
 
ex_kalibur:
私は知っていれば、手動で取引ウィンドウを呼び出して、このウィンドウを介して市場に参入するアドバイザーの送信とクローズ注文を変更することは可能ですか、それはアドバイザーの使用を許可しないそれらのブローカーに必要です。
Advisorのウィンドウ「プロパティ」→タブ「一般」→「自動売買」。-> 「手動確認」にチェックを入れる - 他の方法は知らない。
 
TarasBY:

そして、一般的なロジックでは、ティックコレクション全体をループで実行し、時間を個別に制御して、「新しいバー」の時間が過ぎたら、それをファイルに書き込み、その過程で作業アレイをゼロにしてクリッピングします。


おかしいな...。そのように持っているのですが...。ただ、時間はティック収集サイクル自体で制御され、ティックのコピーがティックから1秒を引いた回数だけ描画されるまで、作業配列は切り取られないようになっています。1秒経過-新しいティックが描かれ、2秒-前のティックのコピーと新しいティック、3秒-前のティックのコピー2つと新しいティック、といった具合に。前のティックのコピーの代わりに、クローズレベルでダッシュを描くことが可能です。このバリエーションはコードにコメントされています。
 
gyfto:

おかしいな...。こんな感じで持ってます...。ただ、時間はループ自体で制御しており、ティックがなかった回数から1を引いた数だけティックのコピーが描画されるまで作業配列は切り取らない。1秒経過-新しいティックが描かれ、2秒-前のティックのコピーと新しいティック、3秒-前のティックのコピー2つと新しいティック、といった具合に。前のティックのコピーの代わりに、クローズレベルでダッシュを描くことが可能です。このバリエーションはコードにコメントされています。

あなたと私は、違うサイクルの話をしているのです。これのことなんです。

    while (!IsStopped() && IsExpertEnabled())
    {
        //---- Сбор тиков
    }
 
小数点以下のゼロを削除する方法をどなたか教えてください。私のコードでは、なぜか小数点以下が4桁になっています。以下はそのコードです。文字列 l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3);
 
Demon2057:
小数点以下のゼロを削除する方法をどなたか教えてください。私のコードでは、なぜか小数点以下が4桁になっています。以下はそのコードです。文字列 l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3);
https://docs.mql4.com/ru/strings/StringSubstr
 

何が間違っているのか教えてください...。

double型の 変数に0,20130429164459(2013.04.29 16:44:59の意味)のような日付を格納したい。

EAコードの一部。

#include <stdlib.mqh>
bool once=false;
int start()
  {
  if (once==false)
     {
    double DTM; // дата и время в формате 0,20130429164459
    int YY=TimeYear(   TimeCurrent());   // Year
    int MN=TimeMonth(  TimeCurrent());   // Month         
    int DD=TimeDay(    TimeCurrent());   // Day
    int HH=TimeHour(   TimeCurrent());   // Hour         
    int MM=TimeMinute( TimeCurrent());   // Minute
    int SS=TimeSeconds(TimeCurrent());   // Second
    DTM = YY*0.0001+MN*0.000001+DD*0.00000001+HH*0.0000000001+MM*0.000000000001+SS;
    
   Alert ("Значение переменной DTM с 06 знаками равно ", DoubleToStrMorePrecision(DTM,6));
   Alert ("Значение переменной DTM с 07 знаками равно ", DoubleToStrMorePrecision(DTM,7));
   Alert ("Значение переменной DTM с 08 знаками равно ", DoubleToStrMorePrecision(DTM,8));
   Alert ("Значение переменной DTM с 09 знаками равно ", DoubleToStrMorePrecision(DTM,9));
   Alert ("Значение переменной DTM с 10 знаками равно ", DoubleToStrMorePrecision(DTM,10));
   Alert ("Значение переменной DTM с 11 знаками равно ", DoubleToStrMorePrecision(DTM,11));
   Alert ("Значение переменной DTM с 12 знаками равно ", DoubleToStrMorePrecision(DTM,12));
   Alert ("Значение переменной DTM с 13 знаками равно ", DoubleToStrMorePrecision(DTM,13));
   Alert ("Значение переменной DTM с 14 знаками равно ", DoubleToStrMorePrecision(DTM,14));
   Alert ("Значение переменной DTM с 15 знаками равно ", DoubleToStrMorePrecision(DTM,15));
   once=true;
      }
   return(0);
  }

Precision 12、13、14のイベントログに誤った結果が表示される(図を参照)。