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

 
hoz:


:)新しいバー機能として実装してみてはいかがでしょうか。1日1回、つまり0時からの再計算が必要です。だから、シンプルにやるんです。もちろん、スタート時。

原始的ではありますが、これが正しい方法だと思います。
君の名前の由来であるVininは、「勝手に変わるはずだ」と言っていたのですが、コンパイルだけで変わることはありませんでした。バーコントロールを使うというアイデア、ありがとうございました一方のグラフにあるバリアントと、もう一方のグラフにあるあなたのバリアントを並べてみてください。明日、何が効くか見てみます。
 
hoz:


どちらでも ない、E です。&&の 記号があります。

または オペランドの少なくとも 一方が偽のとき(1番目か2番目)、AND条件は成立 しないからです。ブール論理学ではこれを「ド・モルガンの法則」と呼びます。

わかったよ。しかし、ポイントはこれです。

コードによる一般的な変数indexは、値Bar - IndicatorCounted()を持ちます。

つまり、現在のバーでは1、新しいバーでは2です。

IsUpFractal()関数に、まだ新しいバーでなければ1か値が入っていますね?

つまり、入力パラメータのインデックスも 固定なので、i 変数は固定値を持つことになる。そのため、ループは最初の反復の後に必ず壊れます。では、ループは何のためにあるのでしょうか?

サイクルステップごとに、変数iは1だけデクリメントされる(i--)ので、iはindex+g_center-1から0までのすべての値を実行する。さらに、インディケータが最初に起動したとき、IndicatorCounted()は0を与える、つまり、indexはすべてのバーで実行されるので、iは毎回index+g_center-1を割り当てられ、それが0バーに達するまで、またはcntがg_centerに等しくなるまで、すなわち、ループ条件が満たされないまで(よく、またはループボディ自体でリターンが呼ばれるまで)ダウン実行されますことに注意してください。
 
alsu:

または オペランドの少なくとも1 つが偽のとき(第1 OR 第2)、AND条件は成立 しないからです。ブダ論理学ではこれを「ド・モルガンの法則」と呼んでいます。

すごい。なんということでしょう。何度このオペレーターを使ったことか...ここにきて「新しいゲートを 見るようなものだ」と。法律を読んだら、変な書き方をしている。否定される状況が書かれています。このテクニックは、否定的な状況にしか適用されないということですね?つまり、ブーリアン変数のいずれかがTrueに 等しくない場合です。

突き刺していないことに、やっていくうちに気づきました。要するに、ここでの違いは次のようなことです。指標になるからこそ、こういう考え方に慣れないんです。これは、インジケータの最初の呼び出しで、バーは計算されず、インデックスは、チャートのバーの数、またはバーの計算の条件が制限されている場合、いくつかの変数limitReCalcBarの 値に等しくなることを意味します。

実は、このコードから変数g_center = 2 となります。limitReCalcBar = 5000 も外部変数に基づく ものです。

機能でインジケーターを初めて動かす場合。

//+-------------------------------------------------------------------------------------+
//| Определение наличия верхнего фрактала на указанном баре                             |
//+-------------------------------------------------------------------------------------+
bool IsUpFractal(int index)
{
   double centerHigh = High[index + g_center];     // За точку отсчета берется средний..
                                                   // ..бар на участке из i_fractalPeriod
                                                   // ..баров
// - 1 - == Поиск максимумов справа от центрального бара ================================
   int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh <= High[i])                   // ..максимумом. Не позволяется..
         return (false);                           // ..наличие баров с большим или..
      cnt++;                                       // ..равным максимумом.
   }
   
   if (i < 0)                                      // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 1 - == Окончание блока =============================================================

