MT4에서 MT5로 옮기는 문제. 또는 더 정확하게는 MT5에서 일부 알고리즘의 오류 없는 실행이 불가능합니다. - 페이지 11

 

생각을 위한 정보.

나는 시장에 발표된 고문의 발전을 지켜본다. 또는 일부 기사.

고문의 작업을 위해 중개인을 선택하기위한 요구 사항에서 종종 작은 스프레드가 표시됩니다.

그리고 제 생각에는 MT5가 시장의 변화에 빠르게 대응하기 위해 여러 면에서 갈고 닦은 것 같아요. 이것은 견적 업데이트를 기대하면서 모든 브레이크를 비활성화하는 것을 설명합니다.

즉, 따옴표가 업데이트되면 터미널은 시계열에 대한 액세스를 거부합니다. 일부 빠른 알고리즘 계산을 방해하지 않기 위해.

그러한 패러다임은 존재할 권리가 있습니다. 동시에 거래는 짧습니다. 그들은 빨리 들어갔다. 몇가지 아이템을 모았습니다. 그들은 빨리 나왔다.

그러나 또 다른 패러다임이 있습니다.

시장에는 시장 반전이 형성된 몇 가지 극단적인 상황이 있습니다.

이러한 극값은 몇 년 전에도 형성될 수 있습니다. 그러나 그들은 현재 시장 상황에 계속 영향을 미치고 있습니다.

이 경우 틱 또는 분 기록의 순간적인 변경도 고려할 수 있습니다. 그러나 그들은 결정적이지 않습니다.

이 경우 액세스 중단의 결과로 핸들러를 종료하지 않고 따옴표 업데이트를 기다릴 수 있습니다. 그리고 그것은 MT4에서만 작동합니다.

말한 내용을 설명하는 몇 장의 사진.

우리는 월별 전화를 받습니다. 1995년 3월, 2000년 10월 및 2007년 7월의 극단적인 상황이 계속해서 시장에 영향을 미치고 있습니다.

1985년 2월의 극단적인 상황도 영향을 미칩니다.


이러한 극한값을 고려하여 구축된 라인이 시장에서 주목받고 있음을 알 수 있습니다.

다른 전화로 넘어 갑시다. 웨이브 마킹을 하는 것과 거의 같은 비율입니다. 이러한 선택으로 각 TF에서 대략 하나의 웨이브 레벨이 발생할 수 있습니다.

주간 TF:

D1:

H4:

M30:

M5:

M1:

우리는 역사에서 훨씬 더 멀리 형성된 극단값이 시장의 현재 순간에 영향을 미친다는 것을 알 수 있습니다.

----------------------------------

이러한 구성의 경우 견적에 지속적으로 액세스할 수 있어야 합니다.

나는 더 계속할 것이다. 기본적으로 사진에 보이는 모든 것은 수동 거래에 사용됩니다.

하지만. 여러 신경망의 입력에 인용문을 적용할 수 있습니다(예: 그림에 표시된 시간 프레임). 각 NS는 자체 데이터를 처리합니다. 그리고 무슨 일이 일어나고 있는지에 대한 이해를 표현하십시오. 신경망의 출력은 막대가 도착할 때까지 동기화됩니다.

동시에, 더 오래된 TF의 NS로부터의 신호는 더 젊은 것보다 더 높은 우선 순위를 갖습니다.

신경망에서 수신된 신호는 일종의 우선 순위로 다음 신경망의 입력으로 공급됩니다. 여기에 옵션이 있을 수 있습니다.

예를 들어, 신경망의 첫 번째 계층은 LSTM 유형일 수 있습니다. 과거의 기억이 필요합니다. 이 경우 레이어는 자체 시간 프레임에서 각각 인용문을 수신하는 신경망으로 이해됩니다. 또한 첫 번째 계층의 각 신경망에는 여러 계층의 뉴런이 있을 수 있습니다.

합산 신경망은 자체 아키텍처를 가질 수 있습니다. 이것은 더 많은 엔지니어링 과제입니다.

예를 들어 거래를 시작하기 위해 일부 알고리즘을 사용하여 교육할 수 있습니다. 신경망의 첫 번째 계층에서. 즉, 첫 번째 계층의 각 신경망은 별도로 학습됩니다. 예를 들어 해당 레이어의 막대 끝에서 거래를 엽니다. 어쩌면 다른 방향으로도. 거래는 조건부입니다. 이러한 거래의 결과, 국회를 훈련하라는 신호가 주어진다.

따라서 집계 신경망에는 가장 최적의 거래 모드를 선택할 수 있는 권한이 부여됩니다.

알고리즘은 DeepMinde 팀이 Alfa Zero에서 구현한 것과 유사한 것으로 밝혀졌습니다.

선택된 모든 TF에 대한 기록 전체에 걸쳐 이러한 네트워크를 훈련합니다. 명심해야 할 유일한 것은 MT5에서 모든 시계열이 분 단위로 구성된다는 것입니다. 그리고 이것은 사실이 아닙니다. 1993년까지 일일 거래에서 수집된 Eurodollar NCC 파일. 시계열의 실제 시간대를 복원하는 알고리즘이 있어야 합니다.

