백테스트 중 발견된 문제점과 근본 원인을 찾지 못함!

 

백 테스트 후 아래 스크린샷을 참조하십시오.

이상한 것들에 대한 3개의 질문도 그림에 표시됩니다.

iCustom 사용법을 읽고 내 EA와 표시기를 몇 번이고 확인했지만 결국 근본 원인을 찾을 수 없습니다.

긴급하게 도와주세요. 감사합니다!

(*. 스크린샷을 클릭하면 열어서 확대하여 질문을 더 명확하게 볼 수 있습니다)

이것은 "Reverse" 표시기에 대한 중요 코드입니다(중요 코드에 대해 명확하도록 다른 코드는 "..."로 대체됨).

 int OnInit ()
  {
   IndicatorBuffers( 8 );
   ....
   SetIndexBuffer ( 6 ,ExtBuffer1);
   ....
  }

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[])
  {
   ...
   ...

   for (i=limit- 1 ; i>= 0 ; i--)
     {
      ...
      Value=...;
      ExtBuffer0[i]= MathLog (( 1 +Value)/( 1 -Value));
       if (ExtBuffer0[i]> 0 ) ExtBuffer1[i]= 10 ;
       else ExtBuffer1[i]=- 10 ;
     }

   ...
   ...
  }

이것은 표시기를 사용하기 위한 EA의 중요 코드입니다(중요 코드에 대해 명확하도록 다른 코드는 "..."로 대체됨).

...
...

void Reverse()
  {
   Joy1= iCustom ( Symbol (), 0 , "Reverse" , 6 , 1 );
   Joy2= iCustom ( Symbol (), 0 , "Reverse" , 6 , 2 );
  }

void openPosition()
  {
   ...
   if (Joy2<=- 10 && Joy1>= 10 ) 
    {
    r= OrderSend ( Symbol (),OP_BUY,lotSize,Ask,slippage, 0 , 0 ,TradeComment,MAGIC, 0 , clrMediumBlue );
    ...
    }
   else if (Joy2>= 10 && Joy1<=- 10 ) 
    {
    r= OrderSend ( Symbol (),OP_SELL,lotSize,Bid,slippage, 0 , 0 ,TradeComment,MAGIC, 0 , clrMediumVioletRed );
    ...
    }
   ...
   }
void closePosition()
  {
   ...
     if (openType==OP_BUY && Joy2>= 10 && Joy1<=- 10 )
     for (i= OrdersTotal ();i>= 1 ; i--)
         if ( OrderSelect (i- 1 ,SELECT_BY_POS,MODE_TRADES)== true && OrderMagicNumber()==MAGIC)
           {
            r=OrderClose(OrderTicket(),OrderLots(),Bid,slippage, clrDodgerBlue );
            ...
            }
   else if (openType==OP_SELL && Joy2<=- 10 && Joy1>= 10 ) 
     for (i= OrdersTotal ();i>= 1 ; i--)
         if ( OrderSelect (i- 1 ,SELECT_BY_POS,MODE_TRADES)== true && OrderMagicNumber()==MAGIC)
           {
            r=OrderClose(OrderTicket(),OrderLots(),Ask,slippage, clrDeepPink );
            ...
            }
   ...  
  }
void OnTick ()
  {
   ...
   Reverse();
   openPosition();
   closePosition(); 

}

 

이제 표시기 파일을 다시 만들고 노란색 선 그리기 문제가 해결되었습니다.

그러나 다른 2개의 문제는 여전히 아무 생각이 없습니다. 도와주세요 !

 

문제는 아마도 표시기에서 비롯된 것입니다.

 if (ExtBuffer0[i]> = 0 ) ExtBuffer1[i]= 10 ;
       else ExtBuffer1[i]=- 10 ;

귀하의 EmptyValue도 확인 하십시오

 
ffoorr :

문제는 아마도 표시기에서 비롯된 것입니다.

귀하의 EmptyValue도 확인하십시오

친애하는 ffoorr님, 노란색 선에서 볼 수 있듯이 빈 값이 없어야 합니다.

 

if(ExtBuffer0[i]==0)

SetIndexEmptyValue에 있는 내용을 따르면 구멍이 있고 아무것도 없습니다.

라인은 다음 두 데이터까지 인쇄되지 않습니다.


그렇지 않으면 표시기의 인덱스를 확인하십시오 . 신호가 한 바 늦은 것처럼 보입니다.

그렇지 않으면 표시기 코드를 보지 않고는 아무도 알 수 없습니다


일부 피셔 표시기를 사용하고 있습니까?

 

친애하는 foorr, 도움을 주셔서 대단히 감사합니다. 그러나 코드로 표시기를 확인 하고 빈 값이 없음을 확인할 수 있습니다.

틱 스토리와 MT4를 다시 설치했는데 여전히 문제가 있습니다. 그래서 아직 확인 중입니다.

 

졸리드래곤

SetindicatorEmptyValue가 없으면 빈 값은 EMPTY_VALUE 입니다.

