Ubzen 시스템 개발 프로세스 - 페이지 4

 
sakis :


나는 시장이 방향을 바꿀 때 매도해야 하는 두 시스템 모두에 대해 관심을 갖고 있습니다.

3WLMA와 100SMA 30분 차트 EUR/USD tp 150pips 사이에서 간단한 크로스오버를 만들고 SL이 아닌 크로스오버가 발생할 때 종료하면 극단적인 상황이 됩니다.

내가 언젠가 그것을 사용하는 수익성있는 시스템 결과를보고 13 % drawndowm으로 나에게 다시 작성하십시오.

이 시스템(3LWMA 100SMA 크로스)은 EURUSD H1, H4 및 일일 차트에서 작동하지 않습니다.
 
zzuegg :
이 시스템(3LWMA 100SMA 크로스)은 EURUSD H1, H4 및 일일 차트에서 작동하지 않습니다.

안녕 zzuegg 나는 그것이 30min 차트에서 작동하고 유로 최소 차트에서만 작동한다는 것을 알고 있습니다.
 

sakis :

hi zzuegg i know that,

30분 차트에서 작동하며 유로에서만 작동합니다.

macd를 사용하지 않고 시스템을 자체적으로 두십시오.
 
sakis :


때때로 시스템은 사람의 눈 때문에 자동보다 실시간 거래에서 더 잘 작동합니다.

샤넬과 트러스트가 일어나기 전에

채널 오버슈트 스파이크가 뒤따르는 겹치는 파도가 발생하기 전에 역추세 움직임을 취하지 않기 때문에

또한 1~2일의 짧은 기간에 3~4번째 움직임이 발생하고 가격이 강한 손에 있음을 의미하기 때문에 높은 틱 값이 발생하면 모든 방법으로 브레이크 아웃을 취하십시오.

그래서 우리는 이 인간의 눈을 통제하는 필터가 필요합니다

 

좋아, 여기 내가 말한 나쁜 기간이 있습니다. 이제 1년 단위로 거꾸로 실행해 보겠습니다. 2009,2008 등

연간 결과는 다음과 같습니다.

2010--최대 DD= 6.47____Rel-DD= 6.47____순수익=4588____요소=2.48
2009년--최대-DD=26.76____Rel-DD=26.76____순수익=-380____요소=0.94
2008--최대 DD=19.79____Rel-DD=19.79____순수익=1096____요소=1.20
2007--최대-DD= 7.10____Rel-DD= 7.10____Net_Profit=1506____Factor=1.62
2006년--최대-DD=20.46____Rel-DD=20.46____순_이익=-1612____인자=0.63
2005년--최대-DD= 8.79____Rel-DD= 8.79____순수익= -23____인자=0.99

2005년----------------

2006-----------------

2007-----------------

2008--------------

2009년 ------------------

2010년----------------

몇 가지 관찰.

1) 시스템은 대부분의 경우 무작위가 아닌 연속으로 지는 경향이 있습니다. 기사의 Z-점수가 이에 도움이 될 수 있습니다.

이것은 전문 트레이더가 연간 20-30%의 수익을 찾는 이유를 강조하는 데 도움이 됩니다.

 

여기 에서 찾을 수 있는 Fxdd의 데이터를 사용하고 있기 때문에 지금은 2005년으로 돌아가기만 할 수 있습니다. 내가 이 데이터를 사용하는 이유는 Fxdd가 내 브로커처럼 주말에 닫히고 기본적으로 주말 간격이 있기 때문입니다. 또한 그들의 시간 설정은 내 중개인의 시간 설정에 더 가깝습니다. 시간이 있으면 여기 에서 2000-2005년 데이터를 테스트할 수 있습니다. 그들의 주 영업은 수요일에 시작되며 주 6일 운영됩니다.

내가 시각적으로 본 유일한 기간은 2010년 1월-3월 기간입니다. 가장 좋은 추측은 이 시스템이 타이트하거나 매우 휘발성 범위에 있기 때문에 순차적으로 손실되고 있다는 것입니다. 그러나 이는 2008년에만 적용되며 차트를 살펴보는 경험이 제한적일지라도 글로벌 금융 위기와 관련이 있을 수 있으며 그 당시 시장은 공포에 더 많이 움직였을 수 있습니다.

