DLL 없이 MetaTrader 5 터미널에서 직접 OpenCL로 할 수 있는 일은 다음과 같습니다. - 페이지 11

[삭제]  
fxsaber :

분명히 당신은 알고리즘 트레이더의 프로그래밍 목표 와 유사한 것을 몇 줄로 된 모든 거래 논리라고 부릅니다.

이 예에서 Signal이 긍정적인 역학을 나타내기 위해 알고리즘 트레이더의 전체 본질은 실제로 한 줄에 포함되어 있습니다.

이는 Order-logic과 아무 관련이 없지만 TS의 결과에 결정적입니다.


"정확히 같은 줄"은 유능한 고문에게 있습니다. 그리고 그것을 작성하는 데 관여하는 것은 알고리즘 거래자입니다.


그는 실생활에서 무엇을 보여줍니까? 당신은 기분이 좋지 않습니다. 확실히 문제(있는 경우)는 실제 작업과 관련된 기록되지 않은 사소한 일(일종의 핑 점프, 데이터 패킷 손실 또는 로브에 어려움이 있는 네트워크의 전력 서지)에 숨겨져 있습니다. 그런데 저는 내 주제 를 수집하는 것도 천천히.
 
Alexey Oreshkin :

무엇 때문에?
나는 gui 로봇을 전혀 만든 적이 없으며, 이것에 시간을 낭비하는 것이 의미가 없다고 생각합니다.

statarbitrage의 전략을 어떻게 시각적으로 분석할 수 있는지도 모르겠습니다.)) 전체 분석은 계산된 데이터일 뿐이지만 이를 위해서는 디버깅 단계에서 충분한 로그가 있습니다. 예를 들어 이러한 데이터는 전략 디버깅 단계에서 사용되지만 시각화에서는 아무 것도 알려주지 않습니다.

파일:
[삭제]  
fxsaber :

분명히 당신은 알고리즘 트레이더의 프로그래밍 목표 와 유사한 것을 몇 줄로 된 모든 거래 논리라고 부릅니다.

이 예에서 Signal이 긍정적인 역학을 나타내기 위해 알고리즘 트레이더의 전체 본질은 실제로 한 줄에 포함되어 있습니다.

이는 Order-logic과 아무 관련이 없지만 TS의 결과에 결정적입니다.


"정확히 같은 줄"은 유능한 고문에게 있습니다. 그리고 그것을 작성하는 데 관여하는 것은 알고리즘 거래자입니다.


진드기는 스캘핑에만 적합합니다. 그들은 정확한 진입에 대한 분석이 없기 때문에 포지션의 절반이 플랫에 갇힐 것이기 때문에 폐쇄형 알고리즘의 단기 전략으로는 신뢰할 수 없습니다. 입력은 무작위로 얻어지며 결과는 적절합니다. 똑똑한 사람들이 여기에서 나에게 말했듯이 틱은 전략 테스터에게 잘 도움이 되며 주식으로 작업하는 것이 더 효율적이 되었습니다. 그렇지 않으면 어떤 종류의 틱 항목이 될 수 있습니다. 이것은 정보가없는 순수한 반복입니다.이 모든 틱 - 다시 말하지만 틱으로 과거 상태를 알 수 있지만 미래 상태는 결코 알 수 없으며 시장은 기술적 분석에 의해서만 움직입니다. 통화 쌍 시세의 이동 방향. 그 분석에 속하지 않는 사람들은 계좌로 돈을 가지고 가고, 분석 안에 있고 규칙에 따라 행동하는 사람들은 계좌에서 돈을 인출합니다. 모든 것이 외환의 본질입니다. 이 시각화된 넌센스 대신, 시세 차트의 기술적 분석 기술과 0.5 이상의 확률로 시장에서 상품 시세의 추가 움직임 벡터를 결정하는 기술을 사용하여 두 개의 세 가지 지표를 고문에 나사로 고정합니다. 로보 sms 그리고 언젠가는 손실 49%, 이익 51%만 보내고 행복이 있을 것입니다 :)))
 
이 주제와 관련이 없는 댓글은 " 자체 GUI 개념 "으로 이동되었습니다.
 

다시 한 번 주제로 이동하여 DLL 없이 MetaTrader 5 터미널 에서 직접 OpenCL로 수행할 수 있는 작업 을 찾습니다.

근데 미친 홀리바를 읽어야지.. 큰 부탁.. 주제에 쓸게 없으면 아예 쓰지마라...

 

