MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1025

 

일반 지그재그 좀 조언해주세요... 그렇지 않으면 이걸 사용하는데 가끔 소세지 많이 ...


 

말해봐, 난 잘 모르겠어 - 테스터에서 차트는 이렇고, 모든 눈금은 M1이고, 디포의 시작 부분은 5000이고, 드로우다운은 62%(3325)를 보여줍니다. 분명히 차트. 불일치?

모델링의 문제인가? 그러면 테스터는 이 드로다운을 어떻게 계산합니까? 그가 그것을 계산한다면, 왜 그것이 자기자본 곡선에 보이지 않습니까?



 
Aleksey Mavrin :

그가 그것을 계산한다면, 왜 그것이 자기자본 곡선에 보이지 않습니까?

MT4는 최소 하나의 주문이 마감될 때까지 녹색 자산 라인을 표시하지 않습니다. 폐쇄가 있을 것입니다. 그런 다음 녹색 라인이 그려집니다. 자금 상태(MT5는 이 단점이 없음)

알렉세이 마브린 :

드로우다운은 62%(3325)를 보여주지만 분명히 차트에 없습니다. 불일치?

테스터는 드로우다운을 자기자본으로 계산하지만 최대 드로우다운이 있는 순서에 따라 계산합니다. 아마도 당신은 테스터에서 미결 주문을 가지고 평균을 냈을 것입니다. 당신의 총 자산은 +일 수 있고, 가장 수익성이 없는 것은 테스트의 특정 순간에 큰 마이너스를 기록했을 것입니다.


추신: 시뮬레이션의 품질이 매우 낮습니다. 모든 틱에서 TS를 테스트하고 있지만 테스트를 위해 매우 긴 기간이 선택되었습니다. https://www.mql5.com/ru/articles/1486

 
Igor Makanu :

MT4는 최소 하나의 주문이 마감될 때까지 녹색 자산 라인을 표시하지 않습니다. 폐쇄가 있을 것입니다. 그런 다음 녹색 라인이 그려집니다. 자금 상태(MT5는 이 단점이 없음)

테스터는 자기자본으로 드로우다운을 계산하지만 최대 드로우다운이 있는 순서에 따라 계산합니다. 아마도 당신은 테스터에서 미결 주문을 가지고 평균을 냈을 것입니다. 당신의 총 자산은 +일 수 있고, 가장 수익성이 없는 것은 테스트의 특정 순간에 큰 마이너스를 기록했을 것입니다.


추신: 시뮬레이션의 품질이 매우 낮습니다. 모든 틱에서 TS를 테스트하고 있지만 테스트를 위해 매우 긴 기간이 선택되었습니다. https://www.mql5.com/ru/articles/1486

그렇군요, 중재자님. 이제 더 명확해졌습니다. 감사합니다! 에퀴티 라인에 관한 유일한 것은

나는 그의 거래 차트(시각화를 의미함) 평균 그리드를 있는 그대로 분석했습니다. 그는 매우 자주 드로다운을 했고, 자기자본 라인은 차트에 이것을 반영하지 않습니다. 예를 들어, 여기

trade 2018 December 04. trade 1238, 차트에서 수직 파선 끝에서 두 번째 영역에 있으며, 그 아래 거래 번호는 1251입니다. 녹색 자산 라인에서 하락할 기미는 없습니다.

저것들. 그것이 어떻게 그려지는지는 아직 명확하지 않지만 결론은 조금씩 나옵니다. 어떤 식으로든 그것을 믿을 수 없고 MT5를 탓해야 합니다)

추신 시뮬레이션의 품질은 왜 그런지 모릅니다. TF 비용은 모두 M1입니다. 아카이브가 MQ 서버에서 다운로드되었으므로 아마도


 
Aleksey Mavrin :

그렇군요, 중재자님. 이제 더 명확해졌습니다. 감사합니다! 에퀴티 라인에 관한 유일한 것은

