[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 5. - 페이지 323

 

다음과 같은 일이 발생합니다.

 //+-------------------------------------------------------------------------------------+
//| Расчитываем количество идущих один за одним баров одного признака                   |
//+-------------------------------------------------------------------------------------+
int LastCandlesType( int directionMA)
{
   int cntUp,                                                                           // Счётчик идущих друг за другом свечей с..
       cntDn,                                                                           // .. требуемыми признаками
       t;                                                                               // Счётчик всех просчитанных баров
       
   for ( int i=i_AnyBarsToHistory; i>= 1 ; i--, t++)
   {
       if (directionMA == CROSS_UP)                                                       // Если машки направлены вверх
      {
         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt)               // Если бар соответствует требуемым признакам..
             cntDn++;                                                                   // .. прибавим 1 к счётчику
         if ((Close[i] - Open[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntDn = 0 ;                                                                 // .. счётчик обнуляем
                                                                                        
         if (i == 1 )
             Print ( " directionMA " , directionMA, "; i = " , i, "; Open[i] - Close[i] = " , Open[i] - Close[i], "; cntDn = " , cntDn);

         if (t == i_AnyBarsToHistory)
         {
             if (cntDn == i_sequentBarsСount)                                                 // Если cnt баров в подряд медвежьи..
                 return (REQUIRED_SEQUENTIAL_BEARS_GOT);                                     // .. Выходим из функции
         }
      }

       if (directionMA == CROSS_DN)                                                       // Если машки направлены вниз
      {
         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt)               // Если бар соответствует требуемым признакам..
             cntUp++;                                                                   // .. прибавим 1 к счётчику
         if ((Open[i] - Close[i]) >= i_sizeOfTrandBar * pt)                             // Если бар, не соответствует основному признаку..
             cntUp = 0 ;                                                                 // .. счётчик обнуляем
         if (i == 1 )
             Print ( " directionMA " , directionMA, "; i = " , i, "; Close[i] - Open[i] = " , Close[i] - Open[i], "; cntUp = " , cntUp);

         if (t == i_AnyBarsToHistory)
         {
             if (cntUp == i_sequentBarsСount)                                                 // Если cnt баров в подряд бычьи..
                 return (REQUIRED_SEQUENTIAL_BULLS_GOT);                                     // .. Выходим из функции
         }
      }
       return (REQUIRED_SEQUENTIAL_MISS);
   }
}

사실, 라인도 인쇄되지 않습니다:

 Print ( " directionMA " , directionMA, "; i = " , i, "; Close[i] - Open[i] = " , Close[i] - Open[i], "; cntUp = " , cntUp);

그래서 상류에 일종의 잼이 있습니다.

가장 흥미로운 점은 여기에 기본 반환을 추가하자마자 어떤 이유로든 항상 작동한다는 것입니다. 나는 라인에 대해 이야기하고 있습니다.

 return (REQUIRED_SEQUENTIAL_MISS);

비록 코드가 기초적인 것은 분명하지만 거기에는 오류가 있을 수 없을 것 같습니다.

 

모두에게 좋은! 친애하는 전문가 여러분, 예금 통화 의 이익이 증가 및 감소함에 따라 v_s가 증가하고 감소하는 이유를 알려주십시오.

value_profit()은 예금 통화의 이익 계산입니다.

이중 value_stop, value_step;
value_stop=((계정 잔액()/100)*1);
value_step=((AccountBalance()/100)*4);
이중 v_s;
if (value_profit()>=(value_step+value_stop))
(int v=1;v<=100;v++)
{
if (value_profit()>=(value_step+(value_stop*v)))
{
v_s=값_정지*v;
}
또 다른
{
if (value_profit()<=v_s)
close_all();
}
}
 
hoz :

사실, 라인조차도 인쇄되지 않습니다:

1. 왜 바로 모듈화를 하는가? 물론 사람마다 스타일이 다르겠지만 저는 먼저 컴팩트 버전을 다듬고 시계처럼 작동하면 모듈로 번역하겠습니다. 컴팩트 버전(외부 기능 Trade, LastCandlesType, GetStateOfMA, GetGeneralSignal 제외)은 마지막 페이지에서 start() 내부의 변형으로 제공되었습니다. 당신을 위해 어떻게 작동합니까? 작동하면 모듈로 나눕니다.

2. 내가 보기에 코드는 이전 코드와 완전히 동일합니다. 카운터 t는 카운터 i와 절대적으로 평행하게 변경됩니다. 그렇다면 i와 비교할 수 있다면 왜 t와 비교합니까? 그리고 논리적으로 더 나아가 코드가 작동하지 않으면 왜 i와 비교합니까?

3. 중요성에 대해 사과드립니다. 그러나 루프에서 출구를 제거하는 경우 이 옵션이 여전히 어떻게 작동합니까?

 int LastCandlesType( int directionMA){
         int cntUp, cntDn;
         for ( int i=i_AnyBarsToHistory; i>= 1 ; i--){
                 if (directionMA == CROSS_UP){
                         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntDn++; else cntDn= 0 ;
                         if (i == 1 ) Print ( " directionMA " , directionMA, "; i = " , i, "; Open[i] - Close[i] = " , Open[i] - Close[i], "; cntDn = " , cntDn);
                }
                 if (directionMA == CROSS_DN){
                         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntUp++; else cntUp= 0 ;
                         if (i == 1 ) Print ( " directionMA " , directionMA, "; i = " , i, "; Close[i] - Open[i] = " , Close[i] - Open[i], "; cntUp = " , cntUp);
                }
        }
         if ((directionMA==CROSS_UP)&&(cntUp>=i_sequentBarsСount)) return (REQUIRED_SEQUENTIAL_BEARS_GOT);
         if ((directionMA==CROSS_DN)&&(cntDn>=i_sequentBarsСount)) return (REQUIRED_SEQUENTIAL_BULLS_GOT);
         return (REQUIRED_SEQUENTIAL_MISS);
}

작동하지 않을 수도 있음을 이해합니다. 절대 모르실 수 있지만 더 자세히 이해하려면 이 점을 확인해야 합니다.

4. 순전히 개인적인 적응: 메타에디터가 아닌 다른 편집기에 줄 번호가 있는 코드를 입력하고 모든 변수의 각 변경 사항과 각각의 if 또는 switch 검사에서 동일한 줄에 인쇄합니다. 마지막 세미콜론 ). 줄 번호 형식으로 인쇄하십시오 - 확인 중인 값(들). 나는 if(tracing) {Print( StringConcatenate ("line_number: variable_name=", variable_name));} if(tracing) {Print( StringConcatenate ("line_number: variable_name=", variable_name));} 방식으로 if 뒤에 인쇄합니다. 그리고 bool tracing=false;//enable tracing과 같이 헤더에 변수를 선언합니다. . 그러면 본격적인 추적이 이루어지고 이에 따라 본격적인 디버깅이 가능해집니다. 그러나 진실은 로그를 더 자주 청소해야 한다는 것입니다. 즉시 메타에디터에 있다면 처음에는 다음과 같은 빈 템플릿을 만들 수 있습니다.

/*001*/

...

/*999*/

줄의 시작 부분에(이 방법이 작동함) 이 템플릿의 복사본에 코드를 입력합니다. 하지만 그렇게 생각하고 실제로는 이것을 시도했지만 일관성이 없었습니다.

 
rajak :

모두에게 좋은! 전문가 여러분, 예금 통화의 이익이 증가 및 감소함에 따라 v_s가 증가하고 감소하는 이유를 알려주세요.

value_profit()은 예금 통화의 이익 계산입니다.

이중 value_stop, value_step;
value_stop=((계정 잔액()/100)*1);
value_step=((AccountBalance()/100)*4);
이중 v_s;
if (value_profit()>=(value_step+value_stop))
(int v=1;v<=100;v++)
{
if (value_profit()>=(value_step+(value_stop*v)))
{
v_s=값_정지*v;
}
또 다른
{
if (value_profit()<=v_s)
close_all();
}
}
간단히 살펴보니 즉시 인용 부호가 있는 잼이 보였습니다. if 문 을 사용하는 방법을 알아보세요.
 
gyfto :

3. 중요성에 대해 사과드립니다. 그러나 루프에서 출구를 제거하는 경우 이 옵션이 여전히 어떻게 작동합니까?

 int LastCandlesType( int directionMA){
         int cntUp, cntDn;
         for ( int i=i_AnyBarsToHistory; i>= 1 ; i--){
                 if (directionMA == CROSS_UP){
                         if ((Open[i] - Close[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntDn++; else cntDn= 0 ;
                         if (i == 1 ) Print ( " directionMA " , directionMA, "; i = " , i, "; Open[i] - Close[i] = " , Open[i] - Close[i], "; cntDn = " , cntDn);
                }
                 if (directionMA == CROSS_DN){
                         if ((Close[i] - Open[i]) >= i_sizeOfSequentialCorrectionBar * pt) cntUp++; else cntUp= 0 ;
                         if (i == 1 ) Print ( " directionMA " , directionMA, "; i = " , i, "; Close[i] - Open[i] = " , Close[i] - Open[i], "; cntUp = " , cntUp);
                }
        }
         if ((directionMA==CROSS_UP)&&(cntUp>=i_sequentBarsСount)) return (REQUIRED_SEQUENTIAL_BEARS_GOT);
         if ((directionMA==CROSS_DN)&&(cntDn>=i_sequentBarsСount)) return (REQUIRED_SEQUENTIAL_BULLS_GOT);
         return (REQUIRED_SEQUENTIAL_MISS);
}

흠. 벌었다. 비주얼에서 여러 "화면"을 실행했는데 이 간격에서 모든 것이 명확합니다. 마지막 시간이 작동하지 않은 이유를 이해하는 것이 남아 있습니다. 이것은 앞으로 걸려 넘어지지 않는 데 도움이 될 것입니다.
 
hoz :

흠. 벌었다.


기쁜))))

호즈 :

마지막 시간이 작동하지 않은 이유를 이해하는 것이 남아 있습니다. 이것은 앞으로 걸려 넘어지지 않는 데 도움이 될 것입니다.

미래를 위해 Close[0] 또는 다른 알고리즘에서 창 경계로 간주될 대상에 도달하지 않고 종료하는 것은 좋지 않기 때문입니다. 동안이 아닙니다.

 
gyfto :

1. 왜 바로 모듈화를 하는가? 물론 사람마다 스타일이 다르겠지만 저는 먼저 컴팩트 버전을 다듬고 시계처럼 작동하면 모듈로 번역하겠습니다. 컴팩트 버전(외부 기능 Trade, LastCandlesType, GetStateOfMA, GetGeneralSignal 제외)은 마지막 페이지에서 start() 내부의 변형으로 제공되었습니다. 당신을 위해 어떻게 작동합니까? 작동하면 모듈로 나눕니다.

사실 나는 이런 글을 쓰는 것이 익숙하다. 그리고 오류를 찾기가 더 쉽습니다. 결국, 바로 지금, 나는 캔트가 LastCandlesType() 함수에 있다는 것을 즉시 알았습니다. 그러나 귀하의 선택권을 얻었지만 이유는 아직 명확하지 않습니다.

기프토 :

2. 내가 보기에 코드는 이전 코드와 완전히 동일합니다. 카운터 t는 카운터 i와 절대적으로 평행하게 변경됩니다. 그렇다면 i와 비교할 수 있다면 왜 t와 비교합니까? 그리고 논리적으로 더 나아가 코드가 작동하지 않으면 왜 i와 비교합니까?

늦게 썼다, .. 볼 도덕적 과부하.

기프토 :

작동하지 않을 수도 있음을 이해합니다. 절대 모르실 수 있지만 더 자세히 이해하려면 이 점을 확인해야 합니다.

공장! 그 코드가 작동하지 않는 이유를 이해하는 것은 남아 있습니다. 가장 먼저 눈에 들어온 순간은 카운터 값이 i_sequentBarsCount 값에 도달했을 때 함수가 종료되는 순간입니다. 그러나 다시 출력했고 함수 반환 (REQUIRED_SEQUENTIAL_MISS) 에서 기본 종료를 입력할 때 카운터 값이 지속적으로 1만 표시되었습니다 .

놓기 전에 모든 것이 올바르게 계산되었지만 올빼미가 올바르게 거래되지 않았습니다. 거기에 무슨 일이 일어나고 있었다. 이론적으로 위의 기본 종료 중 if 중 아무 것도 작동하지 않으면 조건이 작동하지 않으며 기본 종료를 조건에 넣어도 작동하지 않아야 합니다. 반대로 조건이 충족되면 충족되어야 합니다.


기프토 :

