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

 
Trendy :

정말 감사합니다! 나는 양초의 특성(더 많이, 더 적게 등)을 비교하기 위해 이것을 필요로 했습니다. 나사를 조이고 작동합니다. 나는 그가 어떻게 문자열 데이터 유형을 그런 식으로 비교하는지 이해할 수 없습니까? 또는 double을 string으로 변환하면 숫자를 문자열로 변환하지 않습니까? :-디


추신. 인디케이터에서는 안되고 스크립트에서만... 문제는 차트의 프로그램에서는 막대 특성이 소수점 5자리로 전송되는데 High[i]를 호출하면 소수점 4자리만 나온다는 것입니다. 밖으로.

쓰기:

Alert("doubletostr 높음 = ", DoubleToStr(높음[1],5));
if (DoubleToStr(High[2],5)>(DoubleToStr(High[3],5)))
{
Alert("더보기");
}
if (DoubleToStr(High[2],5)<(DoubleToStr(High[3],5)))
{
Alert("덜");

}

쟁기는 결과를 다섯 자리로 쓰고 더 많거나 적게 계산합니다. 문제는 지표의 문자열 배열이 차트에 표시되지 않는다는 것입니다. 그래서...

...쓰기:

Alert("Normalizedouble 높음 = ", NormalizeDouble(High[1],5));

쟁기질하지 않음 - 결과 - > 1.1234

나는 개발자를 이해하지 못합니다. 왜 그렇게 복잡하게 만드나요? 그래프에 너무 많은 기호가 표시되면 호출된 함수의 5개 기호를 긁지 않는 이유는 무엇입니까? 간단한 탈출구가 있습니까?


더 흥미로운:

번역하다

Alert("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2), Digits ));

쓰기: 1.32169 - 확인

StrToDouble을 사용하여 숫자 값으로 다시 변환:

Alert("iFractals StrToDoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits)));

결과: 1.3217

Jackie Chan이 칩을 이해하지 못하는 밈이 있어야 합니다.)

 
hoz :

그리고 Alert는 실제로 무엇을 제공합니까?

쓰여진 0.01 그러나 실제로는 0...0100입니다.
 
Trendy :

더 흥미로운:

번역하다

Alert("iFractals doubletostr= ", DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits));

쓰기: 1.32169 - 확인

StrToDouble을 사용하여 숫자 값으로 다시 변환:

Alert("iFractals StrToDoubledoubletostr= ", StrToDouble(DoubleToStr(iFractals(0,0,MODE_UPPER,2),Digits)));

결과: 1.3217

Jackie Chan이 칩을 이해하지 못하는 밈이 있어야 합니다.)


DoubleToStr()은 원하는 정밀도로 메시지를 표시하는 데 사용됩니다. 표준 Print() , Alert() 등은 4자리 정밀도로 인쇄합니다.

필요한 정밀도로 숫자를 보려면 계산이 아닌 DoubleToStr()을 사용하십시오.

앞뒤로 번역 할 필요가 없습니다 ... ;)

 
semiromid :

쓰여진 0.01 그러나 실제로는 0...0100입니다.


출력은 100 * point = 100 * 0.00001 = 0.001pp입니다(5 자리 의 경우)

위에서 lBUY 값이 변경되었습니다. 따라서 내가 볼 때 조건은 다음과 같습니다.

 if (lBUY== 0.01 )

실행되지 않습니다. 따라서 lBUY 의 가치는 그대로 유지됩니다.

 
artmedia70 :
변수 j는 함수의 맨 처음에 음수 값으로 명시적으로 초기화되어야 합니다. 시도 해봐. 더 이상 아무것도 보지 않았습니다.


흠. 지금까지는 동일합니다. 여기 우리가 가진 것이 있습니다:

 //+-------------------------------------------------------------------------------------+