나는 그의 거래 차트(시각화를 의미함) 평균 그리드를 있는 그대로 분석했습니다. 그는 매우 자주 드로다운을 했고, 자기자본 라인은 차트에 이것을 반영하지 않습니다. 예를 들어, 여기

trade 2018 December 04. trade 1238, 차트에서 수직 파선 끝에서 두 번째 영역에 있으며, 그 아래 거래 번호는 1251입니다. 녹색 자산 라인에서 하락할 기미는 없습니다.

저것들. 그것이 어떻게 그려지는지는 아직 명확하지 않지만 결론은 조금씩 나옵니다. 어떤 식으로든 그것을 믿을 수 없고 MT5를 탓해야 합니다)

추신 시뮬레이션의 품질은 왜 그런지 모릅니다. TF 비용은 모두 M1입니다. 아카이브가 MQ 서버에서 다운로드되었으므로 아마도


MetaTrader 4 테스터는 MetaTrader 5 테스터보다 훨씬 열등하며, 무언가가 닫힐 때까지 자금을 표시할 수 없으며 손익 고정 시점에만 표시됩니다. 귀하의 그림에서 모든 매도 포지션은 동시에 마감됩니다. 이것이 보고서의 개시와 마감 사이에 자기자본 라인이 없는 이유입니다. 화면에서 개시 위치와 종료 위치 사이의 간격에서 하나 이상의 위치가 마감된 경우 보고서는 마감 당시의 자금 인출을 반영합니다. 즉, 보고서는 손실로 한 포지션을 마감하는 잔액과 모든 미결 포지션의 자산에 대한 현재 유동 손실로 인한 유동 자산 감소의 두 가지 손실을 보여줍니다.

 
Aleksey Mavrin :

저것들. 그것이 어떻게 그려지는지는 아직 명확하지 않지만 결론은 조금씩 나옵니다. 어떤 식으로든 그것을 믿을 수 없고 MT5를 탓해야 합니다)

신뢰할 수 있지만 전체 테스터 보고서 를 읽어야 합니다.

귀하의 드로다운 추정치를 코드에 추가하고 이를 OnDeinit()의 로그에 출력합니다. 테스터가 최대 드로다운을 계산하는지 확인하는 방법에 대해 이야기하는 경우 다음과 같습니다.

 double minOrderProfit = 0.0 ;

int OnInit ()
  {
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
   Print ( "minOrderProfit = " ,minOrderProfit);
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
   for ( int i= 0 ;i< OrdersTotal ();i++)
   {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES)) minOrderProfit = fmin (minOrderProfit,OrderProfit());
   }

// основной код

   
  }
//+------------------------------------------------------------------+


추신: 테스트하지는 않았지만 작동해야 합니다.

 
Igor Makanu :

신뢰할 수 있지만 전체 테스터 보고서를 읽어야 합니다.

귀하의 드로다운 추정치를 코드에 추가하고 이를 OnDeinit()의 로그에 출력합니다. 테스터가 최대 드로다운을 계산하는지 확인하는 방법에 대해 이야기하는 경우 다음과 같습니다.


추신: 테스트하지는 않았지만 작동해야 합니다.

이해했습니다. 감사합니다. 내 Expert Advisors에서 나는 모든 통계를 광범위하게 수집하고 테스터 옵티마이저를 위해 일반적으로 모든 종류 및 기타, 변동성 및 DD 등의 계수를 매일, 매월, 일반적으로 고려합니다. 가능한 모든 것.

그리고 이것은 Market의 로봇을 사용한 실험이었습니다. 확인하기 위해 넣었습니다. 왜냐하면. 나는 그러한 곡선의 그래프가 그러한 큰 이익을 가질 수 없다는 것을 알고 있습니다. 나는 내가 옳았다는 것을 확인했다. MT4에서 자기자본 곡선을 표시하는 특성으로 인해