4. 순전히 개인적인 적응: 메타에디터가 아닌 다른 편집기에 줄 번호가 있는 코드를 입력하고 모든 변수의 각 변경 사항과 각각의 if 또는 switch 검사에서 동일한 줄에 인쇄합니다. 마지막 세미콜론 ). 줄 번호 형식으로 인쇄하십시오 - 확인 중인 값(들). if(tracing) {Print(StringConcatenate("line_number: variable_name=", variable_name));} 다음과 같은 방식으로 if 다음에 인쇄하고 bool tracing=false;//enable tracing과 같이 헤더에 변수를 선언합니다. . 그러면 본격적인 추적이 이루어지고 이에 따라 본격적인 디버깅이 가능해집니다. 그러나 진실은 로그를 더 자주 청소해야 한다는 것입니다. 메타에디터에 즉시 있다면 처음에는 다음과 같은 빈 템플릿을 만들 수 있습니다.

/*001*/

...

/*999*/

줄의 시작 부분에(이 방법이 작동함) 이 템플릿의 복사본에 코드를 입력합니다. 하지만 그렇게 생각하고 실제로는 이것을 시도했지만 일관성이 없었습니다.


글쎄, 우리는 줄 번호가 아닌 전문가의 데이터를 기반으로 인쇄합니다. 왜 줄 번호가 필요합니까? 저는 개인적으로 코드 분석 에 사용합니다. 왜냐하면 정말 좋은 시간이 있습니다. 그리고 줄 번호를 기반으로 코드를 작성하고 디버깅하는 것은 나에게 넌센스입니다.
 
hoz :

그 코드가 작동하지 않는 이유를 이해하는 것이 남아 있습니다.


내가 나 자신을 이해한 것처럼. 우리는 자동차의 교차점을 읽습니다. 더 정확하게는 교차점 이후에 3개의 연속적인 강세 또는 약세 양초입니다. 조건이 충족되면 시장에 진입합니다 . 그러나 구두 설명에 따르면이 세 개 이상의 연속 촛불은 창의 오른쪽 경계를 나타냅니다. 코드에 따르면 창 중간을 참조할 수도 있습니다. 따라서 마지막 캔들이 마지막 캔들이 될 수 없음에도 불구하고 조건(3 캔들)이 발생했을 때 어드바이저가 시장에 진입했습니다.
 
gyfto :

내가 나 자신을 이해한 것처럼. 우리는 자동차의 교차점을 읽습니다. 더 정확하게는 교차점 이후에 3개의 연속적인 강세 또는 약세 양초입니다. 조건이 충족되면 시장에 진입합니다. 그러나 구두 설명에 따르면이 세 개 이상의 연속 촛불은 창의 오른쪽 경계를 나타냅니다. 코드에 따르면 창 중간을 참조할 수도 있습니다. 따라서 마지막 캔들이 마지막 캔들이 될 수 없음에도 불구하고 조건(3 캔들)이 발생했을 때 어드바이저가 시장에 진입했습니다.


네. 여기서 결론은 다음과 같습니다. 구문을 알고 있으면 여전히 논리를 따라야 합니다. 결국 이것은 매우 중요합니다. 거기에 논리적 오류가 있었습니다.

간단해 보이지만, 나 자신이 집착해서 바로 익히지 못한 부분이 있다. 믈라. 발생합니다 .. :(

 

안녕하세요!

내 질문은 주제에서 약간 벗어납니다.

어딘가에서 CSV 파일 형식의 TA 수치를 찾을 수 있는지 알려주실 수 있습니까? 프로그래밍 방식으로 처리할 수 있는 txt, xls 또는 기타 형식과 함께 허용되는 옵션입니다.

다양한 기사, TA에 관한 교과서에는 TA 피규어의 예가 있지만 물론 일반 그림의 형태입니다. 그러나 H1-H4 기간에 일부 통화 쌍의 역사의 일부로 저장된 TA 수치의 다소 큰 세트를 본 사람이 있습니까?

구글링, 찾지 못했습니다. 물론 기록을 수동으로 반복하고 모양을 표시하고 이 기록 조각을 .csv로 내보낼 수 있습니다. 필요한 횟수만큼 반복하여 결과의 기초를 수집하십시오. 그러나 누군가가 이미 이것을 했다면 나는 시간을 절약하고 싶습니다.

미리 감사드립니다 :)