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);
} }
} } }
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);
} }
} } }
この条件は厳密な論理和ではないので(少なくとも1つの要素が真であれば常に真)、この条件を扱う最も論理的な方法は、まず分子(a>b || c>d )を「a>b」と 「 c>d」の 原子に分割し、原子を順次ループして真偽をチェックすることだろう。そして、次のアトムが真であれば、直ちにループを解除し、プログラムは括弧の直後にあるアクションを行うことができます - つまり、残りのアトムを探索する必要はありませんから。そして、作られた原子のリストの最初から最後までを探しても、最後から最初までを探しても、どちらでも構わないのです。検索方向(メタクオーツ)を表示できるのは、開発者だけです。 しかし、なぜそれが必要なのでしょうか?自分でコンパイラーを書いて いるのですか?
もし、TCロジックで条件 a>bが c>d==trueより ずっと頻繁に真になるなら、プログラムを高速化するためには、この2つの条件の真偽をどうチェックするかが重要かもしれない、と思いついた。
実際には、次のような式になります:if(a>b || (a<=b && c>d)). 真理値検査を左から右へ行う場合、プログラム速度の観点から式a<=bは 不要になる。正確には、左から右へなのか、その逆なのか、場合によって違うのか、ということでした。
実際には、次のような式になります:if(a>b || (a<=b && c>d)). 真理値検査を左から右へ行う場合、プログラムの高速化の観点からa<=bの 式は余計なものとなる。問題は、それが左から右へなのか、その逆なのか、場合によって違うのか、ということだけでした。
EAが注文を開かず、エラーを 書き込む原因について教えてください133
ポジションのオープン時間と現在のバーのオープン時間を比較する必要があります Time[0].ポジションを開く時間がバーの開始時間以上である場合、Expert Advisorは新しいポジションを開きません。新しいバーが現れると、Time[0]の値が後の時間に変わり、この比較により、現在の(新しい)バーではまだポジションを開いていないことがわかり、取引ができるようになるのです。
ちなみに、ご質問は2つのサブクエスチョンに分けることもできます。
1.現在のバーでポジションが開かれ、何とか決済されましたが、まだ新しいバーを待っている状態です。
2.現在のバーでポジションを建て、何とか決済した後、同じバーで再びポジションを建てることができます(つまり、一度に1つのバーで1つのポジションを建てることができます)。
数分間、同じバーで注文を開く条件が真になり、注文が開きます。その後、失敗して再び2番目の注文が開きます。どうすればこれに対抗できますか?私は1つのバーに1回だけ注文を開こうとしました 多分他のオプションがあります。
ポジションを開く ことを許可/禁止するフラグを使用しているようですね。フラッグの条件がわからないと、何も言えません。私のEAでは、ポジションを開くために2つのアプローチを使用しており、以下のコードを提供することができます。
デトレンドとは、「おしゃべりをやめる」というようなことでしょうか?
系列にローパスフィルターをかける == トレンド(傾き)成分を差し引く。最も簡単な例:価格にミューイングをかけ、その差を別ウィンドウで表示する。
ポジションを開くことを許可/禁止するフラグを使用しているようですね。フラッグの条件がわからないと、何も言えません。私のEAでは、ポジションを開くときに2つのアプローチを使用しており、以下のコードを提供することができます。
何がどこでどうなるのか、よく理解できていない。
というのは、これとあれがあれば、「イコール」なのです。
もしこれが "True "であれば、注文は開始されます。
もし、これとこれを書いたら、オーダーが開く。それで解決するのか?
実際には、次のような式になります:if(a>b || (a<=b && c>d)). 真理値検査を左から右へ行う場合、プログラムの高速化の観点からa<=bの 式は余計なものとなる。正確には、左から右へなのか、その逆なのか、場合によって違うのか、ということでした。