이제 어떻게 해야 할까요?

- 결과를 받아들이고(패배하는 해도 OK), 우리의 켈리를 계산하고 욕심을 부리지 않습니까?

- Z-Score 와 같은 더 많은 통계 분석으로 계속 전진하십시오. 하지만 손실 간의 상관관계에 대한 확인을 받은 경우에도 어떻게 됩니까? 데이터를 필터링하려면 아래와 같은 다른 방법을 사용해야 할 수도 있습니다.

- 안 좋은 시기에 비주얼 모드로 이것을 보고 무엇이 그것을 죽이는지 피하려고 합니까? 단점은 이것이 커브 피팅으로 이어질 수 있다는 것입니다... 너무 많은 과거 지식을 회피하는 것이 백 테스트를 보기 좋게 만들기 위해 사용하는 경우입니다.

- 범위, 변동성, 시간, 볼륨 등과 같은 일부 블라인드 필터를 적용하시겠습니까? 여기서 단점은 필터가 거래 횟수를 제한한다는 것입니다. 예: 한 번에 한 방향으로 거래하거나 긴 추세를 유지하는 것은 대부분의 사람들이 인식하지 못하는 필터입니다. 이 시스템에 대한 나의 유일한 불만은 대부분의 사람들을 행복하게 만들기 위해 합리적인 시간 내에 1,000달러를 행복으로 바꿀 만큼 충분히 활성화되지 않는다는 것입니다. 그러나 계정에 다른 안정적인 시스템을 추가하면 극복할 수 있습니다.

-마지막으로 가장 선호하지 않는 옵션: 시스템을 더 많이 변경하십시오. 예시:

Scalp on Direction - 틱 데이터가 필요하다는 단점이 있습니다. Solid MM 원칙이 이러한 추가 기능과 함께 작동할 수 있습니까?

b) 방향의 피라미드 - 가격이 올라갈수록 제비를 추가하십시오. - 단점이 우리에게 불리할 때 어떻게 닫습니까?

c) 달러 비용 평균화 - 이익을 취하기 전에 시간 간격을 통해 추가합니다. 단점은 상황에 대한 고려가 없습니다.

d) 그리드 - 위치가 우리에 대해 고정된 거리만큼 동일한 크기를 추가합니다. - 단점, 거꾸로 된 RRR로 이어지며 MM이 따라갈 수 없습니다.

e) 위의 방법 중 하나에 대한 Martingale/Progression(ha.ha.ha.ha). 작은 계정을 큰 계정으로 만들고 싶은 사람에게는 이것이 매력적으로 들릴 수 있습니다. 결점, 확실히 적절한 MM을 따를 수 없습니다.

저는 개인적으로 이것을 있는 그대로 부르고 MM으로 앞으로 나아가는 쪽으로 기울고 있습니다.

나는 다른 사람들이 "안돼요, 더 나은 것이 필요합니다"라고 느낄 때 다른 사람들이 어떻게 생각하는지 알고 싶습니다.

 
ubzen :

지금은 여기 에서 찾을 수 있는 Fxdd의 데이터를 사용하고 있기 때문에 2005년으로 돌아가기만 하면 됩니다. 내가 이 데이터를 사용하는 이유는 Fxdd가 내 브로커처럼 주말에 닫히고 기본적으로 주말 간격이 있기 때문입니다. 또한 그들의 시간 설정은 내 중개인의 시간 설정에 더 가깝습니다. 시간이 있으면 여기 에서 2000-2005년 데이터를 테스트할 수 있습니다. 그들의 주 영업은 수요일에 시작되며 주 6일 운영됩니다.

