MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 383

 
konam1 :
좋은 오후에요 여러분. 나는 매시간 초가 열릴 때 포물선의 값을 추적합니다.
iSAR 기록을 실행할 때 포물선이 위에서 아래로 또는 그 반대로 위치를 변경하는 순간을 제외하고 0 막대는 차트의 점과 일치합니다.
if (newbarall!=(iTime(Symbol(),60,0)))
{
newbarall=iTime(Symbol(),60,0);
Print(iTime(Symbol(),60,0));
Print("SAR = ",NormalizeDouble(iSAR(Symbol(),60,0.02,0.2,0),Digits));
};
따라서 다음 질문:
이 순간에 영점 막대의 포물선이 정확하지 않은 것으로 간주되는 이유는 무엇입니까?
그리고 실제로 이것을 피하는 방법은 막대가 열리면 점이 나타나고 양초가 형성되는 동안 다시 계산하지 않고 정적이기 때문입니다.
도와주세요, 제발). 고맙습니다!

제로 촛불에서 포물선 의 점을 관찰하면 여전히 정적이 아닙니다. 위치가 변경되며 위치를 위아래로 변경할 때뿐만 아니라 일반적으로 - 때로는 한 위치에서 약간 이동합니다 (움직이지 않고 위아래)

 

안녕하세요. 수평선 이 제거되지 않는 이유를 알려주시겠습니까?

   if (SellInvertedHammer == true )
   {
       //if ((Open1 < Close1 && delta_minus < 0) || (Open1 >= Close1 && delta_plus > 0))
      {
         if (! ObjectCreate ( ChartID (), "Arrow_Down_InvertedHammer" + IntegerToString (InvertedHammerCandle), OBJ_ARROW_DOWN , 0 , TimeCurrent (), High [ 1 ] + 70 * Point ))
               {
               Print ( "Не удалось создать метку вниз" );
               }
               ObjectSetInteger ( ChartID (), "Arrow_Down_InvertedHammer" + IntegerToString (InvertedHammerCandle), OBJPROP_COLOR , clrRed ); //--- установка цвета
               ObjectSetInteger ( ChartID (), "Arrow_Down_InvertedHammer" + IntegerToString (InvertedHammerCandle), OBJPROP_STYLE , STYLE_SOLID ); //--- установка стиля линии
               ObjectSetInteger ( ChartID (), "Arrow_Down_InvertedHammer" + IntegerToString (InvertedHammerCandle), OBJPROP_WIDTH , 1 ); //--- установка толщины линии
               ObjectSetInteger ( ChartID (), "Arrow_Down_InvertedHammer" + IntegerToString (InvertedHammerCandle), OBJPROP_BACK , false ); //--- отображение на переднем (false) или заднем (true) плане
               InvertedHammerCandle ++;
         Print ( "Перевернутый молот" );
         Print ( "Дельта+ = " + IntegerToString (delta_plus));
         Print ( "Дельта- = " + IntegerToString (delta_minus));
         Print ( "Объем = " + IntegerToString (volume));
         Print ( "Кумулитивная дельта = " + IntegerToString (cum_delta));
         
         if (! ObjectCreate ( ChartID (), "UpLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle), OBJ_HLINE , 0 , TimeCurrent (),UpLine_InvertedHammer))
         {
         Print ( "Не удалось создать верхнюю линию" );
         }
         ObjectSetInteger ( ChartID (), "UpLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle), OBJPROP_COLOR , clrBlueViolet ); //--- установим цвет прямоугольника 
         ObjectSetInteger ( ChartID (), "UpLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle), OBJPROP_STYLE , STYLE_SOLID ); //--- установим стиль линий прямоугольника 
         ObjectSetInteger ( ChartID (), "UpLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle), OBJPROP_WIDTH , 1 ); //--- установим толщину линий прямоугольника 
         ObjectSetInteger ( ChartID (), "UpLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle), OBJPROP_BACK , false ); //--- отобразим на переднем (false) или заднем (true) плане 
         
         
         if (! ObjectCreate ( ChartID (), "DownLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle), OBJ_HLINE , 0 , TimeCurrent (),DownLine_InvertedHammer))
         {
         Print ( "Не удалось создать нижнюю линию" );
         }
         ObjectSetInteger ( ChartID (), "DownLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle), OBJPROP_COLOR , clrSlateBlue ); //--- установим цвет прямоугольника 
         ObjectSetInteger ( ChartID (), "DownLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle), OBJPROP_STYLE , STYLE_SOLID ); //--- установим стиль линий прямоугольника 
         ObjectSetInteger ( ChartID (), "DownLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle), OBJPROP_WIDTH , 1 ); //--- установим толщину линий прямоугольника 
         ObjectSetInteger ( ChartID (), "DownLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle), OBJPROP_BACK , false ); //--- отобразим на переднем (false) или заднем (true) плане 
         lineInvertedHammerCandle ++;
                         
      }

   }
   if (ma2 > UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 > UpLine_InvertedHammer && ma1 > DownLine_InvertedHammer)
               {
                  UpLine_InvertedHammer = 0 ;
                  DownLine_InvertedHammer = 0 ;
               }
      
   if (ma2 < UpLine_InvertedHammer && ma2 > DownLine_InvertedHammer && ma1 < UpLine_InvertedHammer && ma1 < DownLine_InvertedHammer)
         {
            
             if (! ObjectCreate ( ChartID (), "Arrow_Sell_InvertedHammer" + IntegerToString (InvertedHammerCandleSell), OBJ_ARROW_SELL , 0 , TimeCurrent (), Low [ 1 ] + 50 * Point ))
                {
                 Print ( "Не удалось создать метку вниз" );
                }
                 ObjectSetInteger ( ChartID (), "Arrow_Sell_InvertedHammer" + IntegerToString (InvertedHammerCandleSell), OBJPROP_COLOR , clrRed ); //--- установка цвета
                 ObjectSetInteger ( ChartID (), "Arrow_Sell_InvertedHammer" + IntegerToString (InvertedHammerCandleSell), OBJPROP_STYLE , STYLE_SOLID ); //--- установка стиля линии
                 ObjectSetInteger ( ChartID (), "Arrow_Sell_InvertedHammer" + IntegerToString (InvertedHammerCandleSell), OBJPROP_WIDTH , 1 ); //--- установка толщины линии
                 ObjectSetInteger ( ChartID (), "Arrow_Sell_InvertedHammer" + IntegerToString (InvertedHammerCandleSell), OBJPROP_BACK , false ); //--- отображение на переднем (false) или заднем (true) плане
                InvertedHammerCandleSell ++;
                 Print ( "Точка входа SELL по разворотной свече 'Перевернутый молот'" );
                UpLine_InvertedHammer = 0 ;
                DownLine_InvertedHammer = 0 ;
                
                 int upline;
                 int downline;
                upline = ObjectFind ( ChartID (), "UpLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle));
                downline = ObjectFind ( ChartID (), "DownLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle));
                 if (upline > - 1 && downline > - 1 )
                  {
                   ObjectDelete ( "UpLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle));
                   ObjectDelete ( "DownLine_InvertedHammer" + IntegerToString (lineInvertedHammerCandle));
                   Print ( "Линии удалены" );
                  }
                   Print ( "Не удалось удалить верхнюю и нижнюю линии" );
                
          }

전체 코드의 일부입니다. 필요한 경우 전체 코드를 게시하겠습니다.


감사해요

 

- 안녕하세요, 동료 여러분! MT4 또는 MT5 Expert Advisor를 작성하는 방법을 배우고 싶습니다. 실제로 코드의 모든 뉘앙스를 즉시 명료하게 설명하고 코드 작성에 도움을 줄 경험이 있는 사람이 필요합니다. 모든 것을 확인하려면 테스트하고 조건에서 무엇을 어떻게 사용하는지 이해하고 다양한 조건을 작성하는 방법을 배워야 합니다.

 
Artyom Trishkin :

제로 촛불에서 포물선의 점을 관찰하면 여전히 정적이 아닙니다. 위치가 변경되며 위치를 위아래로 변경할 때뿐만 아니라 일반적으로 - 때로는 한 위치에서 약간 이동합니다 (움직이지 않고 위아래)


그럼에도 불구하고 역사에 따르면 "전환"의 순간을 제외하고 우연의 일치는 완전합니다. 1-2점의 오차도 나에게 맞을 것이다. "전환"시 20p 이상이 될 수 있습니다.

문제는 여전히 동일합니다. 어떻게 피해야 합니다. 감사해요

 
konam1 :

그럼에도 불구하고 역사에 따르면 "전환"의 순간을 제외하고 우연의 일치는 완전합니다. 1-2점의 오차도 나에게 맞을 것이다. "전환"시 20p 이상이 될 수 있습니다.

문제는 여전히 동일합니다. 어떻게 피해야 합니다. 감사해요

그나저나 이게 무슨 디자인이지?

 if ( newbarall!=( iTime ( Symbol (), 60 , 0 )) )
  {
   newbarall= iTime ( Symbol (), 60 , 0 );   
   Print ( iTime ( Symbol (), 60 , 0 ));
   Print ( "SAR = " , NormalizeDouble ( iSAR ( Symbol (), 60 , 0.02 , 0.2 , 0 ), Digits ));
  } ;

그러한 디자인을 제공하는 것은 무엇입니까 ?

왜 그렇게 시간을 인쇄 합니까?

그리고 왜 포물선 의 값을 정확히 이와 같이 인쇄합니까?

 
Artyom Trishkin :

그나저나 이게 무슨 디자인이지?

그러한 디자인을 제공하는 것은 무엇입니까 ?

왜 그렇게 시간을 인쇄 합니까?

그리고 왜 포물선의 값을 정확히 이와 같이 인쇄합니까?


- 이 구성은 새로운 시간당 캔들이 발생할 때 조건을 충족합니다. 시간당 캔들스틱의 시간이 newbarall 변수의 값과 일치하지 않으면 새 시간을 변수에 쓰고 조건을 채웁니다.

- 아워 캔들 의 여는 시간을 인쇄합니다.

- 포물선의 값은 그래프에 표시되는 것과 동일하도록 소수점 이하 4자리까지 반올림됩니다.

 
konam1 :

- 이 구성은 새로운 시간당 캔들이 발생할 때 조건을 충족합니다. 시간당 캔들스틱의 시간이 newbarall 변수의 값과 일치하지 않으면 새 시간을 변수에 쓰고 조건을 채웁니다.

- 아워 캔들 의 여는 시간을 인쇄합니다.

- 포물선의 값은 그래프에 표시되는 것과 동일하도록 소수점 이하 4자리까지 반올림됩니다.

1. 아니오, 그렇지 않습니다

2. 글쎄요.

3. 당신은 그 기능으로 실수를 인쇄하고 있다고 확신합니까?

4. 왜 ; 닫는 중괄호 뒤에?

 
Artyom Trishkin :

1. 아니오, 그렇지 않습니다

2. 글쎄요.

3. 당신은 그 기능으로 실수를 인쇄하고 있다고 확신합니까?

4. 왜 ; 닫는 중괄호 뒤에?


1. 그럼에도 불구하고 알고리즘은 양초를 열 때만 작동합니다. 그러한 설계의 오류는 무엇입니까?

3. 예를 들어 숫자 1.1820이 인쇄되어 있으므로 확신합니다.

4. 코드의 일부가 표시됩니다.

 
konam1 :

1. 그럼에도 불구하고 알고리즘은 양초를 열 때만 작동합니다. 그러한 설계의 오류는 무엇입니까?

3. 예를 들어 숫자 1.1820이 인쇄되어 있으므로 확신합니다.

4. 코드의 일부가 표시됩니다.

1. 글쎄, 내가 눈치 채지 못했을 수도 있습니다-아침 5시 반 ...

3.DoubleToString()

4. 그러나 동일한 조건복합 연산자 가 있습니다.

 if (condition) { }

다른 해석은 보이지 않습니다. 왜 ";" 연산자 후?

 
konam1 :
따라서 다음 질문:
이 순간에 영점 막대의 포물선이 정확하지 않은 것으로 간주되는 이유는 무엇입니까?
그리고 실제로 이것을 피하는 방법은 막대가 열리면 점이 나타나고 양초가 형성되는 동안 다시 계산하지 않고 정적이기 때문입니다.
도와주세요, 제발). 고맙습니다!

"포인트가 나타나고 양초가 형성되는 동안 재계산되지 않고 정적입니다"라는 진술은 사실이 아니며 가격이 포물선을 돌파하면 포인트가 다시 그려집니다.
침투는 막대가 열릴 때뿐만 아니라 어느 순간에도 발생할 수 있기 때문에 모든 틱마다 포물선을 다시 계산해야 합니다.