찻주전자의 질문 - 페이지 78

 
Interesting :

개발자의 의견 을 고려하면 Expert Advisor를 다시 만들거나 파일로 작업하는 것이 더 쉬울 것입니다.

여기에서 전문가에게 원하는 것을 완벽하게 설명하고 WIZARD에서 만든 모든 코드를 제공하는 것이 더 쉬울 것입니다.

예를 들어 Envelopes 지표 가격의 교차점에서 거래를 시작하는 고문이 필요합니다. 다음은 일어난 일입니다.

 //+------------------------------------------------------------------+
//|                                                    envelopes.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\SignalEnvelopes.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedLot.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string              Expert_Title              = "envelopes" ; // Document name
ulong                     Expert_MagicNumber        = 28572 ;       // 
bool                      Expert_EveryTick          = false ;       // 
//--- inputs for main signal
input int                 Signal_ThresholdOpen      = 10 ;           // Signal threshold value to open [0...100]
input int                 Signal_ThresholdClose     = 10 ;           // Signal threshold value to close [0...100]
input double              Signal_PriceLevel         = 0.0 ;         // Price level to execute a deal
input double              Signal_StopLevel          = 50.0 ;         // Stop Loss level (in points)
input double              Signal_TakeLevel          = 50.0 ;         // Take Profit level (in points)
input int                 Signal_Expiration         = 4 ;           // Expiration of pending orders (in bars)
input int                 Signal_Envelopes_PeriodMA = 240 ;         // Envelopes(240,0,MODE_LWMA,...) Period of averaging
input int                 Signal_Envelopes_Shift    = 0 ;           // Envelopes(240,0,MODE_LWMA,...) Time shift
input ENUM_MA_METHOD      Signal_Envelopes_Method   = MODE_LWMA ;   // Envelopes(240,0,MODE_LWMA,...) Method of averaging
input ENUM_APPLIED_PRICE Signal_Envelopes_Applied  = PRICE_CLOSE ; // Envelopes(240,0,MODE_LWMA,...) Prices series
input double              Signal_Envelopes_Deviation= 0.15 ;         // Envelopes(240,0,MODE_LWMA,...) Deviation
input double              Signal_Envelopes_Weight   = 1.0 ;         // Envelopes(240,0,MODE_LWMA,...) Weight [0...1.0]
//--- inputs for money
input double              Money_FixLot_Percent      = 10.0 ;         // Percent
input double              Money_FixLot_Lots         = 0.01 ;         // Fixed volume
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- Initializing expert
   if (!ExtExpert.Init( Symbol (), PERIOD_H4 ,Expert_EveryTick,Expert_MagicNumber))
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing expert" );
      ExtExpert.Deinit();
       return (- 1 );
     }
//--- Creating signal
   CExpertSignal *signal= new CExpertSignal;
   if (signal== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating signal" );
      ExtExpert.Deinit();
       return (- 2 );
     }
//---
   ExtExpert.InitSignal(signal);
   signal.ThresholdOpen(Signal_ThresholdOpen);
   signal.ThresholdClose(Signal_ThresholdClose);
   signal.PriceLevel(Signal_PriceLevel);
   signal.StopLevel(Signal_StopLevel);
   signal.TakeLevel(Signal_TakeLevel);
   signal.Expiration(Signal_Expiration);
//--- Creating filter CSignalEnvelopes
   CSignalEnvelopes *filter0= new CSignalEnvelopes;
   if (filter0== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating filter0" );
      ExtExpert.Deinit();
       return (- 3 );
     }
   signal.AddFilter(filter0);
   filter0.PatternsUsage( 2 );
//--- Set filter parameters
   filter0.PeriodMA(Signal_Envelopes_PeriodMA);
   filter0.Shift(Signal_Envelopes_Shift);
   filter0.Method(Signal_Envelopes_Method);
   filter0.Applied(Signal_Envelopes_Applied);
   filter0.Deviation(Signal_Envelopes_Deviation);
   filter0.Weight(Signal_Envelopes_Weight);
//--- Creation of trailing object
   CTrailingNone *trailing= new CTrailingNone;
   if (trailing== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating trailing" );
      ExtExpert.Deinit();
       return (- 4 );
     }
//--- Add trailing to expert (will be deleted automatically))
   if (!ExtExpert.InitTrailing(trailing))
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing trailing" );
      ExtExpert.Deinit();
       return (- 5 );
     }
//--- Set trailing parameters
//--- Creation of money object
   CMoneyFixedLot *money= new CMoneyFixedLot;
   if (money== NULL )
     {
       //--- failed
       printf ( __FUNCTION__ + ": error creating money" );
      ExtExpert.Deinit();
       return (- 6 );
     }
//--- Add money to expert (will be deleted automatically))
   if (!ExtExpert.InitMoney(money))
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing money" );
      ExtExpert.Deinit();
       return (- 7 );
     }
//--- Set money parameters
   money.Percent(Money_FixLot_Percent);
   money.Lots(Money_FixLot_Lots);
//--- Check all trading objects parameters
   if (!ExtExpert.ValidationSettings())
     {
       //--- failed
      ExtExpert.Deinit();
       return (- 8 );
     }
//--- Tuning of all necessary indicators
   if (!ExtExpert.InitIndicators())
     {
       //--- failed
       printf ( __FUNCTION__ + ": error initializing indicators" );
      ExtExpert.Deinit();
       return (- 9 );
     }
//--- ok
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Deinitialization function of the expert                          |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   ExtExpert.Deinit();
  }
//+------------------------------------------------------------------+
//| "Tick" event handler function                                    |
//+------------------------------------------------------------------+
void OnTick ()
  {
   ExtExpert. OnTick ();
  }
