KimIV의 유용한 기능 - 페이지 31

 
ShestkoFF писал (а) >>
글쎄, 나는 그것을 차단하지 않을 것입니다. 나는 이 오류를 위층에 전달하고 이미 거기에서 처리할 작업을 결정할 것입니다.

이 순간 고문의 작업이 차단되면이 고문이 빈 자리를 가질 수 있으며 이는 재앙이 될 것입니다.

:-) 그래서 당신은 긴 일시 정지에 대한 자신의 질문에 대답했습니다. 포지션을 열거나 주문을 하라는 신호의 시간을 기다리기 위해 수행됩니다.

Vasily, 성공적으로 저를 잘못된 길로 인도해 주셔서 다시 한 번 감사드립니다. 코드 수정에 급급할 뻔 했습니다... 그리고 다시 한번 저를 도와주셔서 감사합니다 :-)

 
KimIV писал (а) >> 를 썼습니다.

:-) 그래서 당신은 긴 일시 정지에 대한 자신의 질문에 대답했습니다. 포지션을 열거나 주문을 하기 위해 신호의 지속 시간을 기다리기 위해 수행됩니다 .

Vasily, 성공적으로 저를 잘못된 길로 인도해 주셔서 다시 한 번 감사드립니다. 코드 수정에 급급할 뻔 했습니다... 그리고 다시 한번 저를 도와주셔서 감사합니다 :-)

솔직히 논리를 이해하지 못했다.
예를 들어, 우리는 0.000001랏을 주문했습니다. 우리는 이것을 위해 서버 essesseno를 손에 넣습니다.
그리고 (함수 외부에서) 로트를 변경하는 대신 일시 중지합니다.
이 일시 중지의 결과로 주문 신호가 실제로 사라질 수 있지만 기다리지 않고 로트를 변경해야 합니다.
그래서 여기서 나는 일시 정지에 대해 동의하지 않습니다. 이 기능을 종료하고 위층에 오류 코드를 전달하고 거기에서 처리하기만 하면 됩니다.
당신이 내 길을 따른다면 아마도 우리는 유익한 거래를 놓치지 않을 것입니다!!! 엘크도 잡을 수 있어요 :)

추신: 내가 당신을 잘못된 길로 이끌 것입니다 :)

 
하지만 즉시 로트 계산 기능을 호출 해야 하고(맨 위로 이동하지 않음), 오류 카운터가 오버플로된 후에만 맨 위로 종료해야 하는 것 같았습니다.
 
Prival писал (а) >> 를 썼습니다.
하지만 즉시 로트 계산 기능을 호출해야 하고(맨 위로 이동하지 않음), 오류 카운터가 오버플로된 후에만 맨 위로 종료해야 하는 것 같았습니다.

네, 물론 이 함수를 바로 호출해야 하지만 그래도 오류가 발생한다면!!!
SetOrder 함수를 종료해야 하는 상황에서 종료를 맨 위로 호출합니다.
나는 그것을 다음과 같이 본다:


int 티켓 = SetOrder(.....);

if (티켓 > 0) {

// 다 괜찮아

} 또 다른 {

// 올바른 논리 오류

}


int SetOrder(....) // 티켓이나 음수 부호만 있는 오류 번호를 반환합니다.
{

int 티켓 = OrderSend(....)

if (티켓 < 0) {

// 세트 주문 오류 수정

}

}


즉, 발주 시 논리적 오류와 오류를 구분할 필요가 있다고 생각합니다. 나는 오늘 예제 구현을 제공하기를 바랍니다.
 
ShestkoFF писал (а) >>
솔직히 논리를 이해하지 못했다.

돈이 부족할 때만 잘못된 로트(0)를 주는 방식으로 로트 크기 계산 기능을 구축합니다. 다른 경우에는 로트가 최소 크기와 최대 크기 사이에서 정규화되고 상자화됩니다. 자금이 충분하지 않으면 일부 포지션이 마감될 때까지 기다려야 합니다.

ShestkoFF 작성 >>
예를 들어, 우리는 0.000001랏을 주문했습니다. 우리는 이것을 위해 서버 essesseno를 손에 넣습니다.

우리는 왜 그것을 했습니까? 의도적으로 잘못된 로트 크기를 보낸 이유는 무엇입니까? 그러한 행동을 어떻게 정당화할 수 있습니까?

ShestkoFF 작성 >>

이 기능을 종료하고 위층에 오류 코드를 전달하고 거기에서 처리하기만 하면 됩니다.

우리에게 무엇을 줄까요? 다른 로트 크기를 얻을 수 있습니까? 정확한 로트 크기를 바로 얻지 못한 이유는 무엇입니까? 이유를 말하십시오. 분석해보자...
 

나는 당신의 함수가 라이브러리 함수, 즉 보편적이라고 생각하기 때문에 모든 오류를 두 가지 범주로 나눌 필요가 있습니다.

  • SetOrder 함수 내에서 처리해야 하는 오류(연결 오류, 따옴표...)
  • SetOrder 함수 외부에서 처리해야 하는 오류(잘못된 로트 크기, 잘못된 중지 ...)

Функцию расчёта размера лота я строю таким образом, что неверный лот (ноль) она выдаст только в случае не хватки денег. В остальных случаях лот нормализуется и загоняется в рамки между минимальным и максимальным размерами. Если денег не хватает, то надо ждать, когда закроется какая-нибудь позиция.

이것은 전문가의 논리이며 다른 사람들은 다른 논리를 가질 수 있습니다. 따라서 외부에서 잘못된 로트가 있는 오류를 제거합니다.