내가 시각적으로 본 유일한 기간은 2010년 1월-3월 기간입니다. 가장 좋은 추측은 이 시스템이 타이트하거나 매우 불안정한 범위에 있기 때문에 순차적으로 손실되고 있다는 것입니다. 그러나 이는 2008년에만 적용되며 차트를 살펴보는 경험이 제한적일지라도 글로벌 금융 위기와 관련이 있을 수 있으며 그 당시 시장은 공포에 더 많이 움직였을 수 있습니다.

이제 어떻게 해야 할까요?

- 결과를 받아들이고(잃어버린 해가 있는 것처럼), 우리의 켈리를 계산하고 욕심을 부리지 않습니까?

- Z-Score 와 같은 더 많은 통계 분석으로 계속 전진하십시오. 하지만 손실 간의 상관관계에 대한 확인을 받은 경우에도 어떻게 됩니까? 데이터를 필터링하려면 아래와 같은 다른 방법을 사용해야 할 수도 있습니다.

- 안 좋은 시기에 시각 모드로 이 물건을 보고 무엇이 문제를 일으키는지 피하려고 합니까? 단점은 이것이 커브 피팅으로 이어질 수 있다는 것입니다... 너무 많은 과거 지식을 회피하는 것이 백 테스트를 보기 좋게 만들기 위해 사용하는 경우입니다.

- 범위, 변동성, 시간, 볼륨 등과 같은 일부 블라인드 필터를 적용하시겠습니까? 여기서 단점은 필터가 거래 횟수를 제한한다는 것입니다. 예: 한 번에 한 방향으로 거래하거나 긴 추세를 유지하는 것은 대부분의 사람들이 인식하지 못하는 필터입니다. 이 시스템에 대한 나의 유일한 불만은 대부분의 사람들을 행복하게 만들기 위해 합리적인 시간 내에 1,000달러를 행복으로 바꿀 만큼 충분히 활성화되지 않는다는 것입니다. 그러나 계정에 다른 안정적인 시스템을 추가하면 극복할 수 있습니다.

-마지막으로 가장 선호하지 않는 옵션: 시스템을 더 많이 변경하십시오. 예시:

Scalp on Direction - 틱 데이터가 필요하다는 단점이 있습니다. Solid MM 원칙이 이러한 추가 기능과 함께 작동할 수 있습니까?

b) 방향의 피라미드 - 가격이 올라갈수록 제비를 추가하십시오. - 단점이 우리에게 불리할 때 어떻게 닫습니까?

c) 달러 비용 평균화 - 이익을 취하기 전에 시간 간격을 통해 추가합니다. 단점은 상황에 대한 고려가 없습니다.

d) 그리드 - 위치가 우리에 대해 고정된 거리만큼 동일한 크기를 추가합니다. - 단점, 거꾸로 된 RRR로 이어지며 MM이 따라갈 수 없습니다.

e) 위의 방법 중 하나에 대한 Martingale/Progression(ha.ha.ha.ha). 작은 계정을 큰 계정으로 만들고 싶은 사람에게는 이것이 매력적으로 들릴 수 있습니다. 단점은 확실히 적절한 MM을 따를 수 없다는 것입니다.

저는 개인적으로 이것을 있는 그대로 부르고 MM으로 앞으로 나아가는 쪽으로 기울고 있습니다.

나는 다른 사람들이 "안돼요, 더 나은 것을 요구할 것입니다"라고 느낄 때 다른 사람들이 어떻게 생각하는지 알고 싶습니다.


안녕,

방향에 대한 피라미드형은 강력해 보입니다. 이것이 바로 제 버전이 하는 일입니다. 나는 2차 거래로 피라미드를 만든다.

불행히도 MAE는 평균이 이 전략에서 작동하지 않을 수 있음을 보여줍니다. 불행히도 저는 그것을 좋아하기 때문에 말합니다.


하지만 제가 가지고 있는 또 다른 질문은 필립입니다.

스크립트에서 OrderOpen과 OrderClose 사이의 시간을 조사하고 있지만 다이어그램에서 볼 수 있듯이 개요와 올바른 MAE/MFE 계산을 얻기 위해 열기/닫기 전후의 시간도 조사해야 합니까? 내가 잘못된 길을 가고 있습니까?

 
zzuegg :

하지만 제가 가지고 있는 또 다른 질문은 필립입니다.

스크립트에서 OrderOpen과 OrderClose 사이의 시간을 조사하고 있지만 다이어그램에서 볼 수 있듯이 개요와 올바른 MAE/MFE 계산을 얻기 위해 열기/닫기 전후의 시간도 조사해야 합니까? 내가 잘못된 길을 가고 있습니까?


옳은. 거래별로 MAE에 대한 시간이 MFE에 대한 시간에 비해 처음 발생했는지 마지막에 발생했는지 계산해야 합니다. MFE 이전에 MAE가 발생하는 거래를 "유형 1"이라고 합니다. MFE가 있는 거래는 MAE 이전에 발생하는 거래를 "유형 2"라고 합니다.

전략의 시장 예측 능력을 표현하기 위한 쉬운 척도는 유형 1 거래의 발생을 총 거래 횟수로 단순히 비율을 지정하고 100%를 곱하는 것입니다. 1년에 100개의 거래가 있고 그 중 90개가 유형 1 거래로 밝혀지고 그 중 10개가 유형 2라고 가정해 보겠습니다. 따라서 "예측 성공률"은 90/100 x 100% = 90%입니다.

단기 시장 예측률이 더 좋은 전략이 단기 시장 방향을 정확하게 예측하지 못하는 전략보다 더 바람직합니다. (모든 명백한 이유로)
 

알겠습니다. 하지만 TimeToMAE가 개방 시간에 대해 부정적이고 긍정적이 되도록 허용해야 합니까? 당신이 일찍 거래를 입력했을 때 양수 tToMAE 및 늦게 입력했을 때 음수. 물론 값을 평균화하면 완벽한 전략이 될 수 있으므로 tToMAE의 StdDev도 살펴봐야 합니다.

내가보기에 당신은 부정적인 tToMAE를 허용하지 않습니다.

WatchBarsBeforeOpen 및 WatchBarsAfterClose 변수를 도입함으로써 이 문제를 극복했다고 생각합니다. 아직 초기 작업이 진행 중입니다. tToMAE 및 tToMFE는 사용된 시간 프레임이 허용하는 한 정확한 분 단위입니다.

아직 포함된 분석이 없으며 원시 데이터만 있습니다.

 //+------------------------------------------------------------------+
//|                                      AdvancedReport_03_04_11.mq4 |
//|                                                           zzuegg |
//|                                       when-money-makes-money.com |
//+------------------------------------------------------------------+
#property copyright "zzuegg"
#property link       "when-money-makes-money.com"

extern int WatchBarsBeforeOpen= 10 ;
extern int WatchBarsAfterClose= 10 ;
extern int WatchPeriod= 0 ;

int ticket[];
int mae[];
int mae.time[];
int mfe[];
int mfe.time[];
int mfee[];
int profit[];
int missed[];