아주 이상한.

터미널에 메모리 누수가 있는 것 같습니다.

데모 스크립트를 작성했습니다. 나는 내가 놓치고 있는 것이 없는지 확인하고 싶습니다. 이것은 실제로 버그입니다.

 //+------------------------------------------------------------------+
//|                                            OpenCL_MemoryLeak.mq5 |
//|                                           Copyright 2017, Progid |
//|                             http://www.mql5.com/en/users/progid/ |
//|                                                       18.04.2017 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, Progid"
#property link        "http://www.mql5.com/en/users/progid/"
#property version    "1.00"

//+------------------------------------------------------------------+
//| define
//+------------------------------------------------------------------+
#ifndef   _Error_
 #define _Error_(info)  { Print ( "Error: " ,info, " line: " +( string ) __LINE__ + " file: " + __FILE__ + " function: " + __FUNCTION__ + "; GetLastError: " +( string ) GetLastError ()); }
#endif

#ifndef   _ErrorDefault_
 #define _ErrorDefault_(info,r) { _Error_(info) r; }
#endif

#define _RAM_Print_ Print ( "RAM used: Program(" , MQLInfoInteger ( MQL_MEMORY_USED ), " MB) Terminal(" , TerminalInfoInteger ( TERMINAL_MEMORY_USED ), " MB)" );

//+------------------------------------------------------------------+
//| resource
//+------------------------------------------------------------------+
//#resource "Gpu_Code_0.cl" as string _CL_GpuCode_0

string _CL_GpuCode_0 = ""
"__kernel void GPU_Test (global int * buf_0,"
"                        global int * buf_1,"
"                        global int * buf_r,"
"                        "
"                        local  int * l_buf_1)"
"{"
"   const int id   = get_global_id(0);"
"   "
"   buf_r[id] = 0;"
"   "
"   l_buf_1[id] = buf_0[id] * buf_1[id];"
"   "
"   buf_r[id] = l_buf_1[id];"
"}" ;


//+------------------------------------------------------------------+
//| include
//+------------------------------------------------------------------+
#include <OpenCL\OpenCL.mqh>

//+------------------------------------------------------------------+
//| global var
//+------------------------------------------------------------------+
COpenCL _OpenCL;

const int _Size = 5000 ;