//| Получаем состояние последней позиции (Открыта или закрыта)                          |
//+-------------------------------------------------------------------------------------+
bool isCloseByTakeLastOpenPos( int delta)
{
   datetime lastOrderCloseTime = 0 ,               // Время закрытия последнего открытого ордера
            lastOOTHist = - 1 ;                     // Время открытия последнего открытого ордера из истории
   int j = - 1 ;
   
   for ( int i=OrdersHistoryTotal()- 1 ; i>= 0 ; i--)
   {
       if (! OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)) continue ;
       if (OrderMagicNumber() != i_magic) continue ;
       if (OrderSymbol() != Symbol ()) continue ;
       if (OrderType() > 1 ) continue ;               // Все удалённые отложки нас не интересуют..
  
       if (lastOrderCloseTime < OrderCloseTime())   // Находим время закрытия..
      {
         lastOrderCloseTime = OrderCloseTime();   // ..последней закрытой позиции в истории
         j = i;
      }
   }
   if ( OrderSelect (j, SELECT_BY_POS, MODE_HISTORY))
   {
       if (OrderProfit() + OrderCommission() + OrderSwap() <= 0 ) return ( false );
       if ( MathAbs (OrderProfit() - OrderClosePrice()) > delta * pt) return ( false );
       else
      {
         lastOOTHist = OrderOpenTime();
         Comment ( "FUNC isCloseByTakeLastOpenPos : lastOOTHist = " , lastOOTHist);
      }
   }
   else
   {
       Comment ( "FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории" );
       Print ( "FUNC isCloseByTakeLastOpenPos : не удалось выбрать ордер в истории" );
       return ( false );
   }
  
   for ( int h= OrdersTotal ()- 1 ; h>= 0 ; h--)
   {
       if ( OrderSelect (h, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderMagicNumber() != i_magic)   continue ;
         if (OrderSymbol() != Symbol ())       continue ;
         if (OrderType() > 1 )                 continue ;
         if (lastOOTHist < OrderOpenTime()) return ( false );   // Выбранная рыночная позиция открыта позже закрытой по тейку
      }
       else { Print ( "FUNC isCloseByTakeLastOpenPos : не удалось выбрать рыночный ордер" ); return ( false );}
   }
   
   return ( true );
}
 
artmedia70 :

DoubleToStr()은 원하는 정밀도로 메시지를 표시하는 데 사용됩니다. 4자리 정밀도로 표준 Print(), Alert() 등을 출력합니다.

필요한 정밀도로 숫자를 보려면 계산이 아닌 DoubleToStr()을 사용하십시오.

앞뒤로 번역 할 필요가 없습니다 ... ;)


이것은 이해할 수 있습니다 ... 지금 ...) 그러나 요점은 어떻게 든 계산을 위해 다섯 번째 숫자를 선택해야한다는 것입니다 (

그리고 DoubleToStr()이 이에 적합하지 않다면 일반적으로 이 가능성이 이 언어에서 제공되지 않습니까? 오, 그것은 매우 이상합니다. 개발자들이 이것을 예상하지 못했습니까?

 
hoz :


흠. 지금까지는 동일합니다. 여기 우리가 가진 것이 있습니다:

동일하지 않아야 하는 것은 무엇입니까? ;)
 
Trendy :

이것은 이해할 수 있습니다 ... 지금 ...) 그러나 요점은 어떻게 든 계산을 위해 다섯 번째 숫자를 선택해야한다는 것입니다 (

그리고 DoubleToStr()이 이에 적합하지 않다면 일반적으로 이 가능성이 이 언어에서 제공되지 않습니까? 오, 그것은 매우 이상합니다. 개발자들이 이것을 예상하지 못했습니까?


계산에는 생각보다 많은 숫자가 사용됩니다. 필요한 정밀도로 보려면 DoubleToStr()을 사용하십시오. 그렇지 않으면 볼 수 없습니다.
 

프로그래머님! 어드바이저와 지표를 결합하는 방법을 알려주십시오.

예를 들어, 자체 알고리즘으로 거래하는 간단한 mo_bidir.mq4 봇을 사용했는데 해당 알고리즘에 따라 거래를 계속 열려면 이 봇이 필요하지만 3x MA 신호 후에는 -

예를 들어 신호에 따르면 - 3개의 이동 평균 :

FastEMA>MediumEMA>SlowEMA( 경향 위로 ) - 구매

FastEMA<MediumEMA<SlowEMA( 경향 아래로 ) – 팔다

Inp_Signal_ThreeEMA_FastPeriod = 8;

Inp_Signal_ThreeEMA_MediumPeriod = 38;

Inp_Signal_ThreeEMA_SlowPeriod = 48;

또한 어드바이저가 5분 차트에서 계속 거래하고 지표가 일일 또는 4시간 시간대의 신호를 제공하여 봇 설정에서 시간대를 변경할 수 있도록 해야 합니다.

[Deleted]  
모든 거래자들에게 좋은 오후입니다. 이 문제는 이미 논의되었지만 코드 기반의 일부 Expert Advisors는 새 빌드에서 컴파일되지 않습니다. 컴파일러는 이것이 디컴파일된 버전임을 맹세합니다. 하지만 말도 안되는 것처럼 보입니다. 버전은 디컴파일된 적이 없습니다.