どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 236

 
int start(){
 int a=0;
 if (5>3)
 if (5>3)
 if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
 else Alert ("a=", a);
 else Alert ("a=", a+1);
 else Alert ("a=", a+2);
}

最初の条件を満たさない場合は、"a=2 "というアラートが表示されます。

2番目の条件を満たさない場合、"a=1 "というアラートが表示されます。

3つ目の条件を満たさない場合、「a=0」というアラートが表示されます。

ああ、そもそも最初は予想外だったんだ))

 
ALXIMIKS:

このスクリプトからAlertは出ない。Elseは、「if (5>3){Alert ("AAAAAAAAAAAAAAA"); a=5;}」という 条件です。"

謝辞:

は、anAlert: "a=0 "を持つ。

その結果、ある一連の条件の列挙中に中括弧"{"を使用しない場合、最後の条件に対してのみ非条件処理が可能になる。

その通り、ロジックは有効です。ただ、すべてを一列に並べるのはやめましょう。

int start(){
 int a=0;
 if (3>3)
    if (5>3)
       if (5>3){Alert ("AAAAAAAAAAAAAAAAAAAAAAA"); a=5;}
       else Alert ("a=", a);
}
となれば、よりクリアになるはずです。演算子1;演算子2;演算子N}のように、真の場合は括弧が必要です。演算子が1つだけの場合は中括弧を省略することができ、演算子は条件でもあるため、すべてが繰り返される。
 
artmedia70:

つまり、論理的な分岐を整理するために括弧が必要なのである。それがなければ、第一条件は基本です。もし、それが真実でなければ、他の条件も満たされないことになります。

工夫してみてください。

そしてその後に、他に何を指しているのかを考えてみてください。


else は " if (b>c)" を指します。
 

こんにちは。

if (DayOfWeek()==DayOfWeekIf
  && TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf)
  && TimeCurrent()<StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf)+Duration)
   {
    if  (iClose("XAUUSD",PERIOD_H1,0)-iOpen("XAUUSD",PERIOD_H1,0)>=0)
    Sell = true;
    if  (iOpen("XAUUSD",PERIOD_H1,0)-iClose("XAUUSD",PERIOD_H1,0)>0)
    Sell =false;
   }
  if (DayOfWeek()==DayOfWeekOpen
  && TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeOpen)
  && TimeCurrent()<StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeOpen)+Duration)
  {...

考え方としては、このような日のこのような時間にローソク足が強気であれば売り=真、弱気であれば偽ということです。そして、そのような日のそのような時間に、sell=trueなら売り、その逆なら買いとする。

しかし、この条件はなぜかうまくいかず、すべての取引が売りのために開かれています。M1でテストしています。

 
ALXIMIKS:

elseは「 if (b>c)」を指します。

正解です。

if (a>b)
   if (b>c) 
      Alert(" условие if (a>b && b>c) выполнено ");
   else if (d>e) 
      if (e>f) 
         Alert(" условие if (d>e && e>f) выполнено");

今度は、中括弧を使わないでロジックを作ってみてください。

(a>b)の場合、if (b>c)Alert()の 行が実行されます。

それ以外の場合は、(d>e) ならば、(e>f) ならば Alert() の行が実行される。

つまり、elseは一番最初の条件を参照するようにするのです。中括弧を使用しない場合

 
Antonius:

こんにちは。

考え方としては、このような日のこのような時間にローソク足が強気であれば売り=真、弱気であれば偽ということです。そして、そのような日のそのような時間に、sell=trueなら売り、その逆なら買いとする。

しかし、この条件はなぜかうまくいかず、すべての取引が売りのために開かれています。M1でテストしてみました。

きっとこの部分なんでしょうね。未知の変数が多く、開口部そのものが見えないので、結論を出すのは難しいですね。

自分で原因を調べるには、変数の値をコメント付きで印刷または表示します。そうすれば、いつでもその値を確認することができます。

 
Antonius:

こんにちは。

考え方としては、このような日のこのような時間にローソク足が強気であれば売り=真、弱気であれば偽ということです。そして、そのような日のそのような時間に、sell=trueなら売り、その逆なら買いとする。

しかし、この条件はなぜかうまくいかず、すべての取引が売りのために開かれています。M1でテストしています。

このような比較は可能でしょうか? 右の部分(「型変換では、すべてを "yyyy.mm.dd "TimeTradeIf という値で文字列にします」)が気に入らないのですが、どうでしょうか?
 TimeCurrent()>=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+TimeTradeIf
 
ALXIMIKS:
右の部分("yyyy.mm.dd "TimeTradeIf " の値が文字列に変換される)が気に入らないのですが......?

TimeTradeIfの値が計算値に加算されていることがわかります。 TimeTradeIf に含まれる内容を正確に伝え、示したのは誰ですか?

それは、その人のコードに問題を探すために、未知で不明瞭な値がたくさんあることを書いたのです。

 
artmedia70:

正解です。

今度は、中括弧を使わないでロジックを作ってみてください。

(a>b)の場合、if (b>c) Alert()の行が実行されます。

それ以外の場合は、(d>e) ならば、(e>f) ならば Alert() の行が実行される。

つまり、elseは一番最初の条件を参照するようにするのです。中括弧なし。


if (a>b)
   if (b>c) Alert(" условие if (a>b && b>c) выполнено ");
   else; 
else 
   if (d>e) 
      if (e>f)Alert(" условие if (d>e && e>f) выполнено");

Takiさんがやってくれたのですが、中括弧がないとロジックを読むのに不便だし、コンパイラもまだ少しこけるし、 ";' - セミコロンが想定外 "

が、a>b を満たさない場合は「(d>e && e>f) が満たされる場合 」という警告が出ます。(もし私がその課題をそう理解していたなら)。


 
Antonius:

こんにちは。

考え方としては、このような日のこのような時間にローソク足が強気であれば売り=真、弱気であれば偽ということです。そして、そのような日のそのような時間に、sell=trueなら売り、その逆なら買いとする。

しかし、この条件はなぜかうまくいかず、すべての取引が売りのために開かれています。M1でテストしています。


私の考えでは、計算はゼロバーの始まりで、オープニングがまだクロージングと等しく、もちろん差は0であるとき、私は前のバーをチェックする必要があります。