複数ペアを使用した場合のEAクラッシュ... - ページ 3

 
ああ、わかりました。

int start()」関数から「If(IsNewCandle())」が呼ばれたときにもオーダーモディファイを呼ぶ必要があったんだ。したがって、毎時の終値で、orderstoploss > iMA-ATR の場合にPENDING オーダーを 修正する "void OrderModify" は、それに応じて修正・調整されます。

というわけで、これでちゃんと仕事してます :)さて、目が血走るまで読むか... :)
 
RaptorUK:

これが問題なのです. (OP_SELLも同様)

エラー1が出るのは、OrderStopLoss() == BuyStopPriceのためで、同じStopLoss値を持つように注文を修正しているため、エラー1になります。

投稿にあるリンクをたどって、目が腫れるほど読みましたか? https://www.mql5.com/en/forum/146380 この問題を無視し続けると、どんどん追い詰められて、時間を浪費することになります。


ゼロを除いては、倍数を等しく比較してはいけない < これは私がWHRoederによって探していたものかもしれない......?
if (a > b)
if (a - b > Point / 2.)
if (a >= b)
if (a - b > -Point)
if (a != b)
if (MathAbs(a - b) > Point / 2.)
 
DomGilberto:

except with zero never compare doubles for equality < WHRoederの探して いたのはこれかも...?
確かにそれはうまくいくでしょう、あなたはなぜ、何が問題であるかを理解していますか?
 
正直言って、よくわからないんです。でも、書き出したり、比較を印刷したりする実験はしてみたんですけどね...。
 
DomGilberto:
正直なところ、よくわからないのですが...。でも、書き出したり、比較を印刷したりすることはやってみたんだけどね。

1.51234000001 と1.51234000002 は同じではありませんが、価格という 観点からはどちらも 1.51234 なので同じです ... つまり、同じですが一方は他方より大きい ということです。 これは浮動小数点数が2進数で表現される方法によるもので、不正確であるため、一般に多少の誤差が生じます。. .

浮動小数点

 

しかし、なぜNormalizedDouble、Digitsはそれを整理しないのでしょうか?なぜ余分な不要な小数点以下が含まれているのでしょうか?定義済みの変数にNormalizeDouble を使用 する必要がないことは理解できますが、定義されていない変数に NormalizeDouble を使用して、決して一致しないのに比較しようとする意味は何でしょうか:s?

不思議ですね。

もし私が「If(Bid > OrderOpenPrice())」と したかったら、それは機能しないのでしょうか?上記のルールを全ての比較文で行う必要があるのでしょうか? 例えば、"If(Bid - OrderOpenPrice() > Point / 2.)" とか?


それと、If(Bid == OrderOpenPrice())ですが、この文で何か必要なことはありますか?

 
DomGilberto:

しかし、なぜNormalizedDouble, Digitsはそれを整理しないのでしょうか?なぜ余分な不要な小数点以下が含まれているのでしょうか?定義済みの変数に NormalizeDouble を使用する必要がないことは理解できますが、定義されていない変数に NormalizeDouble を使用して、決して一致しないのに比較することに何の意味があるのでしょうか:s?

NormalizeDouble は問題を解決しません。1.51234000001 を 1.51234 にするのではなく、異なる方法で「混乱」 させるだけなのです。

DomGilberto:


もし私が「If(Bid > OrderOpenPrice())」と したかったら、それは機能しないのでしょうか?すべての比較ステートメントで、上記のルールを実行する必要があるのでしょうか?

はい、もし比較の結果が正確であることを確認したいのであれば、そうします。

ドン・ジルベルト

それと、If(Bid == OrderOpenPrice())ですが、この文で何か必要なことはありますか?

そう、まったく同じ問題に悩まされることになるのです ... ... 。
 
OKありがとうございます - 私は劇的にOrderModifyエラー1を減らしました - しかし、私はまだ少しを得るために、時々?それはMA_trail voidのように思える?また、「If(Bid == OrderOpenPrice())」はどのように書くのが正しいのでしょうか?
//+----------------------------------------------------------------------------------------------------------------------------------------+  
//Moving Average Trailing Stop Function
//+----------------------------------------------------------------------------------------------------------------------------------------+   
void MA_Trail()

{

   double ATR = iATR(NULL,60,14,1);
   double MA = iMA(NULL,60,MA_Period,0,1,0,1);
   
   double BuyStopPriceMath = MA - ATR;
   double SellStopPriceMath = MA + ATR;
   
   double BuyStopPrice = NormalizeDouble(BuyStopPriceMath,5);
   double SellStopPrice = NormalizeDouble(SellStopPriceMath,5);

   for(int b=OrdersTotal()-1; b>=0; b--)
     {
      if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
         if(OrderMagicNumber()==MagicNumber)
            if(OrderSymbol()==Symbol())
               {

               if(OrderType()==OP_BUY)
                  {
                  if(OrderStopLoss() - BuyStopPrice > Point / 2.) continue;
                  if(BuyStopPrice - OrderStopLoss() > Point / 2.)
                     bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(),0,CLR_NONE);
                   if(!BuyModify)Print(" Buy Trailing Stop Failed: ", GetLastError());
                   }     

    
               if(OrderType()==OP_SELL)
                  {
                  if(SellStopPrice - OrderStopLoss() > Point / 2. ) continue;
                  if(OrderStopLoss() - SellStopPrice > Point / 2. )
                     bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(),0,CLR_NONE);
                  if(!SellModify)Print(" Sell Trailing Stop Failed: ", GetLastError());
                  }
              }   
      }
} 
 
DomGilberto:
OKありがとうございます - 私は劇的にOrderModifyエラー1を減らしました - しかし、私はまだ少しを取得し、時々?MA_trailのvoidが原因みたいですね?また、「If(Bid == OrderOpenPrice())」はどのように書くのが正しいのでしょうか?

あなたの目は十分に出血していない ... ...

こんな感じでいいんじゃないでしょうか。

!( MathAbs(FirstPrice - SecondPrice) > HalfAPoint )

に注意

ここから: https://www.mql5.com/en/forum/136997/page4#781986

 
上記のコードに関連して、あるいは「If(Bid == OrderOpenPrice())」に関連して提案されているのでしょうか?