기고글 토론 "적응형 거래 시스템과 MetaTrader 5 클라이언트 터미널에서의 사용" - 페이지 2

 

문서를 영어로 번역하는 것이 귀찮은가요? 좋은 문서는 항상 고맙게 생각합니다. 훌륭한 글, 멋진 기여에 감사드립니다.

 
Lugner:

문서를 영어로 번역하는 것이 귀찮은가요? 좋은 문서는 항상 고맙게 생각합니다. 좋은 글, 멋진 기여에 감사드립니다.

첨부된 문서는 가능한 한 빨리 번역하도록 하겠습니다.
 

입력 매개변수 (변수)로 작업하려면 클래스 선언 전에 매개변수를 선언하고

클래스(포함) 호출 경로 뒤에 선언하면 됩니다.

 
Lugner:

문서를 영어로 번역하는 것이 귀찮은가요? 좋은 문서는 항상 고맙게 생각합니다. 훌륭한 글, 멋진 기여에 감사드립니다.

고마워요. 문서가 번역되었습니다.
 
AM2:

CAdaptiveStrategy 클래스에서 스토캐스틱만 거래하려고 합니다:

나머지는 비활성화했지만 테스터의 차트는 여전히 동일합니다. 제가 알기로는 여기서 전략이 연결되고 연결이 끊어지는 건가요?

예, 전략은 CAdaptiveStrategy::Expert_OnInit() 함수에서 연결됩니다. 편의를 위해 Expert Advisor의 디버그 버전을 사용하는 것이 더 좋으며 결과를 파일에 저장하는 기능이 추가되었습니다. direction_res.txt 파일을 사용하여 실제 거래에서 어떤 전략의 어떤 신호가 사용되었는지 파악할 수 있습니다.

지정된 5개의 스토캐스틱으로 구성된 적응형 전략을 사용할 때(EURUSD H1, 2010년 초부터 2010년 9월 1일까지 테스트) 다음과 같은 결과를 얻었습니다:




 

이 글은 제가 아주 오랫동안 프로그래밍/로봇 트레이딩에 대해 읽은 글 중 가장 생각을 자극하는 글일 것입니다. 정말 감사합니다!

이 새로운 열정에 따라 유진의 글을 약간 수정했습니다. [사과드립니다 - 적어도 저도 아이디어를 공유하겠습니다 ;-) ]라고 적었습니다.

기존 EA(안타깝게도 아직 객체 지향은 아님)를 다음과 같이 각색했습니다:

1. 여러 시간 척도: M1, M3, M5, M10, M20, M30, H1
2. 다중 빠른 MA: 3,5,7,9,11
3. 다중 슬로우 MA: 17,27,37,47 등 97,107, 117 등

포리치(주기)-포리치(빠름)-포리치(느림) 루프에서 M1 틱에 연결됩니다. 각 틱은 '가상' 거래가 필요한지 확인하고 필요한 경우 '체결'하여 논리적/가상 손익 균형을 유지합니다.

결과는 매우 놀랍고 매우 긍정적입니다...

이제 최적화는 짧은 기간(예: M1, M3)을 제거하고[더 긴 기간이 결국 '승리'하기 때문에], '빠르게 개선되는' 파라미터 세트를 감지할 수 있도록 '실행 중인 손익' 카운터를 얼마나 자주 지울지 결정하는 영역에서 이루어지고 있습니다.

또한 제가 가장 좋아하는 거래 EA를 이 작업에 인터페이스하여 (ADX/RSI/MACD/RVI 확인 등을 추가하기 위해) 항상 최적의 빠른/느린 MA 쌍을 사용하고 좋은 시장, 자금, 포지션 및 거래 관리 로직을 갖도록 해야 합니다.

다시 한번 감사드립니다,

T.

 

퀀텀,

분명히 더 많은 매수 및 매도 조건 (또는 매수 및 매도 조건의 쌍 / 콤보)을 추가하려면 여전히 재능이있는 것 외에도

if(buy_condition_1 && buy_condition_2) new_state=SIGNAL_OPEN_LONG;
if(sell_condition_1 && sell_condition_2) new_state=SIGNAL_OPEN_SHORT;

를 추가해야 합니다,

에 대한 다른 기회를 트리거하기 위해

new_state=SIGNAL_CLOSE_SHORT;
// 및 
new_state=SIGNAL_CLOSE_LONG;

파일에 해당 콤보를 추가하는 것은 논리적으로 의미가 없지만 모든 새로운 조건 또는 조건의 쌍 / 콤보에 대해

조건에 대해 또 다른 include/class 파일을 만들어야 합니다,

그렇죠?

예를 들어, 내가 그 조건을 추가하고 싶다면 빠르게 의미합니다:

// 구매 조건 3: MA 신규 
   bool buy_condition_3=(m_values[0+5]>m_values[1+7]) && (m_values[1+5]>m_values[2+7]);
// 매수 조건 4: 이전 오픈 가격이 MA보다 높습니다.
   bool buy_condition_4=(p_open>m_values[1]);

// 판매 조건 3: MA 신규 
   bool sell_condition_3=(m_values[0+5]<m_values[1+7]) && (m_values[1+5]<m_values[2+7]);
