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

 

안녕하세요.

알아낼 수 있도록 도와주세요. 단순 배열의 동작을 확인할 때(나는 값을 할당한다);

a[0][2]=91.49999999993754;

인쇄 ("a[0][2]=",a[0][2]);

H= 1/(1+exp(-a[0][2]));

a[0][2]=H;

Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a [0][2]=",a[0][2]);


나는 결과를 얻는다 :

2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754

2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0

어때요?

 
im-zvv :

안녕하세요.

알아낼 수 있도록 도와주세요. 단순 배열의 동작을 확인할 때(나는 값을 할당한다);

a[0][2]=91.49999999993754;

인쇄("a[0][2]=",a[0][2]);

H= 1/(1+exp(-a[0][2]));

a[0][2]=H;

Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a [0][2]=",a[0][2]);


나는 결과를 얻는다 :

2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754

2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0

어때요?

재현하기 어려운 예가 있지만 유형 캐스트 때문에 예상한 대로 얻지 못하는 것 같습니다.

이 코드로 실험:

 void OnStart ()
{
   double a;
   int b = 2 ;
   a = b / 5 ;     //    a = 0.0
   Print ( "a = " ,a);  
}

다음으로:

 void OnStart ()
{
   double a;
   int b = 2 ;
   a = b /( double ) 5 ;     //    a = 0.4
   Print ( "a = " ,a);  
}

그리고

 void OnStart ()
{
   double a;
   int b = 2 ;
   a = b / 5.0 ;     //  a = 0.4
   Print ( "a = " ,a);  
}

그리고 "실수" 포럼을 검색하면 간단히 말해서 "C" 유형 캐스팅이 처음에는 어리둥절합니다.)

 

int 변수를 사용하여 많은 예를 보여주었습니다.

나는 모든 이중 변수를 가지고 있습니다.

따라서 변수를 동일한 형식으로 가져오는 것은 작동하지 않습니다.

 
im-zvv :

int 변수를 사용하여 많은 예를 보여주었습니다.

나는 모든 이중 변수를 가지고 있습니다.

따라서 변수를 동일한 형식으로 가져오는 것은 작동하지 않습니다.

a[0][2]=91.49999999993754;

인쇄("a[0][2]=",a[0][2]);

H= 1 /( 1 +exp(-a[0][2]));

a[0][2]=H;

Print(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a [0][2]=",a[0][2]);


나는 결과를 얻는다 :

2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754

2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0

어때요?

정수 상수 가 있고 예제 자체는 재현할 수 없습니다. 변수 유형이 없으며 일반적으로 - 내 "예제 묶음"은 PC 없이 계산할 수 있습니다. 귀하의 예는 ... 글쎄, 방법을 알려주세요 많은 e^(-91.49999)

좋아, 가자, 난 당신을 도울 수 없습니다

 

죄송합니다... "어쩔 수 없어요"...

e^(-91.49999)가 얼마인지는 중요하지 않습니다. 문제는 왜 double = H 유형의 변수에 잘못 쓰여졌는가입니다.

이전에 계산된 double 유형의 수 = 0.7310585786300049 이고 1.0이 기록됩니다(그런데 double).

테스터에서 내 코드를 실행하는 것이 귀찮다면 MT4에서도 동일한 결과를 얻을 수 있을 것입니다.

그렇다면 MQL4는 단순히 업무용으로 사용할 수 없으며 위험합니다!

 
im-zvv :

죄송합니다... "어쩔 수 없어요"...

나는 도왔다, 도와준다는 것은 나를 위해 하거나 나는 어쨌든 읽지 않는다는 것을 의미하지 않지만 결과는 나에게 중요합니다!

im-zvv :

그렇다면 MQL4는 단순히 업무용으로 사용할 수 없으며 위험합니다!

수학 표현식을 계산할 때 동작 MQL4 / MQL5는 C ++와 완전히 일치합니다. 질문에 대해 C ++ 포럼에 문의할 수 있습니다. 자산이 거기에서 도움을 줄 수 있을 것입니다.

글쎄요, 도움말/설명/가르침 영역에서 질문하신 내용이 MT플랫폼에 대한 토론영역으로 이동되었는데, 마음에 들지 않으면 사용하지 마시고 무료로 받으셨나요?

... 고대에는 물리적 과정에 대한 오해가 사람들에게 공황 공포를 일으키고 천둥이 치고 지진이 ... 처음에는 공황과 추측을 일으켰고 종교가 나타났습니다)))

 

그렇게 화내지 말았어야 했다.

제 개인적인 감정에 상처를 드렸다면 진심으로 사과드립니다.

저는 MT4를 절대 논하지도, 규탄하지도 않습니다. 나는 단지 달리기를 제안했다

MT4 테스터에서 보낸 코드와 모든 변수가 (H, a[0][2] )인 경우

는 double 로 정의되고 결과는 내 것과 같습니다. 그러면 질문이 있습니다.

무슨 일이야? 나는 당신에게 그것을 해결했습니다.

다시 한 번 : '어쩔 수 없다'는 게 안타까운...

모두 제일 좋다.

 
im-zvv :

모든 변수 (H, a[0][2] )

이중으로 정의

