가격 수 != 가격 ? - 페이지 6

 

그것은 내가 벌레의 이중 캔이라고 부르는 것입니다.... (말장난 의도;)

제안된 몇 가지 사용자 정의 기능 중 어느 것도 합의에 도달하지 못한 것 같습니다. 이 시점(말장난 없음)을 공유하고 싶은 사람이 있습니까? 일상적인 CompareDouble 기능으로 사용하는 기능은 무엇입니까?

분명히 우리는 신뢰할 수 있는 시스템을 원한다면 일부 사용자 정의 CompareDouble 함수를 사용해야 합니다.

 

EXACT 값이 중요한 경우가 아니면 대부분 문제를 무시할 수 있습니다.

(비정규화될 수 있는) 트리거 가격 이상 으로 열려고 하는 경우 Bid > trigger를 사용합니다. 반올림으로 인해 가격에서 트리거 되는 경우 정말 신경 쓰지 않습니다.

AT 또는 그 주변 (아마도 비정규화된) 트리거 가격을 열려고 하는 경우 간격을 테스트합니다. Bid > trigger && Bid < trigger+3*pips2dbl. 시장은 한 틱으로 전체 핍을 쉽게 이동할 수 있으므로 Bid == trigger는 항상 잘못되고 MathAbs(bid-trigger) < Point/2는 정확하지만 대부분 작동하지 않을 것입니다.

SL을 옮기려고 하는 것과 같이 같음이 중요하지만 시장에 너무 가깝다면( 정지 수준 ) Bid - newSL > StopLelvel - Point/2를 사용합니다.

 
WHRoeder :

EXACT 값이 중요한 경우가 아니면 대부분 문제를 무시할 수 있습니다.

(비정규화될 수 있는) 트리거 가격 이상 으로 열려고 하는 경우 Bid > trigger를 사용합니다. 반올림으로 인해 가격에서 트리거 되는 경우 정말 신경 쓰지 않습니다.

AT 또는 그 주변 (아마도 비정규화된) 트리거 가격을 열려고 하는 경우 간격을 테스트합니다. Bid > trigger && Bid < trigger+3*pips2dbl. 시장은 한 틱으로 전체 핍을 쉽게 이동할 수 있으므로 Bid == trigger는 항상 잘못되고 MathAbs(bid-trigger) < Point/2는 정확하지만 대부분 작동하지 않을 것입니다.

SL을 이동하려는 경우와 같이 같음이 중요하지만 시장에 너무 가깝고(정지 수준) Bid - newSL > StopLelvel - Point/2를 사용합니다.


감사해요. 이제 그것이 내가 달인 실이라고 부르는 것입니다.

사실 당신이 언급한 내용은 내 애플리케이션에 매우 가깝습니다. 새로운 TakeProfit이 이미 설정되어 전송된 원래 TakeProfit과 다른지(브로커 또는 MQL4 표준에 따라) 확인 중입니다. OrderModify가 호출되기 전에 두 개의 지표 값과 두 개의 TakeProfit 값을 비교하고 있습니다.

 if ( Volume [ 0 ]> 1 ) return ;
 
       for ( int b= OrdersTotal ()- 1 ;b>= 0 ; b--)
       {
       if (atr2kTP == atr2kTPAdjust|| btphold==btp)) return ; //-----------This is where I am comparing them, and where the function would go.
         if ( OrderSelect (b, SELECT_BY_POS , MODE_TRADES ))
           if ( OrderMagicNumber ()==MAGICMA)
             if ( OrderSymbol ()== Symbol ())
                 if ( OrderType ()== OP_BUY )                                  
                  atr2kTPAdjust=atr2kTP; 
                       OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss (),btp, 0 ,CLR_NONE);                          
 
       }              
         for ( int s= OrdersTotal ()- 1 ;s>= 0 ; s--)
         {
           if (atr2kTP == atr2kTPAdjust|| stphold==stp) return ;
           if ( OrderSelect (s, SELECT_BY_POS , MODE_TRADES ))
             if ( OrderMagicNumber ()==MAGICMA)
               if ( OrderSymbol ()== Symbol ())
                   if ( OrderType ()== OP_SELL )                      
                      atr2kTPAdjust=atr2kTP;                      
                         OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss (),stp, 0 ,CLR_NONE);
         }
 }
 

이것은 Double order 값을 비교하기 위해 Point/2 필터를 사용한 최종 OrderMod 코드였습니다. 오류 없이 작업하고 매번 주문을 수정했습니다. 감사해요!

 void AutoAdjustTakeProfit()
{
if ( Volume [ 0 ]> 1 || atr2kTP == atr2kTPAdjust) return ;  

       for ( int b= OrdersTotal ()- 1 ;b>= 0 ; b--)
          { 
             if ( OrderSelect (b, SELECT_BY_POS , MODE_TRADES ))
               if ( OrderMagicNumber ()==MAGICMA)
                 if ( OrderSymbol ()== Symbol ())
                    {          
                       if ( OrderType ()== OP_BUY ) // buy ordeer section
                        {  
                           if ((btphold-btp> Point / 2 ) || (btphold-btp<- Point / 2 ))   //--------------------------This is the DoubleCompare Code
                            {                                                                             
                              atr2kTPAdjust=atr2kTP; 
                               OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss (),btp, 0 ,CLR_NONE);                          
                            }
                        } 
                     
                       if ( OrderType ()== OP_SELL ) // Sell ordeer section
                        {   
                           if ((stphold-stp> Point / 2 ) || (stphold-stp <- Point / 2 )) //--------------------------This is the DoubleCompare Code
                            {                                                  
                               atr2kTPAdjust=atr2kTP;                      
                               OrderModify ( OrderTicket (), OrderOpenPrice (), OrderStopLoss (),stp, 0 ,CLR_NONE);
                            }
                        }
                    }
           }
}
 
  1. if ( Volume [ 0 ]> 1 ) return ;
    새 막대의 시작 부분에서 일부 눈금을 놓치면 코드가 실행되지 않습니다. 항상 시간을 사용
  2.    if ((stphold-stp> Point / 2 ) || (stphold-stp <- Point / 2 ))
       if ( MathAbs (stphold - stp) > Point / 2 ) // Simplified
    다시 말하지만, 당신은 평등에 정말로 관심이 있습니까? 사용한 경우:
       if ( MathAbs (stphold - stp) >= Point )
    포인트보다 약간 작은 지점에서 트리거될 수 있습니다. 그것은 여전히 평등하지 않은 것과 같습니다.
  3. 포인트를 이동하고 핍으로 이동하고 반올림 문제를 피하고 ERR_TOO_FREQUENT_REQUESTS 해야 하는 이유
 

newBar는 잘 작동합니다.

MathAbs는 바위, 방정식의 왼쪽에 있는 음수만 변환한다고 생각했지만, 그 차이도 양수 값으로 변환할 줄은 몰랐습니다.

Point/2 정밀도는 신호 목적에 중요하지 않습니다. 나는 미약한 코딩을 피하기 위해 반올림 오류를 피하고 싶었을 뿐입니다.

나는 반올림 오류뿐만 아니라 주파수 오류를 스톰핑하는 것을 선호합니다. 그래서 가장 정확한 계산 코드 가 아닌 가장 오류가 없는 안정적인 계산을 사용하고 싶습니다.

따라서 TakeProfit MathAbs(stphold - stp) 비교를 2*pips보다 훨씬 더 높임으로써 반올림 오류와 주파수 오류를 제거할 수 있는 가장 큰 기회를 가져야 합니까?

고맙습니다.

removed.

 
moneycode :

newBar는 잘 작동합니다.

이전에 IsNewCandle에서 문제를 발견했기 때문에 Volume 트리거로 전환했습니다. 볼륨 틱 처리가 느리거나 누락될 수 있는 경우 촛불도 마찬가지일 수 있습니다. 그래서 둘 다 잘못된 생각이었다..

newBar가 제대로 작동하기 때문에 이제 아래 코드를 사용하여 IsNewCandle 실패 발생을 식별하려고 했습니다.

IsNewCandle() 함수 호출은 newBar 코드 라인 위의 start() 내부에 있습니다. (가장 낮은 코드 사진 판매) 이 인쇄 테스트는 작동하지 않았고 대신 모든 새 막대에 인쇄되었습니다.

제 생각에는 새로운 바 체크를 함수 에 넣는 것은 나쁜 생각입니다. 함수는 코드를 재사용 가능하게 만드는 데 사용됩니다. . . 새 막대의 동일한 첫 번째 눈금 동안 IsNewCandle()을 두 번 호출하고 어떤 응답을 얻었는지 확인하십시오. . .

그런데 . . . 이것은 이 스레드의 주제가 아닙니다. 토론을 계속하려면 새 스레드로 이동하십시오. 나중에 정리하겠습니다. .

 
WHRoeder :

....가격은 포인트의 배수에 의해서만 변경될 수 있기 때문에 포인트/2는 그냥 ....


가격 을 비교한다면 괜찮습니다. 그러나 두 배를 비교하는 경우(예: 평균 가격) Point/2는 수행하지 않습니다.
 
HarriMQL4 :

가격 을 비교한다면 괜찮습니다. 그러나 두 배를 비교하는 경우(예: 평균 가격) Point/2는 수행하지 않습니다.


이 주제의 제목을 눈치채셨나요?

;)

 
HarriMQL4 :

가격 을 비교한다면 괜찮습니다. 그러나 두 배를 비교하는 경우(예: 평균 가격) Point/2는 수행하지 않습니다.
가격 두 배입니다. . .