하나의 통화 쌍으로 훈련할 수 있습니다. 그리고 다른 것을 테스트하십시오.

------------------------------

요약. 이 접근 방식에서 시장에서 일어나는 일에 신속하게 대응하는 이유는 무엇입니까?

 
Eugeni Neumoin :


주제넘은 부분이 있어서 죄송합니다만 주제가 재미있으면서도 끊을 수 없습니다


빅트 :

글쎄, 나는 이것을 다음과 같이 사용하려고 한다.

MQL에는 typename()이 있습니다. - 문자열 유형 이름을 반환하며 작동합니다.

 void OnStart ()
  {
   Print ( typename (Txt()));       // в логе будет       string
  }
string Txt()
{
return ( " Txt " );
}

할 일이 거의 없습니다. - MyFunc()의 유형을 아는 것 - 매크로 작성((( , ... 물론 _Try_helper 유형에 따라 모든 매크로를 작성할 수 있습니다 ... 일반적으로 저는 도박이 아닌 것 같습니다. 방법을 모르기 때문에

 
Igor Makanu :

주제넘은 부분이 있어서 죄송합니다만 주제가 재미있으면서도 끊을 수 없습니다


모든 것이 정상입니다.

 
Igor Makanu :

MQL에는 typename()이 있습니다. - 문자열 유형 이름을 반환하며 작동합니다.

할 일이 거의 없습니다. - MyFunc()의 유형을 아는 것 - 매크로 작성((( , ... 물론 _Try_helper 유형에 따라 모든 매크로를 작성할 수 있습니다 ... 일반적으로 저는 도박이 아닌 것 같습니다. 방법을 모르기 때문에

µl의 typename()은 도움이 되지 않습니다. 컴파일 타임에 변수 선언에 적합한 유형을 제공하지 않고 그냥 인쇄하십시오. Try_d(), Try_i(), ...를 생성하는 것만 남아 있습니다. µl에서 decltype 기능을 얻는 방법을 모르겠습니다.

 
Vict :

µl의 typename()은 도움이 되지 않습니다. 컴파일 타임 에 변수 선언에 적합한 유형을 제공하지 않고 그냥 인쇄하십시오. Try_d(), Try_i(), ...를 생성하는 것만 남아 있습니다. µl에서 decltype 기능을 얻는 방법을 모르겠습니다.

흠, 도박은 전혀 할 기분이 아니야! 나는 도박이 아니라 더 말할 것입니다! ))) - 어떻게 하면 이런 식으로 작동할지 모르겠습니다. (기계 수준에서 "모든 것이 돌아가고 있다"는 것이 어떤 것인지 정말 이해가 되지 않습니다. - 우리가 강력한 형식의 언어를 가지고 있는 것 같습니까?)

 void OnStart ()
{
   int i = func( 1 );
   double d = func( 1.123 );
   string s = func("s");
   Print ("i = ",i);
   Print ("d = ",d);
   Print ("s = ",s);
}

template < typename T>
T func(T invalue)
{
   string s = typename (T);
   if (s==" int ") return (invalue);
   if (s==" double ") return (invalue);
   if (s==" string ") return ("Hello word!!!");
return ( NULL );
}

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) 나는 = 1

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) d = 1.123

2019.07.31 21:07:05.304 tst2 (EURUSD,H1) s = 안녕하세요!!!


함수에 대한 포인터를 설명할 수도 있습니다.

 typedef void (*TFuncvoidPTR)( void );

그리고 추가 사용

TFuncvoidPTR      func[];
....
func[ 0 ]();
 
Vict :

µl의 typename()은 도움이 되지 않습니다. 컴파일 타임 에 변수 선언에 적합한 유형을 제공하지 않고 그냥 인쇄하십시오. Try_d(), Try_i(), ...를 생성하는 것만 남아 있습니다. µl에서 decltype 기능을 얻는 방법을 모르겠습니다.

정적 T형 변수가 있는 템플릿 함수.

 
Igor Makanu :

감사하다!

나는 당신의 메시지를 읽었습니다. 불행히도 당신은 여러면에서 옳았습니다. 어제 나는이 주제에서 중재자 Artem과 많은 대화를 나눴습니다. 대화의 결과 :이 방법으로 구현되면 그렇게 작동해야합니다 ... 일반적으로 , 오래된 광고에서와 같이 "당신은 그들을 요리하는 방법을 모릅니다!"

IMHO, MQL5 컴파일러의 결과는 정말 환상의 영역에서 나온 것입니다(매우 생산적입니다!). 그러나 거래 터미널 로 사용하는 것은 ... 글쎄요, 이렇게 표현해 봅시다. 매우, 아주 좋은 기술적 배경과 "이전 터미널에서"보다 ~ 30% 더 많은 코드를 작성하려는 욕구(-이 포럼의 이 문구조차도 이미 확립된 표현입니다)

Ay-yay ... 그렇게 말하지 않았습니다 :)

나는 우리가 원하는 결과를 얻기 위해 필요한 것을 사용한다고 말했습니다.