제품의 기능에 대한 잘못된 평가가 이루어지고(거래 차트를 보면) 차트가 매우 자주 시장을 찌릅니다. 메시지를 이해합니까? :) 추신 똥이 사람들에게 던져지고있다

 

안녕하세요.

지표를 썼는데 실수인건 이해합니다!! 빨간색 수평선에 대한 질문(하루 세션 시작부터).

어떤 이유로, usdrub, eurrub을 정상으로 그리고 전문가의 오류 없이 끌어들이지만 eurusd 와 다른 사람들은 그렇지 않습니다. 그리고 전문가의 기록으로 맹세합니다.

(2019.12.19 11:25:31.532 세션일(EURUSDrfd,H1) 'Session Day.mq5'의 범위를 벗어난 배열(144,41)

관객들에게 도움을 청합니다...

팁 미리 감사드립니다!


추신

DIRECTION OF THE RED LINE (오프닝 세션) CORRECT, 오늘부터 어제까지!!!!!!!

 //+------------------------------------------------------------------+
//|                                                  Session Day.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_plots    2
//---- plot ColorCandles
#property indicator_type1    DRAW_CANDLES
#property indicator_color1   White,Blue,Red
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
#property indicator_label1    "Open;High;Low;Close"
//----
#property indicator_type2    DRAW_LINE
#property indicator_color2   Red
#property indicator_style2    STYLE_SOLID
#property indicator_width2    3
#property indicator_label2    "Line open session"
//-----
input int      StartCandle = 100 ;         //Кол-во свечек для расчета средней
input int      StartBarDay = 0 ;           //Час начала торгового дня
input int      BarSession1 = 10 ;           //Чвс Открытия дневной сессии
input int      BarSession2 = 19 ;           //Чвс Закрытия дневной сессии
input bool     LevelOpenSession = true ;   //Уровень открытия сессии дня
//---
double ExtOpenBuffer[];
double ExtHighBuffer[];
double ExtLowBuffer[];
double ExtCloseBuffer[];
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,ExtOpenBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,ExtHighBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 2 ,ExtLowBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 3 ,ExtCloseBuffer, INDICATOR_DATA );
   SetIndexBuffer ( 4 ,ExtBuffer, INDICATOR_DATA );
//--- установим цвет контура и теней
   PlotIndexSetInteger ( 0 , PLOT_LINE_COLOR , 0 , clrWhite );
//--- установим цвет тела для бычьей свечи
   PlotIndexSetInteger ( 0 , PLOT_LINE_COLOR , 1 , clrBlue );
//--- установим цвет тела для медвежьей свечи
   PlotIndexSetInteger ( 0 , PLOT_LINE_COLOR , 2 , clrRed );
//--- set accuracy
   IndicatorSetInteger ( INDICATOR_DIGITS , _Digits );
   if ( Period ()< PERIOD_H4 )
       IndicatorSetString ( INDICATOR_SHORTNAME , "Session Day \nOpen session: " + string (BarSession1)+ " hour \nClose session: " + string (BarSession2)+ " hour" );
   else
       IndicatorSetString ( INDICATOR_SHORTNAME , "Session Day" );
   int bars= iBars ( NULL , _Period );
   for ( int b= 0 ; b< 5 ; b++)
       PlotIndexSetInteger (b, PLOT_DRAW_BEGIN ,bars-StartCandle);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//---
   int i;
   if (rates_total< 24 )
       return ( 0 );
   MqlDateTime tm;
//----
   if (prev_calculated== 0 )
     {
       ArrayInitialize (ExtOpenBuffer, EMPTY_VALUE );
       ArrayInitialize (ExtHighBuffer, EMPTY_VALUE );
       ArrayInitialize (ExtLowBuffer, EMPTY_VALUE );
       ArrayInitialize (ExtCloseBuffer, EMPTY_VALUE );
       ArrayInitialize (ExtBuffer, EMPTY_VALUE );
      i= 0 ;
     }
   else
      i=prev_calculated- 1 ;