//+------------------------------------------------------------------+
//| "Trade" event handler function                                   |
//+------------------------------------------------------------------+
void OnTrade ()
  {
   ExtExpert. OnTrade ();
  }
//+------------------------------------------------------------------+
//| "Timer" event handler function                                   |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   ExtExpert. OnTimer ();
  }
//+------------------------------------------------------------------+
 
개발자 동지, 매수/매도 신호 후 포지션이 한 번 열리고 닫히면 고문이 다음 신호까지 포지션을 열지 않도록 코드에서 변경해야 할 사항을 설명하십시오. 시스템이 여러 지표로 구성된 경우 특히 그렇습니다. 조언자는 항상 제자리에 있습니다. 그는 테이크 또는 스톱으로 하나를 닫고 즉시 다른 하나를 엽니다.
 

지표에 대한 질문입니다.

OnCalculate 의 입력 매개변수에서 이러한 구성이 있습니다.

 int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime & time[],
                 const double & open[],
                 const double & high[],
                 const double & low[],
                 const double & close[],
                 const long & tick_volume[],
                 const long & volume[],
                 const int & spread[])
  {
     ...
  }

이 모든 즐거움은 현재 시간 프레임에 엄격하게 연결되어 있으므로 다른 시간 프레임의 유사한 데이터를 얻으려면 예를 들어 원하는 시간 프레임에 필요한 기본 제공 표준 표시기의 핸들 호출을 사용할 수 있습니다.

handle= iGator ( _Symbol , PERIOD_W1 );

그런 다음 복사 기능의 변형을 통해 필요한 데이터를 버퍼에 복사합니다.

모든 것이 괜찮지만 현재 시간과 다른 시간 프레임에서 Rates_total 및 prev_calculated를 사용할 필요가 있습니다. 내가 이해하는 한 그들은 존재하지 않습니다. 기본적으로 현재 기간에 적합하지 않은 경우 어디서 어떻게 얻을 수 있습니까?

물론 도움말에 명확한 설명이 있습니다.

"OnCalculate() 함수에 의해 반환된 값과 두 번째 입력 매개변수 prev_calculated 사이의 관계에 주목해야 합니다. 함수가 호출되면 prev_calculated 매개변수에는 이전 호출 에서 OnCalculate() 함수가 반환 한 값이 포함됩니다. 이 기능의 이전 출시 이후 변경되지 않은 막대에 대한 반복 계산을 피하기 위해 사용자 지정 지표를 계산하는 경제적인 알고리즘을 구현할 수 있습니다.

이렇게 하려면 일반적으로 현재 함수 호출의 막대 수를 포함하는 Rates_total 매개변수의 값을 반환하는 것으로 충분합니다. OnCalculate() 함수에 대한 마지막 호출 이후 가격 데이터가 변경된 경우(더 깊은 기록이 업로드되었거나 기록 간격이 채워진 경우) prev_calculated 입력 매개변수의 값은 터미널 자체에서 0으로 설정됩니다."

그렇다면 위의 원칙에 따라 다른 시간 프레임에 대해 Rates_total 및 prev_calculated의 아날로그를 수동으로 구현해야 합니까? 아니면 아직 사용할 준비가 된 것이 있습니까? 예를 들면 다음과 같습니다.

rates_total = BarsCalculated (handle);
또는 Copy 함수의 반환된 값을 가져옵니다. 그러나 prev_calculated를 사용하면 간단히 말해서 그렇게 간단하지 않을 것입니다. 어떻게 하면 유능하게 구현될까요?
 

나는 수학에 대한 Rosh의 기사를 읽었습니다. https://www.mql5.com/en/articles/1492 .

챔피언십에서도 같은 평가 기준, 예를 들어 OnTester()에서 비슷한 분석을 연결할 수 있습니까?

기성 솔루션을 무료로 사용할 수 있습니까?

Математика в трейдинге. Оценка результатов торговых сделок - Статьи по MQL4
  • www.mql5.com
Математика в трейдинге. Оценка результатов торговых сделок - Статьи по MQL4: автоматическая торговля
 
Karlson :

나는 수학에 대한 Rosh의 기사를 읽었습니다. https://www.mql5.com/en/articles/1492 .

챔피언십에서도 같은 평가 기준, 예를 들어 OnTester()에서 유사한 분석을 연결할 수 있습니까?

기성 솔루션을 무료로 사용할 수 있습니까?

예 - 통계 테스트
 
Rosh :
예 - 통계 테스트
고맙습니다.
 

말하다?

나는 히스토리에서 거래를 선택했고, 거래 의 방향 은 "반전"(in/out)이고, 거래의 양을 결정합니다. HistoryDealGetDouble(ticket,DEAL_VOLUME).
총 볼륨을 알 수 있지만 닫은 볼륨과 열린 볼륨을 어떻게 알 수 있습니까? 고맙습니다.

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок - Документация по MQL5
 
Rosh :
예 - 통계 테스트

선형회귀를 이용해서 그런거 썼는데 저런걸 터미널에 표준으로 입력해서 테스터의 차트에도 표시할 생각인가?

그리고 Z-점수를 계산하려면 양수 및 음수 계열의 총 수를 독립적으로 계산해야 한다는 것을 어떻게 이해했습니까?

 
MetaTrader 5를 이 거래소 https://mtgox.com/ 에 연결할 수 있습니까?
 
Karlson :

그리고 Z-점수를 계산하려면 양수 및 음수 계열의 총 수를 독립적으로 계산해야 한다는 것을 어떻게 이해했습니까?

예, 혼자서. 원칙적으로 계산을 위해 MQL5에 코드를 게시할 수 있습니다.