기고글 토론 "Expert Advisor 작성시 MQL5 Standard Trade Class 라이브러리 사용"

 

새로운 기고글 Expert Advisor 작성시 MQL5 Standard Trade Class 라이브러리 사용 가 게재되었습니다:

`이 글에서는 거래를 하기 전에 포지션 청산 및 수정, 주문 보류 및 삭제 및 마진 확인을 구현하는 Expert Advisors를 작성하는 데 MQL5 표준 라이브러리 거래 클래스의 주요 함수를 사용하는 방법을 설명합니다. 또한 트레이드 클래스를 사용하여 주문 및 거래 세부 정보를 얻는 방법을 시연했습니다.

지금까지 Expert Advisor 작성시 Trade 클래스 라이브러리를 사용하는 방법을 살펴보았습니다. 다음은 전략 테스터로 Expert Advisor를 테스트하고 성능을 확인하는 것입니다.

EA 코드를 컴파일 한 다음 전략 테스터에로드합니다.

EA 용 보고서 컴파일

       

 그림 3. Expert Advisor 컴파일 보고서 

기본 설정: 이익 실현-270, 손절매-100 및 트레일 포인트 (TP/SL) - 32를 사용하는 GBPUSD 일일 차트에 다음과 같은 결과가 있습니다.

 

그림 4. Expert Advisor 테스트 보고서 - GBPUSD 일일 차트

작성자: Samuel Olowoyo

 

저에게 매우 유용한 기사입니다. 라이브러리를 사용하면 모든 것이 훨씬 쉬워집니다!

개발자에게 요청: High[i] , Low[i]로 작업할 클래스를 작성하세요. Open[i], Close[i]. 이 클래스는 모두에게 유용할 것 같아요! 나는이 문제를 스스로 해결했지만 테스트에 많은 시간이 걸리기 때문에 그것이 올바른지 확실하지 않습니다....

 
시계열 클래스 그룹 섹션을 확인하세요.
 
#include <Indicators\Series.mqh>

double High[];
 CiHigh z;

이 코드에서 오류가 발생하는 이유

'1.mq5' 1.mq5 1 1

'Series.mqh' Series.mqh 1 1

'ArrayObj.mqh' ArrayObj.mqh 1 1

'Array.mqh' Array.mqh 1 1

'Object.mqh' Object.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

'ArrayDouble.mqh' ArrayDouble.mqh 1 1

'CiHigh' - 타입이 없는 선언 1.mq5 12 2

1 오류(들), 0 경고(들) 2 1

모든 예제에서 타입을 선언할 필요가 없습니다...

얻는 방법을 작성하는 것이 어렵지 않은 경우

Print High[2]를 예로 들 수 있습니다.

 
dimeon:

이 코드에서 오류가 발생하는 이유


모든 예제에서 유형을 선언 할 필요는 없습니다...

어렵지 않다면 다음과 같이 작성하십시오.

Print High[2]를 예로 들어 보겠습니다.

문서에 잘못된 인쇄가 있습니다. 이 클래스는 TimeSeries.mqh 파일에 있습니다.

사용 예(스크립트는 현재 차트의 마지막 세 개의 고점을 인쇄합니다):

#include <Indicators\TimeSeries.mqh>
//+------------------------------------------------------------------+
//| 스크립트 프로그램 시작 기능|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   double High[];
   CiHigh z;
   int count=3;
   if(z.Create(_Symbol,_Period)==true)
     {
      if(z.GetData(0,count,High)==count)
        {
         for(int i=0; i<count; i++) Print(i,"=",High[i]);
        }
      else
         Print("검색에 실패했습니다.",count,"시계열 데이터.");
     }
   else Print("시계열을 만드는 동안 오류가 발생했습니다.");
  }
//+------------------------------------------------------------------+
 
Quantum:

문서에 잘못 인쇄된 부분이 있습니다. 이 클래스는 TimeSeries.mqh 파일에 있습니다.

사용 예(스크립트는 현재 차트의 마지막 세 개의 고점을 출력합니다):

정말 감사합니다! 정말 고생을 많이 했어요!
 

나는 모든 사람이 자신과 자신의 필요를 위해 프로그래밍한다는 것을 이해하지만 기본적으로 모두 기능보다 하나의 메소드와 설명 부분으로 구성되어 있고 일반적으로 특정 악기에 대한 모든 시계열이 필요하기 때문에 기본적으로 시계열 클래스 그룹을 좋아하지 않으며, 필요한 악기에 대한 모든 시계열이있는 하나의 클래스를 만들었고, 대략 다음과 같이 역사가 펌핑되는 메소드에서:

struct str_bars{
   datetime    time[];     // 현재 차트의 각 막대의 시작 시간을 포함하는 시계열 배열
   double      open[];     // 현재 차트의 각 막대의 시가를 포함하는 시계열 배열입니다.
   double      close[];    // 현재 차트의 각 막대 종가를 포함하는 시계열 배열입니다.
   double      high[];     // 현재 차트의 각 막대의 최대 가격이 포함된 시계열 배열입니다.
   double      low[];      // 현재 차트의 각 막대의 최소 가격이 포함된 시계열 배열입니다.
};
struct str_info{
   double   point;         // 현재 상품 포인트 크기를 견적 통화로 표시
   int      spread;        // 현재 스프레드
};
//____________________________________________________________________
class currency {
   public:
//---- данные      
      MqlTick TICK;        // 틱 데이터
      str_bars  BAR;       // 시계열 데이터
      str_info INFO;       // 도구 정보
      int error;
//---- методы      
      int create(string sym,ENUM_TIMEFRAMES period, int numbars);
      int refresh(void);
   private:
      string            symbol;
      ENUM_TIMEFRAMES   per;
      int               num;
      datetime          lastbar_time;
      int               tmpint1,tmpint2;
      int ch_load(void);
};
//____________________________________________________________________

나는 이미 준비된 데이터의 일부에서만 내 클래스로 작업하고 물론 클래스 자체는 새로 고침 () 메서드를 호출하여 데이터를 수신합니다.

 
유용한 글!
 

기사에 부정확한 내용이 있습니다.

double lot_price = myaccount.MarginCheck(_Symbol,otype,Lot); // 로트 가격/필요 마진 수

이 있어야 합니다.

   double lot_price=myaccount.MarginCheck(_Symbol,otype,Lot,price);  //--- 로트 가격/필요 마진 수
[삭제]  

훌륭한 기사입니다. 작성자에게 감사드립니다. 주문하기 전에 Stop_Level 확인과 스프레드 값 확인도 작성하고 싶습니다. 문제는 스프레드가 변동하면 높은 값에서는 수익성이 없기 때문에 시장에 진입 할 수 없다는 것입니다. 이것은 전문 고문이 뉴스 중에 거래하지 않는 데 도움이 될 것입니다. 또한 편차를 확인하고 싶습니다. 추론은 비슷합니다. 그리고 라이브러리에 대한 질문도 있습니다 : 함수 란 무엇입니까 (어떤 종류의 프로세스를 나타내고 설명합니까)?

FreezeLevel

동결 거래 작업의 거리를 포인트 단위로 가져옵니다.

int FreezeLevel() const

간단한 언어로 설명해 주세요 - 알고 계신다면 설명해 주세요.

그리고 질문이 하나 더 있습니다. 예를 들어 현재 시점(10포인트)에서 Stop_Level과 같은 한도를 알아낼 수 있습니다. SL=10 포인트로 지정가 주문을 합니다. 예를 들어 한 시간 후에 가격이 주문에 지정한 가격에 도달하지만 현재 Stop_Level은 예를 들어 15핍입니다. 어떻게 될까요 - 지정가 주문이 체결될까요 아니면 거부될까요? 또한 가격이 주문에 지정된 가격에 도달했지만 스프레드가 변경된 경우 - 주문을 시작할 당시의 예상 가격과 비교하여 더 나쁜 가격으로 진입 또는 출구가 가능하거나 주문이 전혀 작동하지 않음을 의미합니까?

 

제가 뭘 잘못하고 있나요? 입찰이 인쇄되지 않는 이유는 무엇인가요?

작업 로그는 다음과 같습니다.


2011.01.31 20:20:18 00(EURUSD,M1) EURUSD 0

다음은 코드입니다.

#include <Trade\SymbolInfo.mqh>  //--- CSymbolInfo 클래스
CSymbolInfo    my_symbol;        //--- CSymbolInfo 클래스의 객체
//+------------------------------------------------------------------+
//| 전문가 초기화 기능|
//+------------------------------------------------------------------+
int OnInit()
  {   return(0);  }
//+------------------------------------------------------------------+
//| 전문가 초기화 기능|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {  }
//+------------------------------------------------------------------+
//| 전문가 틱 기능|
//+------------------------------------------------------------------+
void OnTick()
  {
   my_symbol.Name(_Symbol);
   my_symbol.Refresh();
   Print(_Symbol," ",my_symbol.Bid());
  }
//+------------------------------------------------------------------+