기고글 토론 "6 단계로 나만의 거래 로봇을 만드세요!"

 

새로운 기고글 6 단계로 나만의 거래 로봇을 만드세요! 가 게재되었습니다:

거래 클래스가 어떻게 구성되는지 모르고 "객체 지향 프로그래밍" 이라는 단어가 두렵다면 이 글이 당신에게 딱입니다. 사실, 거래 신호 모듈을 작성하기 위해 세부 사항을 알 필요가 없습니다. 몇 가지 간단한 규칙을 따르십시오. 나머지는 모두 MQL5 마법사가 수행하고 즉시 사용 가능한 거래 로봇을 얻게 됩니다!

사실, MQL5 마법사는 Expert Advisors 생성을 크게 단순화하지만 먼저 입력으로 사용할 내용을 알아야 합니다. MQL5 마법사를 사용하여 Expert Advisor를 자동으로 만들려면 해당 구성 요소가 전문가의 기본 클래스 섹션의 5 가지 기본 클래스를 준수하는지 확인합니다

다음은 객체 지향 프로그래밍 (OOP)이라고 하는 "위대하고 끔찍한" 접근 방식의 전체적 힘 (whole force)에 관련된 내용입니다. 그러나 두려워하지 마십시오. 요새는 거의 모든 사람들이 많은 기능을 갖춘 휴대폰을 가지고 있으나, 대부분의 사람들은 그 작동 방식을 거의 모르니까요. 이 모든 것을 공부할 필요는 없습니다. CExpertSignal 클래스의 일부 기능만 설명하겠습니다.


이 글에서는 거래 신호 모듈을 만드는 단계를 살펴보고 OOP 나 클래스를 듣지 않고도 이를 수행하는 방법을 살펴볼 것입니다. 하지만 원한다면 조금 더 나아갈 수 있습니다.

작성자: MetaQuotes

 
거래 로봇은 마우스 클릭 5번으로 생성되며 оптимизации параметров 거래 시스템 테스터에서 테스트할 수 있고 결과 로봇을 계좌에 넣어 거래할 수 있으며 파일로 아무것도 수정할 필요가 없습니다.
이러한 로봇을 거래할 수 있나요? 결국 거래 클래스 라이브러리에는 실제 거래는 말할 것도없고 챔피언십에서도 필요한 조건이었던 다양한 오류 처리가 포함되어 있지 않습니다. 테스터에서 아이디어를 빠르게 확인하기 위해 5 번의 클릭만으로 전문가 조언자를 만들 수 있다고 쓰는 것이 더 정확하지만 그러한 전문가 조언자는 거래에 적합하지 않습니다.
 
수고해주셔서 감사합니다! 그리고 상자와 큐브가 있는 사진도 감사합니다! 체계화 :-)
 

계속하려면...

이 예제의 줄을 변환하면 어떨까 생각했습니다:

if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)

if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)

알고리즘을 살펴봅시다:

1) 두 개의 배열:

첫 번째 배열은 m_method_fast와 m_method_slow를 포함합니다.

두 번째 배열에는 ENUM_MA_METHOD 열 거값이 포함됩니다.

2) 루프에서 첫 번째 배열의 값을 가져와 두 번째 배열에 있는지 확인합니다.

이를 구현하는 방법을 알려주실 수 있나요?

나는 연결이 필요하다는 것을 이해합니다 CArray . 그러나 어떤 유형입니까?

기본 기본 사항과 구문으로 아직 파악할 수 없기 때문에 코드의 일부를 작성할 수있는 사람은 누구입니까?

고마워요!

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Методы скользящих - Документация по MQL5
 
bivmail:

계속하려면...

이 예제의 줄을 변환하면 어떨까 생각했습니다:

if(m_method_fast!=MODE_SMA && m_method_fast!=MODE_EMA && m_method_fast!=MODE_SMMA && m_method_fast!=MODE_LWMA)

if(m_method_slow!=MODE_SMA && m_method_slow!=MODE_EMA && m_method_slow!=MODE_SMMA && m_method_slow!=MODE_LWMA)

알고리즘을 살펴봅시다:

1) 두 개의 배열:

첫 번째 배열은 m_method_fast와 m_method_slow를 포함합니다.

두 번째 배열에는 ENUM_MA_METHOD 열 거값이 포함됩니다.

2) 루프에서 첫 번째 배열의 값을 가져와 두 번째 배열에 있는지 확인합니다.

이를 구현하는 방법을 알려주실 수 있나요?

나는 연결이 필요하다는 것을 이해합니다 CArray . 그러나 어떤 유형입니까?

기본 기본 사항과 구문으로 아직 잡을 수 없기 때문에 코드의 일부를 작성할 수있는 사람은 누구입니까?

고마워요!

이렇게:

func(int& array1[],int& array2[])
  {
   int total1=ArraySize(array1);
   int total2=ArraySize(array2);
//---
   for(int i=0;i<total1;i++)
     {
      for(int j=0;j<total2;j++)
        {
         if(array1[i]==array2[j])
           {
            // 찾았습니다
           }
        }
     }
  }
 

예, 초보자를 위한 C++에서 이미 이 지점에 도달했습니다 :-)

ENUM_MA_METHOD라는 데이터 유형이 없다는 점을 제외하면요.

이 열거형이 어떤 데이터 유형으로 구성되어 있는지 어떻게 알 수 있나요? ENUM_MA_METHOD 열거형 자체를 반복할 수 있나요?

이제 두 가지 방법이 보입니다:

