오류, 버그, 질문 - 페이지 1786

 
fxsaber :
OnCalculate를 OnTick으로 바꾸면 오류가 발생하지 않습니다. 문제는 SymbolInfoTick에 있는 것이 아니라 표시기가 간격이 없도록 비뚤게 구성되어 있다는 사실에 있습니다.
측정은 얼마나 걸렸어요? 그리고 지표를 설정하는 것은 어떻습니까? 현재 틱의 도착 시간은 10, 이전 틱의 도착 시간은 11입니다. 이것은 현재가 아닌 값을 반환하는 함수의 오류입니다. 결국, 시간의 현재 가치는 이전 가치보다 작을 수 없다는 데 동의합니까?
 
Alexey Kozitsyn :
측정은 얼마나 걸렸어요? 그리고 지표를 설정하는 것은 어떻습니까? 현재 틱의 도착 시간은 10, 이전 틱의 도착 시간은 11입니다. 이것은 현재가 아닌 값을 반환하는 함수의 오류입니다. 결국, 시간의 현재 가치는 이전 가치보다 작을 수 없다는 데 동의합니까?

SymbolInfoTick은 Expert Advisors와 지표에서 다르게 작동합니다.

표시기에서 항상 OnCalculate에 대한 호출을 시작한 눈금을 반환합니다. 그리고 지표의 이러한 초기 틱은 건너 뛰지 않아야합니다 - 개발자의 이념. 문제는 이러한 진드기의 대기열 형성에 있습니다.

OnTick의 SymbolInfoTick Expert Advisor에서는 OnTick 실행을 시작한 틱을 반환하지 않고 현재 상태에 대한 본격적인 요청을 합니다.

Si에서 10분 측정.

 
fxsaber :

SymbolInfoTick은 Expert Advisors와 지표에서 다르게 작동합니다.

표시기에서 항상 OnCalculate에 대한 호출을 시작한 눈금을 반환합니다. 그리고 지표의 이러한 초기 틱은 건너 뛰지 않아야합니다 - 개발자의 이념. 문제는 이러한 진드기의 대기열 형성에 있습니다.

OnTick의 SymbolInfoTick Expert Advisor에서는 OnTick 실행을 시작한 틱을 반환하지 않고 현재 상태에 대한 본격적인 요청을 합니다.

따라서 틱 대기열이 비뚤어집니다. 어쨌든 지표의 작업을 이해해야합니다. Expert Advisors와 함께 작업하기 위한 기능 테스트에 중점을 둔 것 같습니다. 이것이 첫 번째입니다. 두 번째 - SymbolInfoTick() 이 동기 함수인지 확신합니까? 셋째, SymbolInfoTick()이 괜찮더라도 CopyTicks()보다 성능이 좋습니다. 종종 더 최신 값을 반환합니다. 요컨대, 내가 말했듯이 진드기에는 많은 오류가 있습니다. 그리고 개발자는 침묵합니다 ...
 
fxsaber :

Si에서 10분 측정.

너무 적습니다. 몇 시간 동안 얼립니다. 여러 악기에.
 
Alexey Kozitsyn :
셋째, SymbolInfoTick()이 괜찮더라도 CopyTicks()보다 성능이 좋습니다. 종종 더 최신 값을 반환합니다.
CopyTicks가 LATER라는 SymbolInfoTick 보다 최신 데이터를 제공하는 상황을 포착했습니다. 따라서 두 가지 기능을 동시에 요청하고 그 중에서 가장 최근의 틱을 선택합니다.
 
fxsaber :
CopyTicks가 LATER라는 SymbolInfoTick보다 최신 데이터를 제공하는 상황을 포착했습니다. 따라서 두 가지 기능을 동시에 요청하고 그 중에서 가장 최근의 틱을 선택합니다.
먼저 SymbolInfoTick() 을 호출 하여 테스트를 수행한 다음 CopyTicks() 를 수행합니다. 어쨌든 이 동작이 옳고 변경할 필요가 없다고 생각하십니까?
 
fxsaber :

SymbolInfoTick은 Expert Advisors와 지표에서 다르게 작동합니다.