오류 검사 블록.

여기 이 문제에 대한 제 비전이 있습니다. :) 위에서 썼듯이 오늘은 구현의 예를 보여 드리겠습니다.

 

내 모드 버전:



 int ModeInt ( int array [])
{
   int size = ArraySize ( array ) ;
   
   if ( size == 0 ) 
   {
       Print ( " Invalid parameter in function ModeInt(int array[]). It should be at least one element. " ) ;
       return ( 0 ) ;
   }
   
   int buffer [] ;
   ArrayCopy ( buffer , array ) ; 
   ArraySort ( buffer ) ;
   
   int max = 0 ;
   int maxValue = 0 ;
   
   int startIndex = 0 ;
   int startValue = buffer [ 0 ] ;
   
   for ( int i = 1 ; i < size ; i ++ )
   {
       if ( buffer [ i ] > startValue )
       {
         if ( max < i - startIndex )
         {
             max = i - startIndex ;
             maxValue = buffer [ startIndex ] ;
         }
         
         startIndex = i ;
         startValue = buffer [ i ] ;
       }
   }
   
   if ( max < size - startIndex )
   {
       max = size - startIndex ;
       maxValue = buffer [ startIndex ] ;
   }
   
   return ( maxValue ) ;
}
 
double ModeDouble ( double array [] , double interval )
{
   int size = ArraySize ( array ) ;
   
   if ( size == 0 ) 
   {
       Print ( " Invalid first parameter in function ModeDouble(double array[], double interval). It should be at least one element. " ) ;
       return ( 0 ) ;
   }
   
   if ( interval <= 0 ) 
   {
       Print ( " Invalid second parameter in function ModeDouble(double array[], double interval). It should be > 0 . " ) ;
       return ( 0 ) ;
   }
   
   double buffer [] ;
   ArrayCopy ( buffer , array ) ; 
   ArraySort ( buffer ) ;
   
   int max = 0 ;
   double maxValue = 0 ;
   
   int startIndex = 0 ;
   double startValue = buffer [ 0 ] ;
   
   double sum = startValue ;
   
   for ( int i = 1 ; i < size ; i ++ )
   {
       if ( buffer [ i ] >= startValue + interval )
       {
         if ( max < i - startIndex )
         {
             max = i - startIndex ;
             maxValue = ( sum ) / max ;
         }
         
         startIndex = i ;
         startValue = buffer [ i ] ;
         sum = 0 ;
       }
       sum += buffer [ i ] ;
   }
   
   if ( max < size - startIndex )
   {
       max = size - startIndex ;
       maxValue = ( sum ) / max ;
   }
 
   return ( maxValue ) ;
}
 
TheXpert писал (а) >>

내 모드 버전:


Xpert 님께, 귀하의 코드는 매우 간결해 보입니다. 물론 이것은 뚱뚱한 플러스입니다! 고맙습니다.

 
약속한 대로 내 버전의 기능을 게시합니다.
첨부파일에는 해당 기능을 사용하는 전문가가 기재되어 있습니다. 저는 AI 전문가를 기본으로 삼았습니다.
제 시간에 기능의 작동을 확인할 시간이 없었습니다. 즉, 예를 들어 8분이 지나면 신호를 다시 확인해야 한다고 생각합니다.
트레이드 서버 오류 생성 기능이 추가되어 해당 기능의 동작을 자세히 연구하고 오류를 식별할 수 있습니다.
 int errTest [] = { 0 , 128 , 0 , 142 , 0 , 143 , 0 , 4 , 132 } ;
errTest - 오류가 생성되는 순서, 0 오류 없음. 나는 불도저에서 시퀀스를 던졌습니다. 캐치를 찾을 필요가 없습니다.


비판 환영합니다 :)

파일:
 
ShestkoFF писал (а) >>
약속한 대로 내 버전의 기능을 게시합니다.
첨부파일에는 해당 기능을 사용하는 전문가가 기재되어 있습니다. 저는 AI 전문가를 기본으로 삼았습니다.
제 시간에 기능의 작동을 확인할 시간이 없었습니다. 즉, 예를 들어 8분이 지나면 신호를 다시 확인해야 한다고 생각합니다.
트레이드 서버 오류 생성 기능이 추가되어 해당 기능의 동작을 자세히 연구하고 오류를 식별할 수 있습니다.
errTest - 오류가 생성되는 순서, 0 오류 없음. 나는 불도저에서 시퀀스를 던졌습니다. 캐치를 찾을 필요가 없습니다.


비판 환영합니다 :)

기능에서 원칙적으로 내 편에서 한 가지 말할 수 있습니다. :) 나는 독창적이지 않고 항상 그렇듯이 말할 것입니다 :) - 너무 과부하.

결과적으로 5KB의 깨끗하고 이해하기 쉬운 코드의 Expert Advisor가 32KB의 bandura로 바뀌었습니다.


코드에 대한 질문이 있습니다.

1. 전문가의 작업을 비활성화하면 다시 시작할 때까지 더 이상 작동하지 않습니다. 비교적 많은 시간을 기다리지 않으시겠습니까?

2. 신경망 - 첫째, 플랫 신호를 제공하지 않습니다. 둘째 - 임계값이 없는 경우 최적화를 어떻게 기대할 수 있습니까 ??? 임계값이 없으면 이미 낮은 효율성(결국 선형)을 80%까지 죽입니다.



ZYZH: 기분을 상하게 하지 마세요. 저는 이 주제에 대한 비평가로 여기 있습니다. 달빛: .

사유: