초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1461

 
Aleksandr Slavskii #:

전문가 조언자가 삭제될 때 주문을 삭제하고 포지션을 청산하도록 전문가 조언자에 규정되어 있는 경우,

모든 주문이 삭제되고 청산됩니다.

약간의 추가 사항: 2.5초가 소요됩니다.

Выполнение функции OnDeinit() ограничивается 2.5 секундами. Если за это время функция не закончила свою работу, то ее выполнение завершается принудительно.
 

어떻게 해야 할지 모르겠어요.

마우스 휠 스크롤 이벤트가 발생하면 코드가 실행됩니다.

마우스 휠은 한 번에 여러 번의 클릭으로 스크롤할 수 있으며, dparam = 클릭 수로 하나의 이벤트가 아니라 dparam = +/-120으로 여러 개의 이벤트가 발생합니다.

이 코드는 마우스 휠을 스크롤할 때 클릭 사이의 시간보다 훨씬 긴 시간 동안 실행됩니다.

결과적으로 아무도 더 이상 마우스 휠을 스크롤하지 않고 프로그램이 더 많은 시간 동안 계속 재계산하는 것으로 나타났습니다.

//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, 0, true);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;

   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      //--- какой то код
      delta += dparam / 120;
      Sleep(1000);
      //---
      Print(delta);
     }
  }
//+------------------------------------------------------------------+
15:12:22.820    test (EURUSD,H1)        0.0
15:12:23.821    test (EURUSD,H1)        1.0
15:12:24.811    test (EURUSD,H1)        2.0
15:12:25.823    test (EURUSD,H1)        3.0
15:12:26.817    test (EURUSD,H1)        4.0
15:12:27.814    test (EURUSD,H1)        5.0
마우스 휠이 15:12:22.820에 스크롤된 후 프로그램이 5초 동안 5번 더 실행되었습니다(
).


질문: 프로그램 코드를 여러 번 실행하지 않고 한 번 실행하는 방법이 궁금합니다.

즉, 휠이 5회 클릭, 델타 = dparam / 120 * 5 동안 스크롤되었습니다.

 
Aleksandr Slavskii #:

어떻게 해야 할지 모르겠어요.

마우스 휠 스크롤 이벤트가 발생하면 코드가 실행됩니다.

마우스 휠은 한 번에 여러 번의 클릭으로 스크롤할 수 있으며, dparam = 클릭 수로 하나의 이벤트가 아니라 dparam = +/-120으로 여러 개의 이벤트가 발생합니다.

이 코드는 마우스 휠을 스크롤할 때 클릭 사이의 시간보다 훨씬 긴 시간 동안 실행됩니다.

결과적으로 아무도 더 이상 마우스 휠을 스크롤하지 않고 프로그램이 더 많은 시간 동안 계속 재계산하는 것으로 나타났습니다.

마우스 휠이 15:12:22.820에 스크롤된 후 프로그램이 5초 동안 5번 더 실행되었습니다(
).


질문: 프로그램 코드를 여러 번 실행하지 않고 한 번만 실행하는 방법을 알려주세요.

즉, 휠이 5회 클릭, 델타 = dparam / 120 * 5 동안 스크롤되었습니다.

이것을 시도하십시오.

//+------------------------------------------------------------------+
void OnInit()
  {
   ChartSetInteger(0, CHART_EVENT_MOUSE_WHEEL, 0, true);
  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;
   bool flag = true;
   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      //--- какой то код
      delta += dparam / 120;
      Sleep(1000);
      //---
      if(flag)
       {
        Print(delta);
        flag = false;
       }
     }
  }
//+------------------------------------------------------------------+

나는 그것을 확인하지 않았다면 내 잘못이 아니다... )))))) 깃발로 뭔가를해야 할 것 같고... 코드를 사용자 정의 함수에 넣고 거기에서 깃발을 엉망으로 만들어야 할 수도 있습니다.

 
정말 감사합니다!
 

6월 3일에 MT5용 스크립트를 게시했습니다(https://www.mql5.com/ru/code/44732).... 아직 " 운영자 확인 중" 상태입니다 . 확인을 얼마나 기다려야 하나요?

Скачать бесплатно скрипт 'Quick Change MA (method, period)' от 'NotBuffett' для MetaTrader 5 в MQL5 Code Base
  • www.mql5.com
Скачать бесплатно скрипт 'Quick Change MA (method, period)' от 'NotBuffett' для MetaTrader 5 в MQL5 Code Base
 
Alexey Viktorov #:

이렇게 해보세요.

제 잘못이 아니라면 확인을 안 했네요... )))))) 어떻게든 플래그를 엉망으로 만들어야겠군요... 코드를 사용자 정의 함수에 넣고 거기서 플래그를 엉망으로 만들어야 할지도 모르겠습니다.

문제는 사용자 정의 함수는 이벤트 함수 내에서만 실행되며 내 EA에는 이러한 함수가 OnInit 및 OnChartEvent 두 개만 있다는 것입니다.

일반적으로 에이스는 아니지만 그래도 이전보다는 나아졌습니다.

//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long & lparam, const double & dparam, const string & sparam)
  {
   static double delta = 0;
   static ulong timeWheel = 0;
   static bool mouse_wheel = false;

   if(id == CHARTEVENT_MOUSE_WHEEL)
     {
      delta += dparam / 120;
      mouse_wheel = true;
      timeWheel = GetMicrosecondCount();
     }

   if(mouse_wheel && GetMicrosecondCount() - timeWheel > 0)
     {
      Print(delta);
      //--- какой то код
      Sleep(1000);
      //---
      delta = 0;
      mouse_wheel = false;
     }
  }
//+------------------------------------------------------------------+
23:48:28.853    test (EURUSD,H1)        1.0
23:48:29.857    test (EURUSD,H1)        1.0
23:48:30.856    test (EURUSD,H1)        4.0
23:48:31.881    test (EURUSD,H1)        2.0
23:48:32.880    test (EURUSD,H1)        4.0
23:48:33.887    test (EURUSD,H1)        11.0
23:48:34.914    test (EURUSD,H1)        15.0
23:48:35.926    test (EURUSD,H1)        7.0
23:48:36.936    test (EURUSD,H1)        9.0
23:48:46.477    test (EURUSD,H1)        6.0
23:48:47.479    test (EURUSD,H1)        -1.0
 
Aleksandr Slavskii #:

문제는 사용자 지정 함수가 이벤트 함수 내에서만 실행된다는 점인데, 제 EA에는 이러한 함수가 OnInit과 OnChartEvent 두 개만 있습니다.

일반적으로 좋은 아이디어는 아니지만 그래도 그보다는 낫습니다.

OnChartEvent에서 사용자 정의 함수를 문제없이 호출 할 수도 있습니다.

플래그는 글로벌 수준에서 선언됩니다. 플래그를 재설정하기 위해서만 OnTick을 삽입하는 것은 문제가 되지 않으며 코드 실행을 지연시키지 않습니다.

플래그가 열려 있으면 사용자 정의 함수가 호출됩니다. 내부적으로 플래그는 닫혀 있습니다. OnTick에서는 플래그가 다시 열리고 사용자 함수의 다음 실행을 기다립니다.

실행 시간에 얽매이는 것보다 더 쉽다고 생각합니다.

 
Alexey Viktorov #:

온차트이벤트에서도 사용자 지정 함수를 호출할 수 있습니다.

플래그는 전역 수준에서 선언됩니다. 플래그를 재설정하기 위해서만 OnTick을 삽입해도 문제가 되지 않으며 코드 실행이 지연되지 않습니다.

플래그가 열려 있으면 사용자 정의 함수가 호출됩니다. 내부적으로는 플래그가 닫혀 있습니다. OnTick에서는 플래그가 다시 열리고 사용자 함수의 다음 실행을 기다립니다.

실행 시간에 얽매이는 것보다 더 쉽다고 생각합니다.

나는 그것을 잘 이해하지 못하거나 오히려 전혀 이해하지 못합니다 :)

그리고 틱이 없으면 OnTick이 작동하지 않는다면 어떻게 해야 하나요?


사실 저는 어쨌든 OnChartEvent에서 사용자 정의 함수를 호출합니다. 휠을 스크롤할 때 마지막 마우스 클릭을 추적하는 것이 문제였습니다.

스크롤하는 동안 클릭 횟수를 계산하면서 휠 스크롤을 멈추는 순간까지 사용자 지정 함수의 실행을 지연시키는 것이 작업이었습니다.

원칙적으로는 효과가 있었습니다.

 
NotBuffett #:

6월 3일에 MT5용 스크립트를 게시했습니다(https://www.mql5.com/ru/code/44732).... 아직 " 운영자 확인 중" 상태입니다 . 확인을 얼마나 기다려야 하나요?

방금 코드를 게시했습니다. 확인은 1분도 채 걸리지 않았습니다.

게시하는 동안 실수를 했을 가능성이 높습니다.

 
Aleksandr Slavskii #:

방금 코드를 게시했습니다. 확인하는 데 1분도 채 걸리지 않았습니다.

게시할 때 실수했을 가능성이 높습니다.

다시 게시를 시도했는데... 똑같습니다:

"5. 테스트" 아래에 다음과 같이 표시됩니다."테스트가 오류 없이 완료되었습니다" 라고 표시되고 게시를 제안하지만 "게시" 버튼을 클릭하면 오류가 발생합니다.

404. 이 페이지가 존재하지 않습니다.

"내 코드" 하위 섹션에는 이제 두 개의 코드가 있으며 두 코드 모두 "중재자가 확인함"이라고 표시됩니다.

일반적으로 일반 스레드에서 질문하면 운영자가 여전히 알아차릴 수 있습니다.

사유: