포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 846

 
Pokrov :

함수 뒤에 GetLastError를 작성했는데 오류가 발생하면 이 블록(기록된 대로)으로 이동하지 않고 명령이 실행되지 않습니까? 내가 이해하는 것처럼 체인, 예를 들어 OrderSend() -> GetLastError -> 오류 블록 Sleep(3000) RefreshRates() -> 블록에서 종료하고 조건이 남아 있으면 OrderSend() 요청이 다시 진행됩니다. 또는 내 추론과 표현이 정확하지 않습니다. 나는 당신이 내가 블록에 반환 값 1 또는 0을 쓸 것을 제안한다는 것을 이해하지만, 내가 올바르게 이해한다면 반환 값은 다음과 같아야 합니다. 돌아왔다.

오류가 발생한 경우 거래 시도 횟수에 대한 주기를 만듭니다. 거래 환경을 업데이트하십시오. 이전 오류의 값을 재설정하고 반환된 결과에 대한 확인과 함께 거래 요청을 보냅니다. 오류를 반환하면 오류를 분석하고 오류 코드에 따라 루프를 완전히 중단하거나 필요한 단계를 수행하여 오류를 제거하고 루프의 다음 반복으로 진행합니다. 거래 작업이 성공적이면 루프를 끊고 거래 요청의 결과 (함수 실행 성공 플래그 또는 오픈 주문의 티켓 번호, 등.).
 
Pokrov :

함수 뒤에 GetLastError를 작성했는데 오류가 발생하면 이 블록(기록된 대로)으로 이동하지 않고 명령이 실행되지 않습니까? 내가 이해하는 것처럼 체인, 예를 들어 OrderSend() -> GetLastError -> 오류 블록 Sleep(3000) RefreshRates() -> 블록에서 종료하고 조건이 남아 있으면 OrderSend() 요청이 다시 진행됩니다. 또는 내 추론과 표현이 정확하지 않습니다. 나는 당신이 내가 블록에 반환 값 1 또는 0을 쓸 것을 제안한다는 것을 이해하지만, 내가 올바르게 이해한다면 반환 값은 다음과 같아야 합니다. 돌아왔다.

나는 또한 귀하의 예에서 오류를 수신한 후 아무런 반응이 없다고 덧붙일 것입니다. 확인된 항목, 확인되지 않은 항목, 잠자기로 결정하거나 데이터를 업데이트한 점을 제외하고. OnTick() 함수가 완료되면 종료하십시오.
 
안녕하세요!

조언이 필요합니다. 조건에 따라 해당 위치를 닫고 121초 후에 새 위치를 열어야 합니다. Sleep (121000)으로 어떻게 하나요?

 if (GetProfitOpenHigestInPoint( NULL ,OP_BUY,magic) > PiespieduClose* 10 )
{
ClosePosWithMaxProfitInCurrency( NULL ,OP_BUY,magic);
Sleep ( 121000 );
OpenPosition( NULL , OP_BUY, LotSize(), 0 , 0 ,magic); 
}
 
abeiks :
안녕하세요!

조언이 필요합니다. 조건에 따라 해당 위치를 닫고 121초 후에 새 위치를 열어야 합니다. Sleep(121000)으로 어떻게 하나요?

구출에 OnTimer()
 
artmedia70 :
OnTimer() 구조
고맙습니다! OnTimer()는 사용된 적이 없습니다. 이 코드 조각은 void OnTick()에 있습니다. 그러면 OpenPosition 함수가 나타납니다(OnTimer()에 의해 처리됩니까? 가능하다면 OnTimer()를 거기에 올바르게 삽입하는 방법을 코드를 수정하십시오..
 void OnTick ()
{
...

if (GetProfitOpenHigestInPoint( NULL ,OP_BUY,magic) > PiespieduClose* 10 )
{
ClosePosWithMaxProfitInCurrency( NULL ,OP_BUY,magic);
EventSetTimer(121); 
OpenPosition( NULL , OP_BUY, LotSize(), 0 , 0 ,magic); 
}

...   
}
 

사람들이 Mt4를 설치하고 싶어 윈도우 7을 다시 설치했는데 문제는 파일이 다운로드되지 않는데 어떻게 해야 하나요?

 
Alexey와 Artem, 자격을 갖춘 의견과 조언에 감사드립니다!
 
abeiks :
고맙습니다! OnTimer()는 사용된 적이 없습니다. 이 코드 조각은 void OnTick()에 있습니다. 그러면 OpenPosition 함수가 나타납니다(OnTimer()에 의해 처리됩니까? 가능하다면 OnTimer()를 거기에 올바르게 삽입하는 방법을 코드를 수정하십시오..

타이머는 OnInit()에서 시작됩니다.

 EventSetTimer ( 1 ); // раз в секунду

카운트다운을 시작하려면 타이머에서 마지막 위치의 종료 시간을 찾아 이 시간부터 121초를 계산해야 합니다. 새 위치를 열 수 있도록 하는 플래그를 전달하려면 범위가 전체 프로그램으로 확장되는 전역 변수 를 사용하십시오. 처음에 121보다 큰 값을 포함하도록 만들 수 있습니다(예: 122)(대기 시간은 설정에서 변경할 수 있음).

OnTick()에서 이 변수를 확인하십시오. 121보다 크고 포지션이 없으면 - 포지션을 오픈 - 오픈 성공을 확인한 후 변수를 0으로 재설정합니다.

포지션이 종료되자마자 타이머는 종료 시간을 확인하고(1초에 한 번 지속적으로 수행) 현재 시간에서 포지션 종료 시간까지 121초 미만이 경과하면 시간 카운트가 시작됩니다. 값을 1씩 가변적으로 더합니다.

다소 이렇습니다. 버그가 있는 곳 - 포지션이 아직 마감되지 않은 경우 마감 시간은 0입니다. 카운트다운 시작에 문제가 발생할 수 있습니다. 예를 들어 변수를 -1로 재설정할 수 있습니다.

예, OnDeinit()에서 타이머를 삭제하는 것을 잊지 마십시오.

 //+------------------------------------------------------------------+
   void OnDeinit ( const int reason) { EventKillTimer ();}
//+------------------------------------------------------------------+
 
artmedia70 :

타이머는 OnInit()에서 시작됩니다.

카운트다운을 시작하려면 타이머에서 마지막 위치의 종료 시간을 찾아 이 시간부터 121초를 계산해야 합니다. 새 위치를 열 수 있도록 하는 플래그를 전달하려면 범위가 전체 프로그램으로 확장되는 전역 변수를 사용하십시오. 처음에 121보다 큰 값을 포함하도록 만들 수 있습니다(예: 122)(대기 시간은 설정에서 변경할 수 있음).

OnTick()에서 이 변수를 확인하십시오. 121보다 크고 포지션이 없으면 - 포지션을 오픈 - 오픈 성공을 확인한 후 변수를 0으로 재설정합니다.

포지션이 종료되자마자 타이머는 종료 시간을 확인하고(1초에 한 번 지속적으로 수행) 현재 시간에서 포지션 종료 시간까지 121초 미만이 경과하면 시간 카운트가 시작됩니다. 값을 1씩 가변적으로 더합니다.

다소 이렇습니다. 버그가 있는 곳 - 포지션이 아직 마감되지 않은 경우 마감 시간은 0입니다. 카운트다운 시작에 문제가 발생할 수 있습니다. 예를 들어 변수를 -1로 재설정할 수 있습니다.

예, OnDeinit()에서 타이머를 삭제하는 것을 잊지 마십시오.

알았어 고마워. 한 줄로 하고 싶었지만 작업하는 데 시간이 더 오래 걸릴 것 같습니다.

 
abeiks :

알았어 고마워. 한 줄로 하고 싶었지만 작업하는 데 시간이 더 오래 걸릴 것 같습니다.