감사합니다. 매우 유익한 정보입니다.
이 문서에서 이 코드가 의미하는 바를 이해하려고 노력합니다. 왜 CINDICATOBUFFER 근처에 *가 있는지 그리고 에서 사용하세요.
((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");
자세한 설명을 부탁드립니다.
고마워요
이 문서에서 이 코드가 의미하는 바를 이해하려고 노력합니다. 왜 CINDICATOBUFFER 근처에 *가 있고 at를 사용하는지.
((CIndicatorBuffer*)At(0)).Name("ZIGZAG");
((CIndicatorBuffer*)At(1)).Name("HIGH");
((CIndicatorBuffer*)At(2)).Name("LOW");
자세한 설명을 부탁드립니다.
고마워요
문자열
m_handle=iCustom(기호,마침표,지그재그,깊이,편차_생성,백스텝);
인디케이터의 경로를 찾을 수 없습니다.
여기서 지정하는 올바른 방법은 무엇인가요, 제가 호출하려는 인디케이터는 표준 폴더에 있습니다.
표준 지그재그는 폴더에 있습니다 예제 - 경로에 폴더 이름을 추가해야 합니다.

NULL 입력 - 작동, "EURUSD" 입력 - 작동하지 않음!!!!
bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period, const int depth,const int deviation_create,const int backstep) { //--- 기록 확인 if(!SetSymbolPeriod(symbol,period)) return(false); //--- create //m_handle=iCustom(기호,마침표,"예제\\\지그재그",깊이,편차_생성,백스텝); //m_handle=iCustom("EURUSD",period,"Examples\\\ZigZag",depth,deviation_create,backstep); - 작동하지 않습니다. m_handle=iCustom(NULL,period,"Examples\\ZigZag",depth,deviation_create,backstep); - работает //--- 결과 확인 if(m_handle==INVALID_HANDLE) return(false); //--- 표시기가 성공적으로 생성되었습니다. if(!Initialize(symbol,period,depth,deviation_create,backstep)) { //--- 초기화 오류 IndicatorRelease(m_handle); m_handle=INVALID_HANDLE; return(false); } //--- ok return(true); } IndicatorRelease(m_handle); m_handle=INVALID_HANDLE; return(false); } //--- ok return(true); }
//+------------------------------------------------------------------+ //|| "지그재그" 표시기 만들기| //+------------------------------------------------------------------+ bool CiZigZag::Create(const string symbol,const ENUM_TIMEFRAMES period, const int depth,const int deviation_create,const int backstep) { //--- 기록 확인 if(!SetSymbolPeriod(symbol,period)) return(false); //--- create m_handle=iCustom(symbol,period,"zigzag",depth,deviation_create,backstep); //--- 결과 확인 if(m_handle==INVALID_HANDLE) return(false); //--- 표시기가 성공적으로 생성되었습니다. if(!Initialize(symbol,period,depth,deviation_create,backstep)) { //--- 초기화 오류 IndicatorRelease(m_handle); m_handle=INVALID_HANDLE; return(false); } //--- 확인 return(true); }
bool CiZigZag::Initialize(const string symbol,const ENUM_TIMEFRAMES period, const int depth,const int deviation_init,const int backstep) { if(CreateBuffers(symbol,period,3)) { //--- 렌더링 상태 표시줄 m_name ="ZigZag"; m_status="("+symbol+","+PeriodDescription()+","+ IntegerToString(depth)+","+IntegerToString(deviation_init)+","+ IntegerToString(backstep)+") H="+IntegerToString(m_handle); //--- 설정 저장 m_depth=depth; m_deviation=deviation_init; m_backstep=backstep; //--- 버퍼 생성 ((CIndicatorBuffer*)At(0)).Name("ZIGZAG"); ((CIndicatorBuffer*)At(1)).Name("HIGH"); ((CIndicatorBuffer*)At(2)).Name("LOW"); //--- 확인 return(true); } //--- 오류 return(false); }
인디케이터 버퍼 배열의 인덱싱 방향이 여기에서 어떻게 설정되는지, 즉 ArraySetAsSeries와 동일하게 설정되는지 이해하도록 도와주세요. 기본 방향은 현재에서 과거로이지만 과거에서 현재로 만들어야합니다. 어제부터이 질문으로 어려움을 겪고 있습니다! 도와주세요!
새로운 기고글 MQL5 표준 라이브러리 확장 및 코드 재사용 가 게재되었습니다:
MQL5 표준 라이브러리는 개발자로서의 삶을 더 쉽게 만들어줍니다. 그럼에도 불구하고 전 세계 모든 개발자의 요구 사항을 모두 구현하지는 않으므로 사용자 지정 항목이 더 필요하다고 느끼면 한 단계 더 나아가 확장할 수 있습니다. 이 글은 MetaQuotes의 Zig-Zag 기술 지표를 표준 라이브러리에 통합하는 방법을 안내합니다. 우리는 MetaQuotes의 디자인 철학에서 영감을 얻어 목표를 달성합니다.
간단히 말해서 MQL5 API는 코드 재사용, 안정성, 유연성 및 손쉬운 유지 관리의 이점을 누릴 수 있도록 고안되었습니다. 이것이 이론이 말하는 바이지만, 이 모든 것을 넘어서 MQL5를 계속 발전시키고 다중 통화 Experts Advisors와 같은 보다 정교한 것들을 개발할 계획이라면 먼저 표준 라이브러리 방식으로 코딩할 수 있어야 합니다. 그래야 당신의 앱이 성공적인 삶을 보장할테니까요.
EA와 지표가 점점 더 복잡해짐에 따라 프레임워크 개발과 관련된 개념을 마스터하는 것이 더 필요합니다. 실생활의 예로, 내 프로젝트의 기반을 처음부터 강화해야 할 필요성을 지시하는 복잡한 다중 통화 EA를 개발하는 것이 개인적 필요입니다.
작성자: Jordi Bassaganas