if( ExtBuffer1[i] != 10 ) Open_Order() 코딩하면

ExtBuffer1[i]가 == EMPTY_VALUE인 경우 주문을 받게 됩니다.


하지만 이것이 문제의 원인인지도 알 수 없습니다.

 

ffoorr님, ExtBuffer1이 10 또는 -10이 아닌 경우 ExtBuffer1[i] 의 데이터를 표시하는 코드를 추가했습니다. 마침내 나는 아무것도 얻지 못했고 모든 막대에 대해 ExtBuffer1이 10 또는 -10임을 증명합니다.    

또한 표시기를 2줄의 버퍼 2개로 업데이트했습니다. 흰색으로 1개, 노란색으로 1개를 볼 수 있습니다. 내 EA에서 노란색 선의 데이터를 사용합니다.

아래 데이터를 참조하십시오. 주문이 변경된 시점을 볼 수 있습니다. 정확히 노란색 라인의 데이터가 변경되기 때문에 발생한 것입니다. 아래 '1'은 주문이 열리거나 닫히기 직전의 바의 노란색 라인 데이터를 의미하고, '2'는 '1' 이전의 바의 노란색 라인 데이터를 의미합니다. 그것은 또한 내가 주문을 열고 닫는 방법입니다.

또한 지표 코드를 반복해서 확인하여 지표가 피셔 지표가 아니라 앞의 막대를 기준으로 계산되었음을 확인할 수 있습니다.

그러나 여전히 노란색 선(신호)과 일치하지 않는 주문 변경을 볼 수 있습니다.

너무 이상해! 가능한 근본 원인은 무엇입니까? 누가 도움을 줄 수 있고 나는 그토록 감사할 것입니까?

 2013.04 . 30 04 : 00 : 00 :     1 : - 10.0 , 2 :   10.0 -error:       0

2013.04 . 30 08 : 30 : 01 :     1 :   10.0 , 2 : - 10.0 -error:       0

2013.04 . 30 08 : 30 : 02 :     1 :   10.0 , 2 : - 10.0 -error:       0

2013.04 . 30 09 : 30 : 00 :     1 : - 10.0 , 2 :   10.0 -error:       0

2013.04 . 30 09 : 30 : 00 :     1 : - 10.0 , 2 :   10.0 -error:       0

2013.04 . 30 16 : 30 : 00 :     1 :   10.0 , 2 : - 10.0 -error:       0

2013.04 . 30 16 : 30 : 00 :     1 :   10.0 , 2 : - 10.0 -error:       0

2013.05 . 01 18 : 00 : 00 :     1 : - 10.0 , 2 :   10.0 -error:       0

2013.05 . 01 18 : 00 : 00 :     1 : - 10.0 , 2 :   10.0 -error:       0

2013.05 . 01 22 : 00 : 00 :     1 :   10.0 , 2 : - 10.0 -error:       0

2013.05 . 01 22 : 00 : 00 :     1 :   10.0 , 2 : - 10.0 -error:       0

2013.05 . 01 22 : 30 : 00 :     1 : - 10.0 , 2 :   10.0 -error:       0

2013.05 . 01 22 : 30 : 00 :     1 : - 10.0 , 2 :   10.0 -error:       0

2013.05 . 02 15 : 30 : 00 :     1 :   10.0 , 2 : - 10.0 -error:       0

2013.05 . 02 15 : 30 : 00 :     1 :   10.0 , 2 : - 10.0 -error:       0

2013.05 . 02 16 : 03 : 26 :     1 :   10.0 , 2 :   10.0 -error:       0

 
세상에. 나는 아직 이것에 대해 아무 생각이 없습니다. 뭐가 문제 야?
 
jollydragon : 맙소사. 나는 아직 이것에 대해 아무 생각이 없습니다. 뭐가 문제 야?
  1. 도대체 어떻게 알아야 할까요? 모든 코드를 게시하지 않았습니다.(표시기 없음, iCustom 없음, 루프 없음)
  2. 표시기는 여전히 10이지만 (첫 번째) 이미지에는 간격이 표시됩니다. 커서가 어디에 있었는지 알 수 없습니다. 갭을 넘었나요?
  3. 당신은 정보가 없기 때문에 아무 생각이 없습니다. 변수 값을 포함 하는 경우 앞뒤에 인쇄 문을 추가하고 추적합니다.
 

친애하는 여러분, 사실 시간을 절약하기 위해 중요한 코드를 뺍니다.

그러나 귀하의 도움에 감사드립니다. 여기에 EA와 표시기의 파일을 모두 첨부하겠습니다.

첨부 후 파일명은 자동으로 변경되오니 참고 부탁드립니다. 두 단어 사이에 임의의 문자가 삽입됩니다. 내 컴퓨터에는 "Trade Joy"와 "Solar Joy"가 있습니다.

해결책을 기대합니다. :-)

파일:
tradebjoy.mq4  12 kb
trademjoy.ex4  17 kb
solarxjoy.mq4  7 kb
solarcjoy.ex4  8 kb