포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 223

 
ALXIMIKS :


나는 시간이 있었다 - 나는 작업에 대한 알고리즘을 생각해 내고 그것을 설명했다 (세부적으로 보인다, 글쎄, 아마도 누군가에게는 거의 정확할 것이다 - 결국 사람들은 접근성 측면에서 다르다)

풍자? 몰라, 아무 생각도 없었고, 그저 도와줬을 뿐이야.

누군가 코드를 작성합니까? 아직 최적화? (예, 할 수 있지만 그만한 가치가 있습니까?)

(ps artmedia70, 불쾌하지 않습니다. 저는 일반적으로 귀하의 태도와 의견을 존중합니다. 솔직히 말해서, 이전에 귀하가 iCustom을 사용하여 코드를 제공하여 최적화되지 않은 온화하게 표현했습니다.)

새 막대에 대한 수표에 삽입하면 이와 같은 것이 작동합니다.

모든 막대에 대해 지속적으로 반복하지 않도록 특정 수의 프랙탈 이후에 kilkict=iBars(sy,tf) 범위를 좁히면 코드가 더 최적화됩니다.

고맙습니다. 당신의 알고리즘에 따라 나는 쓰기 시작했습니다. 그러나 깃발이 있으면 베이징이 암에 걸리기 전처럼 당신에게 달려 있습니다. 다시 한번 감사합니다.
 
gince :
고맙습니다. 당신의 알고리즘에 따라 나는 쓰기 시작했습니다. 그러나 깃발이 있으면 베이징이 암에 걸리기 전처럼 당신에게 달려 있습니다. 다시 한번 감사합니다.


https://www.mql5.com/ru/forum/131516/page34

아래 - 초기 기사에서 그의 경험을 공유했습니다. 이 문제에 관한 것입니다.

 
tara :


https://www.mql5.com/ru/forum/131516/page34

아래 - 초기 기사에서 그의 경험을 공유했습니다. 이 문제에 관한 것입니다.


고마워
 

무엇이 잘못 될 수 있습니까?

때때로 한 테스트 중에 테스트할 때 "O"로 나누면 오류가 발생합니다.

 double LotsOptimized()
  {
   double lot=Lots;
   double Lot;
   if (isFloatLots == true )           // если флаг true то проводится оптимизация величины лота, иначе лот неизменен
     {  
         int orders=HistoryTotal();   // history orders total
         int losses= 0 ; // number of losses orders without a break
         double loss= 0 ;              
//---- select lot size
         double   lot_min         = MarketInfo( Symbol (), MODE_MINLOT  ); 
         double   lot_max         = MarketInfo( Symbol (), MODE_MAXLOT  ); 
         double   lot_step        = MarketInfo( Symbol (), MODE_LOTSTEP ); 
         double   lotcost         = MarketInfo( Symbol (), MODE_TICKVALUE );       
                
        lot                             = 0.0 ;
         double   dollarsPerPip   = 0.0 ;
        
        lot = AccountBalance()*MaxR/ 100.0 ;
        dollarsPerPip = lot/SL;
                
        lot = NormalizeDouble ( dollarsPerPip/lotcost, 2 );      
        
        lot = NormalizeDouble ( lot / lot_step, 0 ) * lot_step;
        
         if ( lot < lot_min ) lot = lot_min;
         if ( lot > lot_max ) lot = lot_max;
        
         if ( AccountFreeMarginCheck( Symbol (), type, lot ) < 10 || GetLastError () == 134 ) 
        { 
                 Alert ( "Impossible to open position with lot = " , DoubleToStr( lot, 2 ), ". Not enough money." );
                 return (- 1 );
        }
//---- return lot size
//         if(lot<0.1) lot=0.1;
           
//---- calcuulate number of losses orders without a break
           if (DcF> 0 )
          {  
         for ( int i=orders- 1 ;i>= 0 ;i--)
                  {
                 if ( OrderSelect (i,SELECT_BY_POS,MODE_HISTORY)== false ) 
                   { 
                         Print ( "Ошибка в истории!" ); 
                         break ;
                   }
                 if (OrderSymbol()!= Symbol () || OrderType()>OP_SELL) 
                   continue ;
                 if (OrderProfit()> 0 )   break ;
                 if (OrderProfit()< 0 ) losses++;loss=loss-OrderProfit();
                  }
         if (losses>=losses_orders) {Lot= NormalizeDouble ( MathAbs (loss)/FV/MarketInfo( Symbol (),MODE_TICKVALUE)/TakeProfit1, 1 );
         }
       }
     }  
//---- return lot size
     if (Lot>lot) lot=Lot; 
   
  return (lot);
  }
 
Stells :

무엇이 잘못 될 수 있습니까?

때때로 한 테스트 중에 테스트할 때 "O"로 나누면 오류가 발생합니다.


"/" 기호를 검색하고 사용자의 어떤 변수가 나눗셈에 참여하는지 확인합니다.

에스엘;

F.V.;

테이크프로핏1 .

그 중 하나는 0입니다. 옵션으로.

 
Stells :

무엇이 잘못 될 수 있습니까?

때때로 한 테스트 중에 테스트할 때 "O"로 나누면 오류가 발생합니다.

유형 검사 수행:

 if (!SL== 0 )
   {
  dollarsPerPip = lot/SL;
   }
등 .
 
ALXIMIKS :


다시 감사합니다. 나는 당신의 코드를 이해하려고 노력했고 주석을 썼습니다. 나는 이것을 이해하기 위해 이것을했고 아마도 언젠가 비슷한 것을 쓸 것입니다. 나는 다른 사람의 일의 논리를 파악하여 공부합니다. 그럼 제가 직접 해봅니다.

