MT5와 속도 - 페이지 91

 
Anton :

브레이크 ObjectGetInterger - 표준?

 
fxsaber :

브레이크 ObjectGetInterger - 표준?

Get 메서드는 이미 동기식이므로 대기합니다. 개체 작업은 개체 에 대한 직접 액세스가 아니라 특수 명령 대기열을 거칩니다.

정보: Set 및 Get 메서드를 혼합하는 것은 매우 권장되지 않습니다. 많이 쓰고 많이 읽는 것이 좋다. 혹은 그 반대로도.

 
Renat Fatkhullin :

Get 메서드는 이미 동기식이므로 대기합니다. 개체 작업은 개체 에 대한 직접 액세스가 아니라 특수 명령 대기열을 거칩니다.

정보: Set 및 Get 메서드를 혼합하는 것은 매우 권장되지 않습니다. 많이 쓰고 나서 많이 읽는 것이 좋다. 혹은 그 반대로도.

불행히도 이것은 문제입니다. 위의 코드와 함께 표시됩니다.

설명 감사합니다.

 
특정 상황에서 벗어났습니다.

실제 계정 에서 첨부된 스크립트를 실행한 결과입니다.

 2021.03 . 29 17 : 18 : 55.280 TradesID_Example (EURUSD,M1)     HistoryDealsTotal () = 99663
2021.03 . 29 17 : 18 : 55.280 TradesID_Example (EURUSD,M1)     HistoryOrdersTotal () = 174307

2021.03 . 29 17 : 24 : 15.862 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID) = 29906412.60837016
2021.03 . 29 17 : 24 : 15.862 TradesID_Example (EURUSD,M1)     Alert : Bench_Stack = 0 , 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID))] = 320581370 mcs.

2021.03 . 29 17 : 24 : 16.057 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03 . 29 17 : 24 : 16.057 TradesID_Example (EURUSD,M1)     Alert : Bench_Stack = 0 , 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 195526 mcs.
2021.03 . 29 17 : 24 : 16.170 TradesID_Example (EURUSD,M1)    GetSumByPositionsID(PositionsID,GetSumByPositionID2) = 29906412.60837016
2021.03 . 29 17 : 24 : 16.170 TradesID_Example (EURUSD,M1)     Alert : Bench_Stack = 0 , 1 <= Time[GetSumByPositionsID(PositionsID,GetSumByPositionID2))] = 112839 mcs.

라이브러리는 표준 구현보다 ~2500배 빠릅니다. 다른 접근 방식을 통해서만 허용 가능한 시간 내에 일부 계산을 수행할 수 있습니다.

 

터미널이 메모리를 포기하도록 강제하려면 다음 스크립트를 실행할 수 있습니다.

 void OnStart ()
  {
   short arr[];
   ArrayResize (arr, INT_MAX );
   ArrayInitialize (arr, 0 );
   Print ( ArraySize (arr));
   Sleep ( 5000 );
  }

RAM 크기에 따라 어레이의 크기를 선택하십시오.

 
Rorschach :

터미널이 메모리를 포기하도록 강제하려면 다음 스크립트를 실행할 수 있습니다.

RAM 크기에 따라 어레이의 크기를 선택하십시오.

아이디어는 무엇입니까?

 
fxsaber :

아이디어는 무엇입니까?

분명히 터미널 을 메모리 부족 상태에 두려면 릴리스에 대한 내부 메커니즘이 작동합니다.

 
traveller00 :

분명히 터미널 을 메모리 부족 상태에 두려면 릴리스에 대한 내부 메커니즘이 작동합니다.

예, 터미널에 메모리가 충분하지 않고 캐시된 데이터를 플러시하기 시작합니다.

 

비정상적인 상황이 발생했습니다. 표시기 신호를 기반으로 EA는 스크린샷을 찍고 필터가 통과되면 위치를 열거나 닫는 명령을 내립니다.
스크린샷에는 제목에 시간이 포함되어 있습니다(예: CHFJPY_d29_ h10_m24_s17 ) . TimeCurrent() 함수에서 시간을 가져옵니다.

터미널에는 28개의 Expert Advisor 인스턴스가 있었습니다. 어느 순간 44분 동안 단말기가 멈춘 듯 하다가 10시 27분쯤 다시 정상 업무가 시작됐다. 다음은 터미널 자체 로그의 일부입니다.


연결 끊김이 표시되지 않습니다. 거래 내역에서 10:27에 EURUSD에 대한 첫 번째 항목은 10:14에 sl에서 마감됩니다.

다음은 고문의 로그 일부입니다. 보시다시피 상단의 빨간색 프레임은 로그 기록 시간과 스크린샷 제목에 있는 TimeCurrent() 시간이 거의 같습니다.
그리고 더 낮은 프레임에서 그 차이는 이미 30분입니다.


CHFJPY 기호에서 열릴 신호가 있는 하나의 스크린샷이 형성되었습니다. 10:12에 10:24에 신호가 있는 두 번째 스크린샷이 형성되었습니다. 하지만 10시 27분, 1분 만에 오프닝/클로징과 신규 오픈이 이뤄졌다.

일반적으로 이러한 이상함은 9:43에서 10:27로 나타났습니다.
1) TimeCurrent()가 작동하고 현재 서버 시간을 가져오면 EA는 표시기에서 올바른 신호를 수신합니다.
2) 로그 항목은 10:27에만 로그에 들어갔습니다. 스크린샷은 10:27에 Files 폴더의 하드 드라이브에 기록되었으며 10:27에 새 주문이 열렸습니다(오래된 신호에 따라).

누군가가 그러한 정지 또는 제동의 원인이 될 수 있는 것을 발견할 수 있습니까? 프롬프트, 이유를 잡는 기능은? 4월부터 이런 일이 여러 번 있었습니다.

 
Vasiliy Pushkaryov :

프롬프트, 이유를 잡는 기능은?

TimeLocal과 TimeCurrent 간의 불일치를 모니터링합니다.