다시 한 번 반복합니다. 수학 표현식에 상수가 있습니까? - 내 예제에는 상수 5도 있습니다. 그런 다음 5.0을 썼습니다. 컴파일러에서는 동일하지 않습니다! 그런 다음 컴파일러의 경우 정수 상수 5를 type double --->으로 명시적으로 캐스팅합니다. 이는 5.0 위의 예제와 동일합니다.


귀하의 질문은 포럼에서 정기적으로 반복되지만 귀하의 질문이 무엇인지 알 수 없습니다. "무거운 수식"과 명확하지 않은 변수가 있습니다. 예제에서 불필요한 것을 제거하십시오(배열 및 지수). 그러면 질문이 무엇인지 명확하게 하세요. 불필요한 부분을 모두 제거하면 예상한 결과를 얻지 못한 부분을 스스로 찾을 수 있을 것입니다. 일반적으로 저와 비슷합니다.)


추신: 그리고 마이너스 91.49의 지수는 아주 작은 숫자가 아닙니까? 이중 유형은 정밀도가 더 높지만 100분의 1 정도까지, 그리고 빼기 기호를 고려하면 - 제 생각에는 이 표현은 정밀도를 잃을 것입니다. 저는 구글링을 하고 싶지는 않지만 가장 먼저 훑어본 것은 Wiki였습니다.

 

기다려 주셔서 감사합니다!

다음과 같이 시도했습니다.

A=91.49999999993754;//a[0][2]=91.49999999993754;

인쇄 ("A=",A);

H= 1/(1+exp(-A));

//A=H;

Print(" 1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0 ][2]);

결과:

2019.09.21 16:14:17.691 2011.01.04 22:29:51 W EURUSD,H4: A=91.49999999993754

2019.09.21 16:14:17.690 2011.01.04 22:29:50 W EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0

!!!!! 이것은 1/(1+exp(-91.49999999993754))=1.0이고 코드 A=H에 그대로 두면 계산이 인쇄 명령(

1/(1+exp(-91.49999999993754))=1.0 인 이유를 이해할 것입니다.

이해해 주세요. 이제 저는 신경망을 설정하고 훈련하는 일을 하고 있습니다. 코드 자체가 생소해서 나조차도 헷갈려요... :)

네트워크에서 오류가 반복되는 것을 확인했습니다. 그리고 시그모이드 계산의 주요 오류. 그는 =1이되어서는 안됩니다.


 
im-zvv :

기다려 주셔서 감사합니다!

다음과 같이 시도했습니다.

A=91.49999999993754;//a[0][2]=91.49999999993754;

인쇄("A=",A);

H= 1/(1+exp(-A));

//A=H;

Print(" 1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0 ][2]);

결과:

2019.09.21 16:14:17.691 2011.01.04 22:29:51 W EURUSD,H4: A=91.49999999993754

2019.09.21 16:14:17.690 2011.01.04 22:29:50 W EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0

!!!!! 이것은 1/(1+exp(-91.49999999993754))=1.0이고 코드 A=H에 그대로 두면 계산이 인쇄 명령(

1/(1+exp(-91.49999999993754))=1.0 인 이유를 이해할 것입니다.

이해해 주세요. 이제 저는 신경망을 설정하고 훈련하는 일을 하고 있습니다. 코드 자체가 생소해서 나 자신도 헷갈린다... :)

네트워크에서 오류가 반복되는 것을 확인했습니다. 그리고 시그모이드 계산의 주요 오류. 그는 =1이되어서는 안됩니다.


그래서 당신은 아무 것도 찾지 못할 것이므로 확인하기로 결정했습니다. 코드에서 버그나 부정확성이 있는 곳을 찾아야 합니다.

 void OnStart ()
  {
       double a= 91.49999999993754 ;
       Print ( "1. a = " ,a);
       double H= 1 /( 1 + exp (-a));
      a=H;
       Print ( "2. a = " ,a);
       Print ( "3. H = " ,H);
       double e = exp (- 91.49999999993754 );
       Print ( "4. e = " ,e);
  }

2019.09.21 16:53:01.516 tst_template EURUSD,H1: 4.e = 1.828331349163451e-40

2019.09.21 16:53:01.516 tst_template EURUSD,H1: 3. H = 1.0

2019.09.21 16:53:01.516 tst_template EURUSD,H1: 2. a = 1.0

2019.09.21 16:53:01.516 tst_template EURUSD,H1: 1. a = 91.49999999993754

그런 다음 단계별로 계산하고 결과를 인쇄하지만 제 생각에는 4단계에서 정확도가 이미 떨어질 것입니다. 결과를 볼 수 있습니다. 1.82 x 10 ^ (-40) - 이것은 매우 작은 숫자이며 모든 미래에 그러한 작은 숫자를 사용하는 연산은 정밀도를 잃는 것이 훨씬 더 많을 것입니다. 이것은 실제 숫자로 작업할 때 말하자면 "마법"입니다. 작은 숫자로 정밀도를 잃지 않으려면 계산을 시도해야 합니다. 정수 또는 이중으로, 그러나 숫자의 가수를 잃지 않고 - 10^40을 곱해야 합니다.
사유: