[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 307

 
drknn:

この条件は厳密な論理和ではないので(少なくとも1つの要素が真であれば常に真)、この条件を扱う最も論理的な方法は、まず分子(a>b || c>d )を「a>b」と c>d」の 原子に分割し、原子を順次ループして真偽をチェックすることだろう。そして、次のアトムが真であれば、直ちにループを解除し、プログラムは括弧の直後にあるアクションを行うことができます - つまり、残りのアトムを探索する必要はありませんから。そして、作られた原子のリストの最初から最後までを探しても、最後から最初までを探しても、どちらでも構わないのです。検索方向(メタクオーツ)を表示できるのは、開発者だけです。 しかし、なぜそれが必要なのでしょうか?自分でコンパイラーを書いて いるのですか?
もし、TCロジックの条件 a>bが c>d=trueより はるかに頻繁に真になるなら、プログラムを高速化するために、これら2つの条件の真偽をチェックする順序が重要になるかもしれない、と思いついた。
 
artmedia70:
もし、TCロジックで条件 a>bが c>d==trueより ずっと頻繁に真になるなら、プログラムを高速化するためには、この2つの条件の真偽をどうチェックするかが重要かもしれない、と思いついた。

実際には、次のような式になります:if(a>b || (a<=b && c>d)). 真理値検査を左から右へ行う場合、プログラム速度の観点から式a<=bは 不要になる。正確には、左から右へなのか、その逆なのか、場合によって違うのか、ということでした。
 
AndEv:

実際には、次のような式になります:if(a>b || (a<=b && c>d)). 真理値検査を左から右へ行う場合、プログラムの高速化の観点からa<=bの 式は余計なものとなる。問題は、それが左から右へなのか、その逆なのか、場合によって違うのか、ということだけでした。

EAが注文を開かず、エラーを 書き込む原因について教えてください133
 
paladin80:

ポジションのオープン時間と現在のバーのオープン時間を比較する必要があります Time[0].ポジションを開く時間がバーの開始時間以上である場合、Expert Advisorは新しいポジションを開きません。新しいバーが現れると、Time[0]の値が後の時間に変わり、この比較により、現在の(新しい)バーではまだポジションを開いていないことがわかり、取引ができるようになるのです。

ちなみに、ご質問は2つのサブクエスチョンに分けることもできます。
1.現在のバーでポジションが開かれ、何とか決済されましたが、まだ新しいバーを待っている状態です。
2.現在のバーでポジションを建て、何とか決済した後、同じバーで再びポジションを建てることができます(つまり、一度に1つのバーで1つのポジションを建てることができます)。

例えば、同じバーでポジションを開く条件が数分間真になり、ポジションが開かれます。その後、偽になり、再び真になって2番目のポジションが開かれます。これにどう対処するか?私は、1つのバーに1回ポジションを開くことしか考えていません。 多分他のオプションがあります。
 
デトレンドとは、「おしゃべりをやめる」というようなことでしょうか?
 
GarKain:
数分間、同じバーで注文を開く条件が真になり、注文が開きます。その後、失敗して再び2番目の注文が開きます。どうすればこれに対抗できますか?私は1つのバーに1回だけ注文を開こうとしました 多分他のオプションがあります。

ポジションを開く ことを許可/禁止するフラグを使用しているようですね。フラッグの条件がわからないと、何も言えません。私のEAでは、ポジションを開くために2つのアプローチを使用しており、以下のコードを提供することができます。

if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==Symbol())
         {  if (OrderMagicNumber()==MagNum) // Проверка соответствия позиции по магик-номеру
            {  Closed_bar=OrderOpenTime();
               if (Closed_bar>=iTime(NULL,PERIOD_H1,0))
               return(0);
         }  }
}  }  }
 
moskitman:
デトレンドとは、「おしゃべりをやめる」というようなことでしょうか?

系列にローパスフィルターをかける == トレンド(傾き)成分を差し引く。最も簡単な例:価格にミューイングをかけ、その差を別ウィンドウで表示する。
 
paladin80:

ポジションを開くことを許可/禁止するフラグを使用しているようですね。フラッグの条件がわからないと、何も言えません。私のEAでは、ポジションを開くときに2つのアプローチを使用しており、以下のコードを提供することができます。



if (OrdersTotal()>0)
{  for (i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()==Symbol())
         {  if (OrderMagicNumber()==MagNum) // Проверка соответствия позиции по магик-номеру
            {  Closed_bar=OrderOpenTime();
               if (Closed_bar>=iTime(NULL,PERIOD_H1,0))
               return(0);
         }  }
}  }  }

何がどこでどうなるのか、よく理解できていない。

 
こんな風に書いてもらっています。

というのは、これとあれがあれば、「イコール」なのです。

もしこれが "True "であれば、注文は開始されます。



もし、これとこれを書いたら、オーダーが開く。それで解決するのか?

 
AndEv:
実際には、次のような式になります:if(a>b || (a<=b && c>d)). 真理値検査を左から右へ行う場合、プログラムの高速化の観点からa<=bの 式は余計なものとなる。正確には、左から右へなのか、その逆なのか、場合によって違うのか、ということでした。
その場合、ネストしたifを作成する必要があります。MQL4では、順序が不明確です。MQL5では、当然のように左から右へです。