EA/지표의 틱 에뮬레이션 - 페이지 5

 
Zhunko : Igor, 인터넷 연결을 끊는 방법은 좋지 않습니다. 이 모드에서는 많은 것들이 작동하지 않습니다. 인터넷 액세스를 비활성화할 필요가 없습니다.

아니요, 첫 페이지에 있습니다. winXR에서는 잘 작동합니다. 틀렸습니다. 하지만 어떤 이유로 인해 win7에서는 작동하고 싶지 않았습니다.

고기 : 64비트 Windows가 설치된 곳에서는 코드가 작동하지 않는다는 가정이 있습니다. 32개밖에 없어서 확인이 안되네요.

아니요, 저는 win7 max 32bit를 가지고 있습니다.

 
IgorM :

아니요, 첫 페이지에 있습니다. winXR에서는 잘 작동합니다. 틀렸습니다. 하지만 어떤 이유로 인해 win7에서는 작동하고 싶지 않았습니다.

Igor, Alexey의 코드가 아니라 인터넷 연결 끊기에 관한 것입니다.
 
Zhunko :

틱 표시에서 어떻게 거래합니까? 이것은 MQL4에서 제공되지 않습니다.

정말로! 루프형 Expert Advisor에서 모든 작업을 수행할 수 있는 경우 거래할 수 없는 틱 표시기를 추가하는 이유는 무엇입니까? WinAPI로 춤을 출 필요가 없으며 MT4 인터페이스가 느려지지 않고 3배 더 빠르게 작동합니다. 왜 그렇게 어렵게 만드나요?

좋아, 이 논쟁을 떠나자. 여전히 건설적이지 않고 오히려 그 반대가 될 것이다. 당신은 이미 내가 쓴 것의 의미를 왜곡하기 시작하고 있습니다(의도적인지 아닌지는 모르겠습니다). 왜냐하면 나는 지표가 아니라 메타 트레이더와 거래한다고 러시아어로 썼고 당신은 다시 어떤 종류에 대해 이야기하고 있기 때문입니다. 지표에서 거래의. 앞서 말한 내용을 잘못 해석했다면 "지표가 거래에 사용된다"라는 문구가 지표가 거래를 한다는 의미는 아닙니다.

 
Meat :

좋아, 이 논쟁을 떠나자. 여전히 건설적이지 않고 오히려 그 반대가 될 것이다. 당신은 이미 내가 쓴 것의 의미를 왜곡하기 시작하고 있습니다(의도적인지 아닌지는 모르겠습니다). 왜냐하면 나는 지표가 아니라 메타 트레이더와 거래한다고 러시아어로 썼고 당신은 다시 어떤 종류에 대해 이야기하고 있기 때문입니다. 지표에서 거래의. 앞서 말한 내용을 잘못 해석했다면 "지표가 거래에 사용된다"라는 문구가 지표가 거래를 한다는 의미는 아닙니다.

그렇다면 지표 거래에서 신호를 받는 Expert Advisor는? 물론 이 모든 것이 MT4에도 적용됩니까? 바르게? 그렇다면 내 질문은 남아 있습니다. 이 모든 것을 전문가에게 맡기는 것이 어떻겠습니까? 이것은 합리적입니다.
 
Zhunko : Igor, Alexey의 코드가 아니라 인터넷 연결 끊기에 대한 것입니다.

예, 이해합니다. 하지만 그의 코드는 winhr에서 인터넷이 비활성화되어 있을 때 작동합니다.

그리고 원칙적으로 코드가 필요합니다. 우리는 그것을 포함 형태로 만들고 쉬는 날에는 모든 코드에 눈금이 있습니다. 그래픽 개체로 작업 할 때 특히 유용합니다. 사람들은 종종 "스마트 눈금자"를 만들 것을 요청합니다. 등, 쉬는 날에는 아이코드로 해야

 
IgorM :

예, 이해합니다. 하지만 그의 코드는 winhr에서 인터넷이 비활성화되어 있을 때 작동합니다.

그리고 원칙적으로 코드가 필요합니다. 우리는 그것을 포함 형태로 만들고 쉬는 날에는 모든 코드에 눈금이 있습니다. 그래픽 개체로 작업할 때 특히 유용합니다. 사람들은 종종 "스마트 눈금자"를 만들 것을 요청합니다. 등, 쉬는 날에는 아이코드로 해야

글쎄, 나는 모든 곳에서 작동하는 코드를 게시했습니다. 한 줄. 타이머 없이. 모든 표시기와 모든 OS에서 작동합니다. 실험에 충분합니다.

전문가도 위에 게시했습니다. EA에 대한 눈금을 생성하는 행을 표시기 코드로 대체할 수 있습니다. 그런 다음 그는 전문가를 뽑을 것입니다.

라이브러리 를 단순화하고 사용할 수 있습니다. 모든 것이 이미 거기에 구현되어 있습니다.

 
Zhunko :
그렇다면 지표 거래에서 신호를 받는 Expert Advisor는? 물론 이 모든 것이 MT4에도 적용됩니까? 바르게? 그렇다면 내 질문은 남아 있습니다. 이 모든 것을 전문가에게 맡기는 것이 어떻겠습니까? 이것은 합리적입니다.

아니요, 저는 제 자신을 거래합니다. 우리가 자동 거래에 대해 이야기하고 있다면 지표 또는 틱 문제는 더 이상 필요하지 않기 때문에 전혀 제기되지 않을 것입니다. 그래서 분명히 당신은 처음에 이 분기의 의미를 잘못 이해했습니다.

 

젠장, 여기에 다른 것이 있습니다. 끈

TimerCode[ byte / 4 ] += ( value [i]>>( 8 *j)& 0xFF ) <<( byte % 4 * 8 );

로 대체되어야 합니다

TimerCode[ byte / 4 ] |= ( value [i]>>( 8 *j)& 0xFF ) <<( byte % 4 * 8 );

그렇지 않으면 SetMyTimer를 다시 호출할 때 오류가 발생합니다. 음, 또는 루프가 시작되기 전에 단순히 배열을 0으로 초기화할 수 있습니다.

Win7의 경우 문제를 재현할 수 없었고 모든 것이 잘 작동합니다. 그리고 맹목적으로 디버깅하는 것은 비현실적입니다. 7에서 이 코드를 작동하는 다른 사람이 여기에 있는지 궁금합니다. 그리고 특별한 Windows가 있는 것 같은 느낌이 듭니다.

 

무엇이 잘못되었는지 찾은 것 같습니다. 다음은 SetMyTimer 함수의 수정된 버전입니다.

 int SetMyTimer( int interval)
{    
   int MT4InternMsg= RegisterWindowMessageA( "MetaTrader4_Internal_Message" );
   int hWnd= WindowHandle(Symbol(),Period());
   int PostMsgAddr= GetProcAddress(GetModuleHandleA( "user32.dll" ), "PostMessageA" );
   if (PostMsgAddr== 0 ) return ( 0 );
   // push ebp; move ebp,esp; push 01; push 02; push MT4InternMsg; push hWnd; mov eax,PostMsgAddr; call eax; pop ebp; ret 0010;    
   int value []={ 0x55 , 0x8B , 0xEC , 0x6A , 01 , 0x6A , 02 , 0x68 , 0000 , 0x68 , 0000 , 0xB8 , 0000 , 0xFF , 0xD0 , 0x5D , 0xC2 , 0x10 };
   int len[]=  { 1 ,     1 ,   1 ,     1 ,   1 ,   1 ,   1 ,   1 ,   4 ,     1 ,   4 ,     1 ,   4 ,     1 ,   1 ,     1 ,     1 ,   2 };
   value [ 8 ]=MT4InternMsg;   value [ 10 ]=hWnd;   value [ 12 ]=PostMsgAddr; 
   int byte = 0 ;  ArrayInitialize(TimerCode, 0 );
   for ( int i= 0 ;  i<ArraySize( value );  i++)
     for ( int j= 0 ;  j<len[i];  j++, byte ++)
      TimerCode[ byte / 4 ] |= value [i]>>( 8 *j)& 0xFF <<( byte % 4 * 8 );

   return ( SetTimer(hWnd, TimerId, interval, TimerCode) );
}

이제 제대로 작동합니다.

 

아니 ... 작동하지 않습니다

로그에 오류가 없으며 Vadim의 조언에 따라 터미널의 인터넷도 꺼지지 않았습니다. 출력은 여전히 틱이 없습니다.