// 매수 조건 4: 이전 오픈 가격이 MA보다 낮습니다.
   bool sell_condition_4=(p_open<m_values[1]);

  if(buy_condition_3  &&  buy_condition_4) new_state=SIGNAL_OPEN_LONG;
   if(sell_condition_3 && sell_condition_4) new_state=SIGNAL_OPEN_SHORT;

   if((GetSignalState()==SIGNAL_OPEN_SHORT) && (buy_condition_3 || buy_condition_4)) new_state=SIGNAL_CLOSE_SHORT;
   if((GetSignalState()==SIGNAL_OPEN_LONG) && (sell_condition_3 || sell_condition_4)) new_state=SIGNAL_CLOSE_LONG;

의 핵심 시스템에 영향을 미치지 않고 CStrategyMA.mqh 내의 하위 클래스에 추가 할 수 있습니다.

적응형 시스템의 핵심 시스템에 영향을 미치지 않고, 즉 올바르게 계속 진행하면 이 포함 파일 CStrategyMA.mqh가 CAdaptiveStrategy.mqh와 상호 작용하는

와 상호 작용하며, 논리적 핵심의 새로운 조건(예제의 3 및 4)도 고려합니다.

의 새로운 조건(예제의 3과 4)도 고려하고 있나요?

또는 조건 3과 4의 경우, 예를 들어 CStrategyMA3and4.mqh ??? 파일을 다시 작성하고 추가해야 하나요?

동일한 CStrategyMA.mqh 내에 이러한 조건을 추가하고 모두 올바르게 작동 할 수 있습니까?

어쩌면 나는 혼자서 대답을 가지고 있고 나는 약간 어리석은 일이지만 당신의 의견을 묻고 싶습니다.

고마워요

 
Automated-Trading:

예, 전략은 CAdaptiveStrategy::Expert_OnInit() 함수에서 연결됩니다. 편의를 위해 파일에 결과 저장 기능이 추가된 Expert Advisor의 디버그 버전을 사용하는 것이 좋습니다. direction_res.txt 파일을 사용하여 실제 거래에서 어떤 전략 신호가 사용되었는지 확인할 수 있습니다.

위의 5가지 스토캐스틱으로 구성된 적응형 전략(EURUSD H1, 2010년 초부터 2010년 9월 1일까지 테스트)을 사용하면 다음과 같은 결과를 얻을 수 있습니다:

차트로 판단하면이 최적화의 일부가 자동화 된 것으로 판명 되더라도 다시 단순히 최적화 된 모델이 있지만 적응 형 모델은 전략 운영 중에 시장 진입 및 출구를 조정하는 계산 블록이있는 모델이며 초기화의 매개 변수는 전혀 중요하지 않습니다. 이러한 조건에서는 이익에 의한 포지션 청산 분포가 변경된 경우에도 시스템이 새로운 값을 다시 계산하고 새로운 이익 영역을 결정하므로 이익에 대한 매개 변수를 재구성하고 주식 주문 그룹이 유지되기 때문에 잔고 라인과 관련된 주식 라인만 동일화됩니다:
파일:
 

외환주의자님께,

귀하의 질문에 답변하셨습니다 :)

맞습니다. 거래 조건을 수정하려는 경우 두 가지 방법이 있습니다. 한 쪽에서 전략 CStrategyMA에 새 조건을 추가 할 수 있고 (그러나 초기 전략과 다른 새 전략을 얻을 수 있음) 다른 방법은 새 클래스 (예 : CStrategyMA34)를 만들고 거기에 추가 구매 / 판매 조건을 추가하는 것입니다.

물론 새 전략과 함께 파일을 포함시키고 CAdaptiveStrategy 클래스의 Expert_OnInit 함수에 이러한 새 전략을 추가해야 합니다:

#include <CStrategyMA3and4.mqh>

int CAdaptiveStrategy::Expert_OnInit()
{
.....
--- adding new strategies
   for(int i=0; i<10; i++)
     {
      CStrategyMA34 *t_StrategyMA34;
      t_StrategyMA34=new CStrategyMA34;
      if(t_StrategyMA34==NULL)
        {
         delete m_all_strategies;
         Print("Error of creation of object of the CStrategy3and4 type");
         return(-1);
        }
      int period=3+i*10;
      t_StrategyMA34.Initialization(period,true);
      t_StrategyMA34.SetStrategyInfo(_Symbol,"[MA34_"+IntegerToString(period)+"]",period,"Moving Averages with new conditions "+IntegerToString(period));
      m_all_strategies.Add(t_StrategyMA34);
     }
.....
}

두 번째 방법이 더 좋으며, 많은 전략과 그 변형을 추가할 수 있습니다.

CStrategyMA 클래스 인스턴스(있는 경우)를 제거할 필요는 없으며, 샌드박스에서 결과가 나쁘지 않을 것입니다.

시장은 m_all_strategies에 포함된 전략 목록에서 최적의 전략을 결정하는 데 도움이 될 것입니다.

 
dasmen:
차트로 판단하면이 최적화의 일부가 자동화 된 경우에도 다시 최적화 된 모델이 있지만 적응 형 모델은 전략 운영 중에 시장 진입 및 출구를 조정하는 계산 블록이있는 모델이며 초기화의 매개 변수는 전혀 중요하지 않습니다. 이러한 조건에서는 이익에 대한 포지션 청산 분포가 변경된 경우 이러한 시스템은 여전히 새로운 값을 다시 계산하고 새로운 이익 영역을 결정하므로 이익에 대한 매개 변수를 재구성하고 주식 주문 그룹이 유지되기 때문에 균형 선과 관련된 주식 선만 균등화됩니다:

이 기사에서는 수학에서와 같이 적응 전략의 개념과 적용을 실제로 관리 선택을 구현하는 시스템으로 사용합니다.