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

 
alsu:

いいえ、サイクルの前に持っていた変数の一つからです。書く

は同じです。

   int cnt,i;
for (cnt = 0, i = index + g_center - 1; i >= 0 && cnt < g_center; i--) 

今ならわかる。ありがとうございます。見ていたのですが...基準点がなかったんです。今は0 です。


うーん、例えばindexは 1として渡されますね。このコードの一部を見てみましょう。

 int cnt = 0, i = index + g_center - 1;
   for (; i >= 0 && cnt < g_center; i--)           // Справа от центрального бара должно
   {                                               // ..быть g_center-1 баров с большим..
      if (centerLow >= Low[i])                     // ..минимумом. Не позволяется..
         return (false);                           // ..наличие баров с меньшим или..
      cnt++;                                       // .. равным минимумом
   }
   

到着直後は、cnt = 0, i = index + g_center - 1 = 1(index value) +2(g_centervalue)- 1 = 2 となります。

しかし、ループの条件に従って、iが 0に なるまで続けられる。どのように実現するのか?

この条件は、iが 2(index = 1の場合)からi >= 0までの値を持ち、cntが 0からcnt < g_center までの値を持つ場合、ネストした条件を満たすことを意味します。

ここの変数が1 であれば、ループは1 回しか繰り返さないことがわかりますね。

 
alsu:

"0気圧に制限される "という概念を説明する。
つまり、2つのフラクタルに線(光線ではない)を引きたいのですが、0本の棒で終わらせなければなりません。
 
beginner:
言い換えれば、私は2つのフラクタルを通して線(光線ではない)を描く必要がありますが、それは0 bar で終わる必要があります。


アルゴリズムは以下の通りです。

1.フラクタル座標を (i1; p1) と (i2; p2) とすると、i1<i2 (すなわち、1番目のフラクタルは2番目のフラクタルよりも 0 bar に近い) となります。

2.これらのフラクタル素片を通る直線の方程式 p = (p1-p2)/(i1-i2) * i + (p2*i1 - p1*i2)/(i1-i2)

3.したがって、次の終了座標を持つセグメントを描く必要がある: (0; (p2*i1 - p1*i2)/(i1-i2)) と (i2;p2)

4.ObjectCreate(...)

5.???

6.利益だ!!!

 
Vinin:

新しい日の最初のティックで動作するはずです。

回答ありがとうございました確かに、インジケータースタートの最初に挿入するまでは、決してうまくいきませんでした。

if(Hour() == 0 && Minute() == 0 && Seconds() == 0) { DeleteObject()など。

}

if(Hour() >= 0 && Minute() >= 0 && Seconds() >= 1) { インジケータコード ...

最近、これでもダメなんですよー。どうしたらいいんだろう。何かアドバイスはありますか?ありがとうございました。

今、なんとか書きました!土曜日は生活のために仕事です。

 
hoz:


そうです、ボリス です!それにしても、とてもいいですね。ありがとうございました。それが私の望みでした。捻じ曲げた... 捻じ曲げた...うまくいかなかったんです。まだ経験が少ないし、脳がプロのように考えているわけでもない。ちょっと行き詰まりましたね。:(

すぐには聞けなかったが、聞くしかなかった。自分でカットできなかったからです。

お役に立てたようで良かったです。私自身は、あなたのように、2年前に始めたが、子供の頃から私は常にヒントから知識がシステムを形成することはできませんので、自分自身ですべてに来るように慣れています。そして、どうしても必要なときだけ、もうすべてやりつくした、どこを探しても見つからなかったときに聞くことにしています。ここでは、早く溶接やポンピングの生地を作りたいという新人が多い。経験が教えてくれる。以前、「複雑で理解できないものよりも、単純でわかりやすいものの方がいい」と言いましたが、そのような事態は、真相がわかるまで避けた方がいいのです。コードはさまざまな方法で行うことができますが、ロジックはあなたにとって2つのように明確である必要があります。だから、まだ理解していないものを使うのは避けているんです。コードはあなたのツールであり、それを完璧に理解し、使いこなすことで、その時々で簡単に手を加えることができるようになるのです。成功を祈っています。
 
hoz:

今ならわかる。ありがとうございます。見ていたのですが...参考になる点がなかったです。今は0 です。


うーん、例えばindexは 1として渡されますね。このコードの一部を見てみましょう。

到着直後は、cnt = 0, i = index + g_center - 1 = 1(index value) +2(g_centervalue)- 1 = 2 となります。

しかし、ループの条件に従って、iが 0に なるまで続けられる。どのように実現するのか?

この条件は、iが 2(index = 1の場合)からi >= 0までの値を持ち、cntが 0からcnt < g_centerまでの 値を持つ場合、ネストした条件を満たすというものです。

ここの変数が1 であれば、ループを1回 だけ繰り返すことになることがわかりますね。


for()演算 子の2番目の場所に書かれた条件が満たされなくなったとき、つまりこの場合、iが0より小さくなったとき、またはcntがg_center以上になったときにループは終了します。変数iはi--(for文の3番目の部分、ループが閉じ括弧}に達するたびに実行される)の結果として、変数cntはcnt++の結果として、それぞれループの前に割り当てられた初期値とループの実行中に変化します。
 

こんにちは。

デモ口座から自分のトレードをhtmlにエクスポートしようとしています。(Alpari、最新ビルド)。レポートとして保存を押すと、フォルダ選択ウィンドウが開き、保存を押しても何も起こりません。デモ口座でも同じですか?もう一つ、私のMT4はデスクトップにインストールされています。それは重要なことですか?

 
borilunad:
どなたかご存知の方、Hour()、Minute()、Seconds()をグローバル変数にして、DailyPivotPointsインジケータを0時(0.00)にEAから新しいPPレベルなどのラインに変更する制御は可能ですか? 以前はHour(), Minute(), Seconds() で直接インジケータ内でやっていて、毎晩コンパイルしなくてもうまくいっていたんです。しかし、最近、ビルドの変更からか、勝手に変更されなくなった?ありがとうございます。


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

if (lastBarTime == время с ТФ Д1)
    return(0);
// что-то тут ещё
// что-то тут ещё
// что-то тут ещё
if (lastBarTime != время с ТФ Д1)
{
    пересчитывает уровни пивотов...
    lastBarTime = время с ТФ Д1;
}
原始的ではありますが、これが一番正しい方法だと思います
 
alsu:

for()演算子の2番目の場所に書かれた条件が満たされなくなったとき、つまりこの場合、iが0より小さくなったとき、またはcntがg_center以上になったときにループは終了します。


しかし、どちらかではなくAND です。&& 記号もあります。

それはすべて理解しています。しかし、ここで重要なのは、このことです。

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 - == Окончание блока =============================================================

コードによる一般的な変数インデックスが 値を持つBar - IndicatorCounted()

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

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

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

 

なぜ表示されないのか、教えてください...。

double IN[111];
double PERI=33;
double KRIT;
int z;      
ArraySetAsSeries(IN,true);

   for(z=0; z<=PERI; z++)  {
IN[z]=     iClose(Symbol1.Name,0,iBarShift(Symbol1.Name,0,Time[z],false)); }

   for(z=0; z<=PERI; z++)  {
KRIT=IN[z]-iMAOnArray(IN,0,PERI,0,MODE_SMA,iBarShift(IN,0,Time[z],false)); }

Print(KRIT);
return;