서로 다른 터미널에서 작동하는 두 개의 Expert Advisor 간의 데이터 교환 - 페이지 2

 

EA는 틱으로 이벤트를 처리하기 때문에 이 방향에서 멈췄다.

하나를 쓰고 다른 하나를 읽는 것의 차이는 이론상 다음 틱에서 틱을 통해 강도에서 ...

 

여기에 아이디어가 하나 방문했고 레지스트리를 통해 데이터 교환 을 할 수 있습니까? 키 생성, 키 삭제. 이를 위한 모든 API가 있는 것 같습니다. 속도가 얼마나 느린지는 모르겠지만 애플리케이션이 액세스하는 부분은 항상 RAM에 있을 수 있는 것 같습니다.

누군가에게 이런 일이 발생했습니까? 이것은 동일한 시스템의 터미널에서만 작동합니다.

나는 이 방향으로 파헤칠 것이다 :-).

 
Andres писал(а) >>

여기에 아이디어가 하나 방문했고 레지스트리를 통해 데이터 교환을 할 수 있습니까? 키 생성, 키 삭제. 이를 위한 모든 API가 있는 것 같습니다. 얼마나 느린지는 모르겠지만 애플리케이션이 접근하는 부분은 항상 램에 있을 수 있는 것 같다.

누군가에게 이런 일이 발생했습니까? 이것은 동일한 시스템의 터미널에서만 작동합니다.

나는 이 방향으로 파헤칠 것이다 :-).

레지스트리 작업을 위한 API에 대한 링크를 제공하십시오.

디스크의 파일을 통한 정보 교환을 기반으로 한 변형을 여전히 고려하고 있습니다. 두 터미널은 물론 동일한 컴퓨터에서 작동합니다.

지금까지 사전에 테스트를 해보니 속도가 1초도 안되어 단말간 정보교환이 가능할 정도의 속도 이상인 것 같았고, 양 계정(BUY 계정, 계정 판매).

사실, 최근에 많은 일이 있어서 지난 몇 주 동안 이 문제를 다루지 않았습니다.

전에 동료 프로그래머에게 물었지만 그는 당면한 문제를 해결하기 위해 레지스트리를 만지작거리지 말라고 경고했습니다. 그는 나에게 하드디스크에 있는 파일을 통한 정보교환을 강력히 추천했다.

여기가 내가 지금 멈춘 곳입니다. 여유 시간이 충분하므로 이 특정 변형을 파일로 구현하는 데 참여하겠습니다.

 

http://yandex.ru/yandsearch?text=CreateFileMapping&stpar2=%2Fh0%2Ftm123%2Fs1&stpar4=%2Fs1

편리함은 실제로 dll에 공유 메모리에 대한 링크가 있다는 것입니다.

이 주소는 구조의 주소로 사용할 수 있습니다. 또한, 당신은 당신의 상상력에 의해서만 제한됩니다 :)

 
solandr >> :

레지스트리 작업을 위한 API에 대한 링크를 제공하십시오.

레지스트리에서 읽는 예.

 

그래서 나는 이미 작은 라이브러리를 작성했고 이미 내 고문은 레지스트리를 통해 완전히 변경되고 있습니다. 실제로 RAM을 통해 변경되며 디스크에 대한 읽기-쓰기가 관찰되지 않습니다. MSDN에 따르면 레지스트리에 수백 KB 이상의 데이터를 밀어넣지 않는 것이 좋습니다.

라이브러리는 모든 키와 매개변수가 임시 레지스트리 영역에서 생성되고 영구 레지스트리에 기록되지 않도록 구성됩니다. 재부팅 후에는 이러한 키가 더 이상 존재하지 않습니다.

단 하나의 BUT - 라이브러리는 255자(MQL 제한) 이하의 문자열 매개변수로만 작동합니다. 하지만 이것으로 충분합니다. 일반적으로 레지스트리의 매개변수는 문자열뿐만 아니라 다양한 유형이 될 수 있지만 지금까지는 다른 유형이 필요하지 않다고 생각합니다. 이제 레지스트리를 통해 두 명의 Expert Advisor를 변경하고 있지만 더 많은 것이 가능합니다 :-). 또 다른 장점은 Win API에서 네트워크 레지스트리에 연결할 수 있다는 것입니다. 누군가가 동일한 네트워크의 다른 시스템에서 실행되는 Expert Advisor 간에 정보를 교환해야 하는 경우 이 방향을 볼 수 있습니다. 제 생각에는 빠르고 간단하며 안정적이며 dll과 파일이 없습니다. 구동 라인 - 라인을 받았습니다.

 #include "RegLib.mqh"

int hKey ;

int init ( )
{
   // инициализируем дефайны
   InitRegDefines ( ) ;

   // создаём тестовый ключ
   hKey = CreateKey ( HKEY_CURRENT_USER , "!MT4TestKey" ) ;

   // создаём поля по умолчанию
   SetStringValue ( hKey , "Bid" , "0.0" ) ;
   SetStringValue ( hKey , "Ask" , "0.0" ) ;

   return ( 0 ) ;
}

int start ( )
{
   // записываем цены в реестр
   SetStringValue ( hKey , "Bid" , DoubleToStr ( Bid , Digits ) ) ;
   SetStringValue ( hKey , "Ask" , DoubleToStr ( Ask , Digits ) ) ;

   // получаем цены в виде строк из реестра
   string BidStr = GetStringValue ( hKey , "Bid" ) ;
   string AskStr = GetStringValue ( hKey , "Ask" ) ;

   // выводим цены из реестра
   Print ( "Bid = " , BidStr , " " , "Ask = " , AskStr ) ;
}

int deinit ( )
{
   // закрываем ключ
   CloseKey ( hKey ) ;
   
   return ( 0 ) ;
}
파일:
reglib.zip  4 kb
 
Andres писал(а) >>

여기에 아이디어가 하나 방문했고 레지스트리를 통해 데이터 교환을 할 수 있습니까? 키 생성, 키 삭제. 이를 위한 모든 API가 있는 것 같습니다. 얼마나 느린지는 모르겠지만 애플리케이션이 접근하는 부분은 항상 램에 있을 수 있는 것 같다.

누군가에게 이런 일이 발생했습니까? 이것은 동일한 시스템의 터미널에서만 작동합니다.

나는 이 방향으로 파헤칠 것이다 :-).

전구로 못을 망치질할 수도 있습니다. 일부는 이해합니다.

 
Integer >> :

전구로 못을 망치질할 수도 있습니다. 일부는 이해합니다.

하지만 아름답습니다. OS 변수를 사용해 볼 수도 있습니다.

 
granit77 писал(а) >>

하지만 아름답습니다. OS 변수를 사용해 볼 수도 있습니다.

시스템 시간을 설정할 수도 있습니다.

 
:))))))))))))))))
사유: