라이브러리: 전문가 - 페이지 8

 
Stanislav Korotky:

여전히 이해가 되지 않는 것은, 왜 상수 이름인 Expert.mqh.tpl이 템플릿을 생성하는 프로그램의 이름을 딴 템플릿보다 더 "실용적"(실용적?)인가요? bibla를 사용하는 프로그램 A.mq5와 B.mq5가 있다고 가정해 봅시다. 각각의 이름을 가진 템플릿을 생성하면 첫째, 각 프로그램의 마지막 '지문'을 다른 프로그램으로 덮어쓰는 대신 사용할 수 있어 더 실용적일 것입니다. 둘째, 이름으로 생성자가 누구인지 즉시 확인할 수 있습니다(특히 외국 프로그램인 경우 유용합니다). 이제는 Expert.mqh.tpl 파일에 들어가기 전까지는 알 수 없습니다. 제가 제시한 보편적인 해결책은 MQL-프로그램+타임스탬프+랜덤의 이름을 사용하는 것입니다. 그리고 파일을 동기화 = 참으로 남겨 둘 필요가 없다고 생각합니다. 나는 모든 것이 오래 전에 테스트되고 디버깅되었다고 생각합니다. 오류가 발생하고 디버깅이 필요한 경우 sync = false 옵션이 있습니다. 그런 다음 파일을 남겨 두어야합니다. 모든 것이 논리적이라고 생각합니다. 그리고 편집은 간단합니다.

나는 누군가가 여러 프로그램에서 비블리오를 병렬로 사용하지 않는 한 실제로 충돌이 거의 발생하지 않을 수 있다는 데 동의합니다. 나는 그것을 가지고 있지 않지만 방금 코드를 잠깐 살펴 보았고 파일 폴더의 Expert.mqh.tpl에 눈이 꽂혔습니다. 모든 것이 순전히 임호입니다.

파일을 삭제하고 싶지 않았기 때문에 실제로 작업의 안정성을 고려하여 일반적인 이름 하나면 충분하다고 생각했습니다.

파일 폴더에서 tpl 파일의 동물원을 보고 싶지 않았습니다. 의도적으로 무언가를 삭제하는 것도 마찬가지입니다. 여기만 삭제했습니다.

Возможность вызова DLL в Маркет-продуктах.
Возможность вызова DLL в Маркет-продуктах.
  • 2019.07.20
  • www.mql5.com
Возможно написание EX5 с вызовом DLL, который пройдет все проверки Маркета и будет там опубликован.В прицепе такой EX5-скрипт. Он запускает указанные приложения/документы.В прицепе еще один вариант
 
Vitaly Muzichenko:

다른 이름의 Expert Advisor에 연결하여 .ex4 형식의 Expert Advisor를 실행할 수 있으며 입력 매개 변수를 표시해야 완전히 작업 할 수 있습니다.

"Trade.ex4"라는 이름의 컴파일된 Expert Advisor가 있습니다.

"Hand.ex4"라는 이름의 새 Expert Advisor를 만듭니다.

"Hand.ex4"가 실행되면 "Trade.ex4"가 완전히 작동하고 "Trade.ex4"가 "Hand.ex4"에 포함되도록 결합하는 방법을 알아보세요.

즉, 컴퓨터에는 Hand.ex4 파일만 있지만 업무에서는 Trade.ex4를 사용하는 것입니다.

감사합니다!

해결책을 찾았나요?

 
Vitaly Muzichenko:

"Hand.ex4"가 시작될 때 "Trade.ex4"가 완전히 작동하고 "Trade.ex4"가 "Hand.ex4"에 포함되도록 결합하는 방법

즉, 컴퓨터에는 Hand.ex4 파일 만 있지만 작업에는 Trade.ex4를 사용합니다.

인디케이터와 함께 작동해야 합니다. 전문가 자문은 다른 전문가 자문과 연결되지 않는 것 같습니다.

 
fxsaber:

인디케이터와 함께 작동해야 합니다. 전문가 자문가가 다른 전문가 자문가와 연결되지 않는 것 같습니다.

예, 전문가 조언자를 임베드할 수 없으며 해결책을 찾지 못했습니다.

 
감사합니다!
 
Vitaly Muzichenko:

예, 상담사를 연결할 수 없으며 해결책을 찾지 못했습니다.

해결책이있을 가능성이 높으며 변형 중 하나에서 여기에서 한 번 사용한 것 같습니다. 하지만 어떻게 했는지 완전히 잊어버렸습니다.

Возможность вызова DLL в Маркет-продуктах.
Возможность вызова DLL в Маркет-продуктах.
  • 2019.07.20
  • www.mql5.com
Возможно написание EX5 с вызовом DLL, который пройдет все проверки Маркета и будет там опубликован.В прицепе такой EX5-скрипт. Он запускает указанные приложения/документы.В прицепе еще один вариант
 
fxsaber:

아마 해결책이 있을 것이고, 여기 변형 중 하나에서 한 번 사용한 적이 있는 것 같습니다. 하지만 어떻게 했는지 까맣게 잊어버렸습니다.

여기 내가 시도했을 때 나는 단 하나의 방법을 찾지 못했습니다. 그것은 4 용이었고 5에서는 시도하지 않았습니다.

 

트레이딩, 자동매매 시스템 및 테스트 트레이딩 전략에 관한 포럼

mql5 언어의 특성, 미묘함 및 작업 기술

fxsaber, 2020.05.21 09:13

#include <fxsaber\Expert.mqh> // https://www.mql5.com/ko/code/19003

// 계정 변경 후 심볼이 없으면 자동으로 언로드됩니다.
void OnDeinit( const int Reason )
{
  if (Reason == REASON_ACCOUNT)
  {
    MqlTick Tick;
    
    if (!SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM) && !SymbolInfoTick(_Symbol, Tick))
    {
      Alert("Account is changed!");
      
      if (EXPERT::Remove())
        Alert("Expert is removed!");
      
      // ExpertRemove(); // 도움이 되지 않습니다.
      // ChartClose(); // 최선의 해결책은 아닙니다.
    }
// else
      // 사용자 정의 및 기타 경우에는 다음 솔루션으로 코드를 보강하세요.
      // https://www.mql5.com/ru/forum/170952/page175#comment_16365819 
  }  
}
 
fxsaber:
멋진 라이브러리입니다! 이런 식으로 Expert Advisor 오픈을 구현할 줄은 몰랐네요. dll을 사용하지 않고 mql을 사용하여 활성 차트를 정의하는 방법을 알려주실 수 있나요? winapi로 작업을 해봤는데 너무 번거로운 것으로 판명되었습니다:
long                          Agent::ChartGetActiveID()
  {
   static long                terminal_wnd = ChartGetInteger(0,CHART_IS_DOCKED) ?
                              GetAncestor(ChartGetInteger(0, CHART_WINDOW_HANDLE), 2) :
                              GetParent(GetAncestor(ChartGetInteger(0, CHART_WINDOW_HANDLE), 2));

   static uint                process_id = 0;
   static uint                thread_id = GetWindowThreadProcessId(terminal_wnd, process_id);
   static long                mdi_wnd = GetDlgItem(terminal_wnd, 0xE900);
   static GUITHREADINFO       thread_info;


   thread_info.cbSize = sizeof(GUITHREADINFO);
   if(!GetGUIThreadInfo(thread_id, thread_info))
      return -1;

   long wnd_on_focus = 0, chart_id = -1;
   if(GetDlgItem(thread_info.hwndActive, 0xE900)== mdi_wnd)
      wnd_on_focus = GetWindow(SendMessageW(mdi_wnd, 0x0229, 0, 0), 5);
   else
      wnd_on_focus = GetWindow(thread_info.hwndActive, 5);

   for(long ch_id = ChartFirst(); ch_id != -1; ch_id = ChartNext(ch_id))
      if(ChartGetInteger(ch_id, CHART_WINDOW_HANDLE)==wnd_on_focus)
        {
         chart_id = ch_id;
         break;
        }
   return chart_id;
  }

이 경우를 mql 또는 적어도 dll로 구현하는 방법을 알고 있지만 더 간단 할 수 있습니까?

 
vek_y4icb:
dll을 사용하지 않고 mql 도구를 사용하여 활성 차트를 정의하는 방법에 대한 질문이 있습니다.

정확히 기억이 나지 않습니다. 이 문제는 해결되었다고 생각합니다. 아마도 검색이 도움이 될 것입니다.