내 나머지 감정은 나 자신에게 보관합니다.

 
Igor Makanu :

그리고 진행자 Artem이 이런 말을 했다고 한게 아니라 대화 결과만 썼습니다 - 제 생각에는 이것은 제 가치관이고 제 감정과 대화 분석을 통해서만 형성할 수 있는 것입니다 ....) )))

내 말은, 나는 누군가의 머리에서 무슨 일이 일어 났는지 몰라, 내 머리 만 봅니다 ... 다행스럽게도 지금은 거울에서)))

나는 그 대신에 믿겠다.

대화의 결과 : 그렇게 구현되면 그렇게 작동해야 합니다... 일반적으로 이전 광고에서와 같이 " 당신 은 요리하는 방법을 모릅니다!"

그것은

내 결론 : 그렇게 구현되면 그렇게 작동해야합니다 ... 일반적으로 이전 광고에서와 같이 " 나는 요리하는 법을 모릅니다!"

그리고 거울의 한 머리가 주장하는 중재자 Artyom을 인용 한 것으로 밝혀졌습니다 ...

그리고 사적인 대화였다면 좋았을 텐데. 그러나 내가 말하지 않은 내 말에 대해 공개적인 결론을 내리는 것은 완전히 잘못된 내 의견으로 공개적으로 틀을 짜는 것입니다. 그것은 인용문에서 주장하는 것과는 완전히 다릅니다.

나는 내 의견을 말할 수 있습니다.

우리는 현재 가지고 있는 것으로부터 침착하게 처리하고, 징징거리지 않으며, 버그 검색을 돕고 수정을 기대하며 요청합니다. 여전히 수정 중이며 새로운 멋진 기능이 나타납니다.

 
Artyom Trishkin :

차라리 그랬다면 믿었을 텐데

그것은

그리고 거울의 한 머리가 주장하는 중재자 Artyom을 인용 한 것으로 밝혀졌습니다 ...

그리고 사적인 대화였다면 좋았을 텐데. 그러나 내가 말하지 않은 내 말에 대해 공개적인 결론을 내리는 것은 완전히 잘못된 내 의견으로 공개적으로 틀을 짜는 것입니다. 그것은 인용문에서 주장하는 것과는 완전히 다릅니다.

나는 내 의견을 말할 수 있습니다.

우리는 현재 가지고 있는 것으로부터 침착하게 처리하고, 징징거리지 않으며, 버그 검색을 돕고 수정을 기대하며 요청합니다. 여전히 수정 중이며 새로운 멋진 기능이 나타납니다.

흠.. 다 얼마나 힘들게 했는지.... 스스로 정리를 하고, 제 생각에는... 그런데 뭐가 달라요? 무엇이 바뀔까요? 개발자는 제품 개발에 대한 자신의 비전을 가지고 있습니다. 이것은 그들의 비즈니스이고 제 의견입니다 ... 글쎄, 당신이 주제를 서두르지 않으면 2 일 안에 깊이가 정상에 없을 것입니다


... 글쎄, 어떻게 바뀔지 ... 오늘은 좋은 사람 @Vict 가 나를 위해 디버깅을 단순화하는 트릭을 보여 주었고 가장 중요한 것은 내 코드의 가독성을 얻을 수 있다는 것입니다. 예, 변경되었습니다. MQL5 및 일반적으로 포럼 회원에 대한 내 생각

좋아요, 조용히 하겠습니다. 역사가 있는 포럼이 있으므로 다시 읽지 않고도 읽을 수 있습니다. 이 포럼을 검색하면 내 질문에 대한 답변이 많이 있습니다.

 
Igor Makanu :

fxsaber 가 올바르게 말했습니다 - 하나의 옵션이 있습니다

template < typename T> T Try_helper(T val, bool assign) {
   static T sval;
   if (assign)
      sval = val;
   return sval;
}
#define Try(EXPR, MES)                    \
   Try_helper(EXPR, true );                \
   if (Try_helper(EXPR, false ) <= 0.0 ) {  \
     printf ( "Error: %s " , MES);           \
     return ;                              \
   }

double f( double ) { return DBL_MAX ;}
ulong f( ulong ) { return ULONG_MAX ;}

void OnStart ()
{

   double d = Try(f( 0 .), "double error" );
   ulong u = Try(f( 0 ), "ulong error" );
}

약간 해킹 - EXPR은 두 번 계산되지만 여전히 더 유연합니다. 일반적으로 보편적이라고 할 수는 없다(산술형에 한함. 에러값이 같아야 하는데 불편하다. 구조체/함수의 명시적 특화를 통해 해결하려 했으나 불가능)

 template < typename T> bool Try_helper_is_valid(T val);
template <> bool Try_helper_is_valid< string >( string val) {val== "" ? false : true ;}   // compile-time error

template < typename T>
struct S;
template <>
struct S< string > {...};       // compile-time error

일반적으로 마이크로 리터를 파지 않는 곳에서는 갈퀴가 모든 곳에 조심스럽게 배치됩니다. 하드 코딩된 유형의 작고 고도로 전문화된 매크로로 자신을 제한하는 것이 더 나을 것입니다.