void reportTrade( int trade){
   OrderSelect (trade,SELECT_BY_TICKET,MODE_HISTORY);
   int start   =(iBarShift(OrderSymbol(),WatchPeriod,OrderOpenTime(),false) +WatchBarsBeforeOpen)+ 1 ;
   int end     =iBarShift(OrderSymbol(),WatchPeriod,OrderCloseTime(),false) -WatchBarsAfterClose;
   int highest =iHighest (OrderSymbol(),WatchPeriod,MODE_HIGH,(start-end)+ 1 ,end);
   int lowest  =iLowest  (OrderSymbol(),WatchPeriod,MODE_LOW,(start-end)+ 1 ,end);
   // Print(OrderTicket()+"  "+start+"  "+end+"  "+highest+"  "+lowest);
   ArrayResize (ticket, ArraySize (ticket)+ 1 );   
   ArrayResize (mae, ArraySize (mae)+ 1 );
   ArrayResize (mae.time, ArraySize (mae.time)+ 1 );
   ArrayResize (mfe, ArraySize (mfe)+ 1 );
   ArrayResize (mfe.time, ArraySize (mfe.time)+ 1 );
   ArrayResize (mfee, ArraySize (mfee)+ 1 );
   ArrayResize (profit, ArraySize (profit)+ 1 );
   ArrayResize (missed, ArraySize (missed)+ 1 );
   
   //Print(TimeMinute(OrderOpenTime())+"  "+TimeMinute(OrderCloseTime())+"  "+TimeMinute(iTime(OrderSymbol(),WatchPeriod,lowest))+"  "+TimeMinute(iTime(OrderSymbol(),WatchPeriod,highest)));
   ticket[ ArraySize (ticket)- 1 ]            =OrderTicket();
   switch (OrderType()){
       case OP_BUY:{
         mae[ ArraySize (mae)- 1 ]            =(OrderOpenPrice()-iLow(OrderSymbol(),WatchPeriod,lowest))/MarketInfo(OrderSymbol(),MODE_POINT);
         mae.time[ ArraySize (mae.time)- 1 ]  =(OrderOpenTime()-iTime(OrderSymbol(),WatchPeriod,lowest))/ 60 ;
         mfe[ ArraySize (mae)- 1 ]            =(iHigh(OrderSymbol(),WatchPeriod,highest)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
         mfe.time[ ArraySize (mae.time)- 1 ]  =(OrderOpenTime()-iTime(OrderSymbol(),WatchPeriod,highest))/ 60 ;
         profit[ ArraySize (profit)- 1 ]      =(OrderClosePrice()-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
         missed[ ArraySize (missed)- 1 ]      =(mae[ ArraySize (mae)- 1 ]+mfe[ ArraySize (mfe)- 1 ])-profit[ ArraySize (profit)- 1 ];
         mfee[ ArraySize (mfee)- 1 ]          =(mfe[ ArraySize (mfe)- 1 ])-profit[ ArraySize (profit)- 1 ];
       break ;
      }
       case OP_SELL:{
         mae[ ArraySize (mae)- 1 ]            =(iHigh(OrderSymbol(),WatchPeriod,highest)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);
         mae.time[ ArraySize (mae.time)- 1 ]  =(OrderOpenTime()-iTime(OrderSymbol(),WatchPeriod,highest))/ 60 ;
         mfe[ ArraySize (mae)- 1 ]            =(OrderOpenPrice()-iLow(OrderSymbol(),WatchPeriod,lowest))/MarketInfo(OrderSymbol(),MODE_POINT);
         mfe.time[ ArraySize (mae.time)- 1 ]  =(OrderOpenTime()-iTime(OrderSymbol(),WatchPeriod,lowest))/ 60 ;
         profit[ ArraySize (profit)- 1 ]      =(OrderOpenPrice()-OrderClosePrice())/MarketInfo(OrderSymbol(),MODE_POINT);
         missed[ ArraySize (missed)- 1 ]      =(mae[ ArraySize (mae)- 1 ]+mfe[ ArraySize (mfe)- 1 ])-profit[ ArraySize (profit)- 1 ]; 
         mfee[ ArraySize (mfee)- 1 ]          =(mfe[ ArraySize (mfe)- 1 ])-profit[ ArraySize (profit)- 1 ];      
       break ;
      }
   }  
}

void writeCSV( string EA.name, string EA.parameter= "" ){
   int hnd= FileOpen (EA.name+ "-" +EA.parameter+ ".csv" , FILE_CSV | FILE_WRITE , ";" );
   FileWrite (hnd, "Ticket" , "MAE" , "TimeToMAE" , "MFE" , "TimeToMFE" , "MFEE" , "Profit" , "Missed" );
   for ( int i= 0 ;i< ArraySize (mae);i++){
       FileWrite (hnd,ticket[i],mae[i],mae.time[i],mfe[i],mfe.time[i],mfee[i],profit[i],missed[i]);
   }
   FileClose (hnd);
}


void AdvancedReport.doStatistics( string EA.name, string EA.parameters= "" , int EA.limitMagicNumber=- 1 ){
   for ( int i= 0 ;i<OrdersHistoryTotal();i++){
       OrderSelect (i,SELECT_BY_POS,MODE_HISTORY);
       if (OrderMagicNumber()==EA.limitMagicNumber || EA.limitMagicNumber==- 1 ){
         reportTrade(OrderTicket());
      }
   }
   
   
   writeCSV(EA.name,EA.parameters);
}
 
ubzen :

좋아, 여기 내가 말한 나쁜 기간이 있습니다. 이제 1년 단위로 거꾸로 실행해 보겠습니다. 2009,2008 등

연간 결과는 다음과 같습니다.

2010--최대 DD= 6.47____Rel-DD= 6.47____순수익=4588____요소=2.48
2009년--최대-DD=26.76____Rel-DD=26.76____순수익=-380____요소=0.94
2008--최대 DD=19.79____Rel-DD=19.79____순수익=1096____요소=1.20
2007--최대-DD= 7.10____Rel-DD= 7.10____Net_Profit=1506____Factor=1.62
2006년--최대-DD=20.46____Rel-DD=20.46____순_이익=-1612____인자=0.63
2005년--최대-DD= 8.79____Rel-DD= 8.79____순수익= -23____인자=0.99

2005년----------------

2006-----------------

2007-----------------

2008--------------

2009년 ------------------

2010년----------------

몇 가지 관찰.

1) 시스템은 대부분의 경우 무작위가 아닌 연속으로 지는 경향이 있습니다. 기사의 Z-점수가 이에 도움이 될 수 있습니다.

이것은 전문 트레이더가 연간 20-30%의 수익을 찾는 이유를 강조하는 데 도움이 됩니다.



몇 개월 및 몇 년에 걸친 ROI 데이터가 있으면 앞으로의 파멸 위험을 평가하는 데 필요한 데이터가 있습니다.

http://www.futuresmag.com/Issues/2009/August2009/Pages/Minimizing-your-risk-of-ruin.aspx

이 백테스팅 데이터는 백테스팅 결과에서 미래 결과를 나타내는 데 활용할 수 있는 무언가를 실제로 계산하는 데 필요한 데이터입니다.

Z-점수는 시계열에 의존하기 때문에 미래 결과를 예측하지 못합니다. 2009년의 z-점수가 2011년과 관련이 있는 유일한 방법은 2011년의 시장 가격 활동이 본질적으로 2009년의 반복인 경우입니다.

Z-점수는 평가하기에 흥미로운 통계이지만 전략이 앞으로 어떻게 수행될지에 대한 가치나 통찰력을 추가하지 않습니다. CTA, 자금 관리자, Morningstar 등이 전문적으로 관리되는 계정의 Z-점수를 추적 및 보고하지 않는 데에는 이유가 있습니다. 가치 없는 성공의 척도입니다.

파산 위험을 계산하고 중간값 하락은 외환 업계뿐만 아니라 전문가가 하는 일입니다.

또한 브로커의 관점에서 보면...백테스팅을 위해 다른 브로커를 사용하는 것은 그들의 전략을 기본 시계열의 전략과 분리시키려는 가난한 사람의 노력과 비슷합니다. 미래 시계열이 어떻게 보일지 모르지만 두 브로커의 과거 시계열이 동일하지 않으므로 서로 다른 소스의 광범위한 과거 데이터 세트에 대해 백테스트한 다음 전략이 얼마나 강력한지 분석하는 것이 좋습니다. 이 견고함은 전략이 미래 시계열에서 얼마나 잘 수행될 수 있는지를 말해주기 때문입니다.

전문가들은 다양한 역사적 시장 환율에 대해서도 백테스트합니다. 어떤 경우에는 몬테카를로 방법을 사용하여 백테스팅을 강화하기 위해 실제 시장 데이터와 통계적으로 동일한 완전히 가상의 시장 데이터를 생성합니다.

생각할 거리에 불과하므로 이 모든 사실을 잘 알고 있을 수 있으며 대체 분석 방법을 선택하는 데에도 똑같이 타당한 이유가 있을 수 있습니다.