// - 2 - == Поиск максимумов слева от центрального бара =================================
   cnt = 0;
   i = index + g_center + 1;
   int total = Bars - 1;
   for (; i < total && cnt < g_center; i++)        // Слева от центрального бара должно
   {                                               // ..быть g_center-1 баров с низшим..
      if (centerHigh == High[i])                   // ..максимумом. Не позволяется..
         continue;                                 // ..наличие баров с большим..
      if (centerHigh < High[i])                    // ..максимумом. Равный - позволяется
         return (false);
      cnt++;                                    
   }
   
   if (i >= total)                                 // g_center-1 низших максимумов не..
      return (false);                              // ..найдено. Фрактала нет
// - 2 - == Окончание блока =============================================================
                                                   
   return (true);                                  // Фрактал найден                 
}

にはそれに応じて5000の 値が渡される。

i= index + g_center - 1 = 5000 + 2 - 1 =5001

ループの中を覗いてみよう。

for (; i >= 0 && cnt < g_center; i--)

5000 本のバーを計算する必要があります。最初の2つのバー、すなわち0と1の後、cnt < g_centerの 条件は偽となります。では、5000本の バーをすべて計算するにはどうしたらよいのでしょうか。ここが極めたいポイントです。プロにとっては初歩的なことらしいが、私には理解できない。もちろん、 && 演算子をORと すれば、すべてがうまくいくのだが......。しかし、それは私がすでにExpert Advisorで使っていて、今まで出会ってきたものとなぜか矛盾している。

まあ、すべてが計算通りなら、すべてがシンプルになるんですけどね。0と 1が indexを介して 毎ティックで渡され、ループの中で条件が満たされ、私の見るところ困難はないようです。

 

プログラマーの皆様へオープンポジションを監視し、あるポジションが一定の損失額に達すると、そのポジションの一部をクローズするスクリプトを書くことが可能かどうか教えてください。損失のしきい値は、預金通貨、またはポイントのいずれかで設定する必要があります。このように、価格が不利になれば損失を減らし、価格が利益に転じれば、損失の代わりにいくらかの利益を得るか、あるいはTPセットに応じて損失を小さくすることができます。スクリプトはEAモードで常に動作する必要があり、あらゆるトレーディングシステムまたはExpert Advisorのアシスタントとなるものです。

 
destan:

プログラマーの皆様へオープンポジションを監視し、あるポジションが一定の損失額に達すると、そのポジションの一部をクローズするスクリプトを書くことが可能かどうか教えてください。損失のしきい値は、預金通貨、またはポイントのいずれかで設定する必要があります。このように、価格が不利になれば損失を減らし、価格が利益に転じれば、損失の代わりにいくらかの利益を得るか、あるいはTPセットに応じて損失を小さくすることができます。スクリプトは常にEAモードで動作する必要があり、あらゆる取引システムまたはExpert Advisorのアシスタントとなるものです。

おそらく。ここに ヘルプがあります。

 
valeryk:

そうかもしれませんね。ここに ヘルプがあります。


ストップロスというものがあるんだ!!!
 

こんにちは、質問があります。 ターミナルに複数の同じウィンドウがあり、それぞれに同じExpert Advisorがありますが、設定は異なっています。 MQL4に、どのウィンドウからマーケットオーダーが開かれたかを検出できる機能または準備されたアルゴリズムがあるかどうか教えてください。

 
badbadboy:

こんにちは、質問があります。 ターミナルに複数の同じウィンドウがあり、それぞれに同じExpert Advisorがありますが、設定は異なっています。 MQL4に、成行注文がどのウィンドウで開かれているかを判断できる機能または準備済みのアルゴリズムがあれば教えていただけませんか。

EAのコピーを作成し、別の名前を付けると、ログですべてがわかり、どのスピアが、したがって、どのウィンドウでそれを見つけることができます。
 
borilunad:
EAのコピーを作り、異なる名前を付ける方が理にかなっています。どのコピーでどのウィンドウに表示されるかは、それぞれログブックで確認できますので、おわかりになるはずです

何とかしたいのですが、Expert Advisorにどのように知らせればいいのでしょうか?
 
borilunad:
EAのコピーを作成し、別の名前を付ける方が理にかなっており、ログですべてを見ることができます。

Expert Advisorが勝手に計算を始めるようにするために必要なんです。