여러 쌍을 사용할 때 EA 충돌... - 페이지 3

 
아 알았다!

"If(IsNewCandle())"도 호출될 때 "int start()" 함수에서 주문 수정을 호출해야 했습니다. 따라서 매시간 마감 시 orderstoploss > iMA-ATR인 경우 PENDING 주문 을 수정하는 "void OrderModify"가 그에 따라 수정되고 보정됩니다.

그럼 이제 제대로 된 일을 하고 있습니다 :) 이제 눈에서 피가 날 때까지 읽으세요... :)
 
RaptorUK :

이것이 문제입니다. . . (OP_SELL과 유사)

. . . 오류 1이 발생하면 OrderStopLoss() == BuyStopPrice이므로 동일한 StopLoss 값을 갖도록 주문을 수정하고 있으므로 오류 1이 발생하므로 이제 한편으로는 OrderStopLoss() == BuyStopPrice 및 반면에 OrderStopLoss() < BuyStopPrice

게시물의 링크를 따라가서 눈에서 피가 날 때까지 읽었습니까? 나는 당신이하지 않았다 내기. . . https://www.mql5.com/en/forum/146380 이 문제를 계속 무시하면 계속해서 문제가 발생하고 계속 시간을 낭비하게 됩니다. . . 안아줘 이해해줘 더 이상 괴로워하지마 행복해


0을 제외하고 절대 평등에 대해 두 배를 비교하지 않음 < 이것이 내가 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 :

0을 제외하고 절대 평등에 대해 두 배를 비교하지 않음 < 이것이 내가 WHRoeder에서 찾고 있던 것일 수 있습니다...?
확실히 효과가 있습니다. 왜 그리고 문제가 무엇인지 이해하십니까?
 
완벽하게 정직하게 말하면, 아니, 나는 이해하지 못한다. 나는 그것을 쓰고 비교를 인쇄하는 실험을했지만 ...
 
DomGilberto :
완벽하게 정직하게 말하면, 아니, 나는 이해하지 못한다. 나는 그것을 쓰고 비교를 인쇄하는 실험을했지만 ...

1.51234000001은 1.51234000002와 동일하지 않지만 가격 측면에서 보면 둘 다 1.51234이므로 동일합니다. . . 그래서 그들은 동일하지만 하나는 다른 것보다 더 큽니다. 부동 소수점 숫자가 이진법으로 표현되는 방식과 관련이 있으며 정확하지 않으므로 일반적으로 여기 저기에 약간의 오류가 있습니다. . .

이것을 보십시오: 부동 소수점 숫자

 

그러나 왜 NormalizedDouble, Digits가 그것을 정렬하지 않습니까? 불필요한 불필요한 소수 자릿수가 포함된 이유는 무엇입니까? 미리 정의된 변수에 NormalizeDouble을 사용할 필요가 없다는 사실에 감사하지만 미리 정의되지 않은 변수에 NormalizeDouble을 사용하고 일치하지 않을 때 비교하려고 하는 것이 무슨 의미가 있습니까?

이상한!

"If(Bid > OrderOpenPrice())" 를 수행하고 싶다면 작동하지 않을까요? 모든 비교 진술에 대해 위에 언급된 규칙을 수행해야 합니까? 즉 "If(Bid - OrderOpenPrice() > Point / 2.)?


아 그리고 If(Bid == OrderOpenPrice()), 그 진술과 관련하여 내가 해야 할 일이 있습니까?

 
DomGilberto :

그러나 왜 NormalizedDouble, Digits가 그것을 정렬하지 않습니까? 불필요한 불필요한 소수 자릿수가 포함된 이유는 무엇입니까? 미리 정의된 변수에 NormalizeDouble을 사용할 필요가 없다는 사실에 감사하지만 미리 정의되지 않은 변수에 NormalizeDouble을 사용하고 일치하지 않을 때 비교하려고 하는 것이 무슨 의미가 있습니까?

NormalizeDouble은 문제를 해결하지 않으며 1.51234000001을 1.51234로 바꾸지 않고 다른 방식으로 "혼잡"합니다. . . 그래서 그것을 사용함으로써 당신은 그것이 당신의 모든 가치를 같은 방식으로 망칠 수 있기를 바라고 있습니다.

돔길베르토 :


"If(Bid > OrderOpenPrice())" 를 수행하고 싶다면 작동하지 않을까요? 모든 비교 진술에 대해 위에 언급된 규칙을 수행해야 합니까? 즉 "If(Bid - OrderOpenPrice() > Point / 2.)?

예, 비교 결과가 정확한지 확인하고 싶다면 그렇습니다.

돔길베르토 :

아 그리고 If(Bid == OrderOpenPrice()), 그 진술과 관련하여 내가 해야 할 일이 있습니까?

예, 정확히 동일한 문제가 발생합니다. . .
 
좋아, 고마워 - 나는 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 :
좋아, 고마워 - 나는 OrderModify 오류 1을 극적으로 줄였다 - 그러나 나는 여전히 약간씩 계속해서 발생하고 있습니까? MA_trail void인 것 같습니까? 또한 "If(Bid == OrderOpenPrice())를 올바르게 작성하려면 어떻게 해야 합니까?

당신의 눈은 출혈이 충분하지 않습니다. . .

다음과 같이 할 수 있습니다.

!( MathAbs (FirstPrice - SecondPrice) > HalfAPoint )

조심해 !

여기에서: https://www.mql5.com/en/forum/136997/page4#781986

 
위의 코드와 관련하여 또는 "If(Bid == OrderOpenPrice())"와 관련하여 이것을 제안하고 있습니까?