int _Buf_0[];
int _Buf_1[];
int _Buf_r[];
   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart ()
{
   if ( ArrayResize (_Buf_0, _Size) != _Size) _ErrorDefault_( "" , return )
   if ( ArrayResize (_Buf_1, _Size) != _Size) _ErrorDefault_( "" , return )
   if ( ArrayResize (_Buf_r, _Size) != _Size) _ErrorDefault_( "" , return )
   
   for ( int i= 0 ; i<_Size; ++i)
   {
      _Buf_0[i] = i;
      _Buf_1[i] = i;
   }
   
   if (!GPU_Init()) _ErrorDefault_( "" , return )
   
   while (! _StopFlag )
   {
       if (!GPU_Test()) _ErrorDefault_( "" , break )
   }
      
   _OpenCL.Shutdown();
   
   Print ( "Completed!" );
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool GPU_Init()
{
#define _gpu_error_ _OpenCL.Shutdown(); return false
   
//---init
   if (!_OpenCL.Initialize(_CL_GpuCode_0, true )) _ErrorDefault_( "" , _gpu_error_)
   
   
//---kernels
   if (!_OpenCL.SetKernelsCount( 1 )) _ErrorDefault_( "" , _gpu_error_)

   if (!_OpenCL.KernelCreate( 0 , "GPU_Test" )) _ErrorDefault_( "" , _gpu_error_)


//---buffers
   if (!_OpenCL.SetBuffersCount( 3 )) _ErrorDefault_( "" , _gpu_error_)

   //buf_0
   if (!_OpenCL.BufferCreate( 0 , _Size* sizeof ( int ), CL_MEM_READ_ONLY )) _ErrorDefault_( "" , _gpu_error_)
   //buf_1
   if (!_OpenCL.BufferCreate( 1 , _Size* sizeof ( int ), CL_MEM_READ_ONLY )) _ErrorDefault_( "" , _gpu_error_)
   //buf_r
   if (!_OpenCL.BufferCreate( 2 , _Size* sizeof ( int ), CL_MEM_WRITE_ONLY )) _ErrorDefault_( "" , _gpu_error_)
   
   
//---args
   if (!_OpenCL.SetArgumentBuffer( 0 , 0 , 0 )) _ErrorDefault_( "" , _gpu_error_)
   if (!_OpenCL.SetArgumentBuffer( 0 , 1 , 1 )) _ErrorDefault_( "" , _gpu_error_)
   if (!_OpenCL.SetArgumentBuffer( 0 , 2 , 2 )) _ErrorDefault_( "" , _gpu_error_)
   
   if (!_OpenCL.SetArgumentLocalMemory( 0 , 3 , _Size* sizeof ( int ))) _ErrorDefault_( "" , _gpu_error_)


//---write to GPU
   if (!_OpenCL.BufferWrite( 0 , _Buf_0, 0 , 0 , _Size)) _ErrorDefault_( "" , return false )
   if (!_OpenCL.BufferWrite( 1 , _Buf_1, 0 , 0 , _Size)) _ErrorDefault_( "" , return false )
   
   
//---
#undef _gpu_error_ 

   return true ;   
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+   
bool GPU_Test()
{ 
   for ( int c= 0 ; c< 100 ; ++c)
   {   
//---Execute     
       uint GlobalWorkOffset[ 1 ] = { 0 };
       uint GlobalWorkSize[ 1 ]   = { 0 }; GlobalWorkSize[ 0 ] = _Size;
      
       if (!_OpenCL.Execute( 0 , 1 , GlobalWorkOffset, GlobalWorkSize)) _ErrorDefault_( "" , return false )
       if (!_OpenCL.BufferRead( 2 , _Buf_r, 0 , 0 , _Size)) _ErrorDefault_( "" , return false )
   }

//---RAM
   int RAM_Used = TerminalInfoInteger ( TERMINAL_MEMORY_USED );
   
   if (RAM_Used > 3024 ) _ErrorDefault_( "RAM used: " +( string )RAM_Used+ " > 3024 MB" , return false )
   
   static ulong LastMSC = 0 ;
    
   if ( GetMicrosecondCount () - LastMSC >= 3000000 )
   { 
      _RAM_Print_
      
      LastMSC = GetMicrosecondCount ();
   }
   
//---
   return true ;
}


메모리 누수가 상당히 눈에 띕니다. 100MB의 경우 1분 동안.

누출은 프로그램에서 제외됩니다. MQLInfoInteger ( MQL_MEMORY_USED ) 는 이를 배제합니다.

이것은 정말 버그이며 서비스 데스크에 가야합니까?

로그의 스크립트는 프로그램 자체와 터미널 모두에서 소비한 RAM의 양을 인쇄합니다.

 
Marat Sultanov :

아주 이상한.

터미널에 메모리 누수가 있는 것 같습니다.

데모 스크립트를 작성했습니다. 나는 내가 놓치고 있는 것이 없는지 확인하고 싶습니다. 이것은 실제로 버그입니다.


메모리 누수가 상당히 눈에 띕니다. 100MB의 경우 1분 동안.

누출은 프로그램에서 제외됩니다. MQLInfoInteger ( MQL_MEMORY_USED ) 는 이를 배제합니다.

이것은 정말 버그이며 서비스 데스크에 가야합니까?


개가 어디에서 뒤적거렸는지 알 수 있도록 이 문제에 대한 연구 결과를 여기에 게시하십시오))
 

정말, 아무도 실용적인 작업에서 OpenCL을 사용하지 않습니까? :)

Konstantin :

개가 어디에서 뒤적거렸는지 알 수 있도록 이 문제에 대한 연구 결과를 여기에 게시하십시오))

좋은. 죄송합니다. 이것 때문에 저처럼 갇힌 것입니까, 아니면 일반적인 개발을 위해 알고 싶은 것입니까?

 
Marat Sultanov :

정말, 아무도 실용적인 작업에서 OpenCL을 사용하지 않습니까? :)


나는 사용하지만 당신의 손은 당신의 모범에 도달하지 못했습니다
 
Igor Volodin :

나는 사용하지만 당신의 손은 당신의 모범에 도달하지 못했습니다

괜찮은. 로그의 스크립트는 프로그램 자체와 터미널 모두에서 소비한 RAM의 양을 인쇄합니다. 스크립트를 실행하면 터미널에서 소비하는 RAM 양이 어떻게 증가하는지 즉시 로그에서 확인할 수 있습니다.

프로그램에서 집중적인 계산을 사용합니까?