내가 쓴 댓글을 확인하고 필요한 경우 수정하는 시간을 가질 수도 있습니다. 그리고 또 다른 질문.

   if (Bufer0!= EMPTY_VALUE ) 

이것은 표시기 버퍼가 더 이상 비어 있지 않음을 의미합니까 아니면 이 변수가 다른 것을 의미합니까? 표시기 버퍼는

Bufer0[i]

주석이 있는 모든 코드

 int     counted_bars=IndicatorCounted();
//----
   int    a1= 0 ,                               //преведущий фрактал (-1 ->нижний, 1 -> верхний)
         a2,                                 //нынешний фрактал  (-1 ->нижний, 1 -> верхний)
         a3,                                 //сума преведущий + нынешний
         kilkict,
         frac,                               //frac - флаг существования фракталов,
         frac1= 0 ;                             //frac1- счетчик фракталов (+1 или 0 за цикл)
   int i;
   double Bufer0;                             //
   kilkict=iBars( NULL , 0 );

   for (i= 3 ; i<kilkict;i++){
      a2= 0 ;frac= 0 ;
       if ( iFractals ( NULL , 0 , MODE_UPPER, i)> 0 ) {            
         if (Bufer0!= EMPTY_VALUE ) {           //
            a2+= 1 ;                           //к числу фракталов добовляем 1
            frac= 1 ;                           //флаг - фрактал есть
            frac1++;                         //счечик увеличиваем на 1
         }
      }
       if ( iFractals ( NULL , 0 , MODE_LOWER, i)> 0 ) {            
         if (Bufer0!= EMPTY_VALUE ) {           //
             if (a2== 0 ){
               frac1++;                       //счечик увеличиваем на 1 
               frac= 1 ;                       //флаг - фрактал есть
            }
            a2+=- 1 ;                           //к числу фракталов добовляем -1(т. е. уменшаем)
         }
      } 
       if (frac== 0 ){ continue ;}                 // если флага нет (фрактал ненайден)
       if (frac1== 1 ){                         //если счечик равен 1,
         a1=a2; continue ;
      }          
      a3=a1+a2;
       if (a3< 0 )           { a1=a2; continue ;} //Два фрактала вниз  подряд найдено// 
       if (a3> 0 )           { a1=a2; continue ;} //Два фрактала вверх подряд найдено //
       if (a3== 0 && a1== 0 ) { a1=a2;} // Два фрактала подряд вверх и два фрактала подряд вниз найдено //
   }

 

gince :

 if (Bufer0!= EMPTY_VALUE ) 

이것은 표시기 버퍼가 더 이상 비어 있지 않음을 의미합니까 아니면 이 변수가 다른 것을 의미합니까?

이 줄은 제거할 수 있습니다. iFractals()는 "빈 값"( EMPTY_VALUE )이 아니라 프랙탈이 없으면 0을 반환합니다.

질문이 있습니다. 두 개의 연속 프랙탈을 찾는 지표를 만들려고 합니까? 아니면 현재 막대에 가장 가까운 Expert Advisor에서 두 개의 연속 프랙탈을 찾고 있습니까? 이 문제는 쓸데없는 호기심이 아니기 때문입니다. 지표와 EA의 검색 방법은 다릅니다. 지표는 끝에서 시작까지 계산되며 과거에서 현재까지, EA는 현재에서 과거까지 막대를 스캔합니다. 따라서 Expert Advisor와 지표에서도 검색 방향이 다릅니다.

그리고 마지막 질문: 출력은 무엇이어야 합니까?

 
artmedia70 :

이 줄은 제거할 수 있습니다. iFractals()는 "빈 값"(EMPTY_VALUE)이 아니라 프랙탈이 없으면 0을 반환합니다.

질문이 있습니다. 두 개의 연속 프랙탈을 찾는 지표를 만들려고 합니까? 아니면 현재 막대에 가장 가까운 Expert Advisor에서 두 개의 연속 프랙탈을 찾고 있습니까? 이 문제는 쓸데없는 호기심이 아니기 때문입니다. 지표와 EA의 검색 방법은 다릅니다. 지표는 끝에서 시작까지 계산되며 과거에서 현재까지, EA는 현재에서 과거까지 막대를 스캔합니다. 따라서 Expert Advisor와 지표에서도 검색 방향이 다릅니다.

그리고 마지막 질문: 출력은 무엇이어야 합니까?



동안 지표, 그리고 우리는 볼 것입니다. 지표와 EA의 검색 방법은 다릅니다. 지표는 끝에서 시작까지 계산되며 과거에서 현재까지, EA는 현재에서 과거까지 막대를 스캔합니다.

( i=kilkict;i> 0 ;i--)

결과는 상위 2개 -> 매도(아래쪽 화살표), 하위 2개 -> 구매(위쪽 화살표)입니다. 신호는 프랙탈 오른쪽에 +2 막대가 나타납니다. 이것이 역사를 시각적으로 먼저 살펴보고자 하는 것입니다. 그리고 아마도 필터가 필요할 것입니다.

 
ALXIMIKS :


...

그런 ...

...


그들이 "이것"대신에 "이것"을 쓰는 방법을 설명하십시오.

1. '이'는 'e'가 아니라 'e'로 쓴다는 사실을 모르나?

2. 손을 문자 "e"로 옮기는 것이 너무 게으르면 "e"를 누르기가 더 쉽습니까?

3. 키보드에 "e" 키가 없나요? 그렇지 않다면 왜 그녀가 아닌가?

4. 특별한 과시가 있습니까?

5. 다른 알 수 없는 이유. 어느?