//두 배열을 모두 설명하는 첫 번째 방법

  ENUM_MA_METHOD l_array_enum_ma_method[3];

  l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

  print("array size %d", ArraySize(l_array_enum_ma_method));

  print("ENUM_MA_METHOD size %d", ArraySize(ENUM_MA_METHOD));

  

   ENUM_MA_METHOD l_array_select_method[1];

   l_array_select_method[0]=m_MethodFast;

   l_array_select_method[1]=m_MethodSlow;

   //더 나아가 계획에 따라

   

   //두 번째 방법, 라이브러리 연결

   //#include <Arrays\ArrayInt.mqh>

     CArrayInt *l_array_enum_ma_method=new CArrayInt;

   l_array_enum_ma_method[0]=MODE_SMA;

  l_array_enum_ma_method[1]=MODE_EMA;

  l_array_enum_ma_method[2]=MODE_SMMA;

  l_array_enum_ma_method[3]=MODE_LWMA;

   l_array_enum_ma_method.Sort();

   //--- 검색 요소

   if(l_array_enum_ma_method.Search(m_MethodFast)!=-1) printf("Element found");

   else                        printf("Element not found");

   //--- 배열 삭제

   delete l_array_enum_ma_method;

두 번째 방법에서는 특정 유형의 라이브러리를 연결해야하며 ENUM_MA_METHOD는 어떤 유형입니까?

흠... 이상하게도 답장을 클릭했는데 새 게시물로 밝혀졌습니다....

 
코드를 올바르게 삽입하는 방법을 참조하세요.
 
bivmail:

예, 초보자를 위한 C++에서 이미 이 지점에 도달했습니다 :-)

ENUM_MA_METHOD라는 데이터 유형이 없다는 점을 제외하면요.

이 열거형이 어떤 데이터 유형으로 구성되어 있는지 어떻게 알 수 있나요? ENUM_MA_METHOD 열거형 자체를 반복할 수 있나요?

이제 두 가지 방법이 보입니다:

두 번째 방법에서는 특정 유형의 라이브러리를 연결해야하며 ENUM_MA_METHOD는 어떤 유형입니까?

흠... 이상하게도 답장을 클릭했는데 새 게시물로 밝혀졌습니다....

첫 번째 방법:

 ENUM_MA_METHOD l_array_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};
//--- 더 아래로

두 번째 방법:

#include <Arrays\ArrayInt.mqh>

CArrayInt l_array_enum_ma_method;
//---
l_array_enum_ma_method.Add(MODE_SMA);
l_array_enum_ma_method.Add(MODE_EMA);
l_array_enum_ma_method.Add(MODE_SMMA);
l_array_enum_ma_method.Add(MODE_LWMA);
//--- 더 아래로

왜 그렇게 많은 단계가 필요한지 알 수 없습니까?

 

죄송합니다... 감사합니다... 그게 제가 하려는 일입니다... 꺼져 있습니다.

첫 번째 경우에는 이미이 녹음 방법을 보았지만 아직 필요한 것이 무엇인지 아직 깨닫지 못했습니다,

두 번째 경우에는 ArrayInt가 혼란스러웠습니다. Int이기 때문에 숫자 값만 저장되는 줄 알았는데 ,

컴파일러가 MODE_SMA를 숫자로 변환하고 값을 다시 가져올 때 괄호를 사용하여 유형(ENUM_MA_METHOD), 즉 다음과 유사한 유형으로 암시 적 변환을 수행해야하는 것 같습니다.

  ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

추신 세 번째 섹션 3. 매개 변수 설정 방법에서 조기에 선언 된 줄을 지워야한다고 생각합니다
:

 CiCustom          m_fast_ma;        // 표시기를 객체로 표시
   CiCustom          m_slow_ma;        // 표시기를 객체로 표시
 
bivmail:

추신 세 번째 섹션 3. 매개 변수 설정 방법에서 조기에 선언 된 줄을 지워야한다고 생각합니다:

제거되었습니다, 감사합니다.
 

기대가 컸지만 이 문제를 해결할 수 없습니다(comm - 메모리 주소 전송에 대해 읽었지만 그 방법도 작동하지 않았습니다):

컴파일러가 'm_MethodFast' - 상수 표현식 필요, ' m_MethodSlow' - 상수 표현식 필요 오류를 반환합니다.

물론 이것은 초보자를위한 질문입니다. 기사를 막지 않기 위해 다른 스레드에서 그러한 질문을해야할까요?

//두 배열을 모두 설명하는 첫 번째 방법
//int *Finger_m_MethodFast;
//int *Finger_m_MethodSlow;
//Finger_m_MethodFast=&m_MethodFast;
//Finger_m_MethodFast=&m_MethodSlow;
// int l_array1_select_method[]={Finger_m_MethodFast,Finger_m_MethodFast};
   ENUM_MA_METHOD l_array1_select_method[]={m_MethodFast,m_MethodSlow};
   ENUM_MA_METHOD l_array2_enum_ma_method[]={MODE_SMA,MODE_EMA,MODE_SMMA,MODE_LWMA};

   int total_array1=ArraySize(l_array1_select_method);
   int total_array2=ArraySize(l_array2_enum_ma_method);
   bool NoErrorsFlag=false;
   for(int i_array1=0;i_array1<total_array1;i_array1++)
     {

      for(int i_array2=0;i_array2<total_array2;i_array2++)
        {
         if(l_array1_select_method[i_array1]=l_array2_enum_ma_method[i_array2])
           {
            NoErrorsFlag=true;
           }
        }
      if(!NoErrorsFlag)
        {
         PrintFormat("스무딩 유형 %s 이동 평균이 잘못되었습니다!",EnumToString(l_array1_select_method[i_array1]));
        }

     }

   if(!NoErrorsFlag)
     {
      return(false);
     }