표시기에서 항상 OnCalculate에 대한 호출을 시작한 눈금을 반환합니다. 그리고 지표의 이러한 초기 틱은 건너 뛰지 않아야합니다 - 개발자의 이념. 문제는 이러한 진드기의 대기열 형성에 있습니다.

OnTick의 SymbolInfoTick Expert Advisor에서는 OnTick 실행을 시작한 틱을 반환하지 않고 현재 상태에 대한 본격적인 요청을 합니다.

그런 다음 추가하는 것이 논리적입니다.

OnCalculate ( ..., const MqlTick & tick );

특히 비용이 들지 않기 때문에 원인이 된 진드기

그리고 Indicator와 Expert Advisor 모두에서 SymbolInfoTick() 함수 를 본격적으로 만듭니다( OnCalculate 호출이 형성된 순간의 가격이 아닌 현재 가격을 반환) .

 

MT4는 예측 불가능성에 계속 놀라고 있습니다.)) 누가 거래 기능의 구현을 작성합니까?? MT4 빌드 1045

유머러스한 언급으로 시작하겠습니다. Zadornov가 그것을 보낼 때가 되었습니다. 그렇지 않으면 모든 것이 어리석은 미국인에게 달려들 것입니다.

SYMBOL_TRADE_TICK_VALUE

SYMBOL_TRADE_TICK_VALUE_PROFIT

더블

SYMBOL_TRADE_TICK_VALUE_PROFIT

지원되지 않음

더블

SYMBOL_TRADE_TICK_VALUE_LOSS

지원되지 않음

더블


한편 SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)은 값을 제공합니다. 하지만!!!!! 차트에 표시기를 던지면 처음에는 모든 것이 정상일 것입니다. 그리고 터미널을 다시 시작하면 첫 번째 호출에서 이 함수는 tickValue의 결과로 true와 0을 반환합니다!! 그러니 긴장을 늦추지 마십시오. 전문가 개발자 여러분, 모든 것은 직접 확인해야 합니다.

//переводит котировку в цену/1_лот в валюте депозита, например 0.00015 для EURUSD будет равно $15/лот
bool Quote2Price( double diff, double &price4lot, string symbol= "EURUSD" )
  {
   int dig=( int ) MarketInfo (symbol, MODE_DIGITS );
   if (dig == 0 )
       return ( false ); // symbol is none
   double tickSize = MarketInfo (symbol, MODE_TICKSIZE );   // пункт в валюте котировки (0,00001 для EURUSD на 5-знаке)
   //double tickValue = MarketInfo(symbol, MODE_TICKVALUE); // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
   double tickValue;
   if (! SymbolInfoDouble (symbol, SYMBOL_TRADE_TICK_VALUE , tickValue)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
       Print ( __FUNCTION__ , "  SymbolInfoDouble(...) returns false" ); // всегда возвращается true!!
   Print ( "tickSize= " , tickSize, "  tickValue= " , tickValue);
   if (tickValue == 0.0 ) // исключений нет, терминал врет, надо тупо везде проверять на деление на ноль...
       return false ;
   double price=diff/(tickSize/ tickValue ); // а то завалимся c  tickValue == 0
   price4lot= NormalizeDouble (price, 2 );
   return ( true );
  }

산출:

2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0

2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0

2017.02.07 16:08:24.515 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0

2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0

2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: 초기화됨

2017.02.07 16:08:23.002 사용자 지정 표시기 ShowImportantParams EURUSD.e,M15: 성공적으로 로드됨


 
A100 :

그런 다음 추가하는 것이 논리적입니다.

OnCalculate ( ..., const MqlTick & tick );

특히 비용이 들지 않기 때문에 원인이 된 진드기

그리고 Indicator와 Expert Advisor 모두에서 SymbolInfoTick() 함수 를 본격적으로 만듭니다( OnCalculate 호출이 형성된 순간의 가격이 아닌 현재 가격을 반환) .

현재 대기열에 틱 번호를 추가하는 것도 논리적입니다.
 
fxsaber :
현재 대기열에 틱 번호를 추가하는 것도 논리적입니다.
왜 틱 번호가 필요합니까? 올바르게 제공되고 올바르게 수신될 수 있는 올바른 스트림만 있으면 됩니다.