//----
   while (i<rates_total && ! IsStopped ())
     {
       TimeToStruct (time[i],tm);
       if ( Period ()== PERIOD_MN1 && (tm.mon== 4 || tm.mon== 8 || tm.mon== 12 ))
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
       if ( Period ()== PERIOD_W1 && tm.mon>= 1 && tm.mon<= 12 && tm.day>= 1 && tm.day< 8 )
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
       if ( Period ()== PERIOD_D1 && tm.day_of_week== 1 )
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
       if ( Period ()== PERIOD_H4 && tm.hour==StartBarDay && tm.min== 0 )
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
       if ( Period ()<= PERIOD_H1 && tm.hour==BarSession1 && tm.min== 0 )
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }
       if ( Period ()<= PERIOD_H1 && tm.hour==BarSession2 && tm.min== 0 )
        {
         ExtOpenBuffer[i]=open[i];
         ExtHighBuffer[i]=high[i];
         ExtLowBuffer[i]=low[i];
         ExtCloseBuffer[i]=close[i];
        }


                     ПРОБЛЕМА !!!!!
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
       if (LevelOpenSession== true && Period ()== PERIOD_H1 && tm.hour==BarSession1 && tm.min== 0 )
         for ( int j= 0 ; j< 24 ; j++)
           {
            ExtBuffer[i-j]=open[i];
             if (ExtBuffer[i-j]!=ExtBuffer[i-j- 1 ])
               ExtBuffer[i-j- 1 ]= EMPTY_VALUE ;
           }
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
       //---
      i++;
     }
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+




 
kopeyka2 :

안녕하세요.

지표를 썼는데 실수인건 이해합니다!! 빨간색 수평선에 대한 질문(하루 세션 시작부터).

어떤 이유로, usdrub, eurrub을 정상으로 그리고 전문가의 오류 없이 끌어들이지만 eurusd 와 다른 사람들은 그렇지 않습니다. 그리고 전문가의 기록으로 맹세합니다.

(2019.12.19 11:25:31.532 세션일(EURUSDrfd,H1) 'Session Day.mq5'의 범위를 벗어난 배열(144,41)


 ExtBuffer[i-j]=open[i];
             if (ExtBuffer[i-j]!=ExtBuffer[i-j- 1 ])
               ExtBuffer[i-j- 1 ]= EMPTY_VALUE ;

이 시점에서 어떤 시점에서 음수 배열 인덱스에 액세스하고 있습니다. i, j에 대한 모든 경계 조건 설정 및 확인

 
Artyom Trishkin :

MetaTrader 4 테스터는 MetaTrader 5 테스터보다 훨씬 열등하며, 무언가가 닫힐 때까지 자금을 표시할 수 없으며 손익 고정 시점에만 표시됩니다. 귀하의 그림에서 모든 매도 포지션은 동시에 마감됩니다. 이것이 보고서의 개시와 마감 사이에 자기자본 라인이 없는 이유입니다. 화면에서 개시 위치와 종료 위치 사이의 간격에서 하나 이상의 위치가 마감된 경우 보고서는 마감 당시의 자금 인출을 반영합니다. 즉, 보고서는 손실로 한 포지션을 마감하는 잔액과 모든 미결 포지션의 자산에 대한 현재 유동 손실로 인한 유동 자산 감소의 두 가지 손실을 보여줍니다.

그것은 꽤 잘 쓰여져 있습니다. 감사합니다. 어떤 이유로 나는 처음에 게시물을 보지 못했습니다.

그리고 질문) - AccountEquity 등과 같은 계정 상태에 대한 정보에 대한 기능 테스터 내부의 요청 - 포지션이 마감되었는지 여부에 관계없이 올바른 그림을 제공합니까?

우리가 장기 거래를 가정하고 매일 자본 손실을 기록해야 하는 경우 테스터를 속이지 않습니까?