İşte herhangi bir DLL olmadan doğrudan MetaTrader 5 terminalinde OpenCL ile yapabilecekleriniz - sayfa 11

 
fxsaber :

Görünüşe göre, bir algo-tüccarın programlama amacına benzer bir şey diyorsunuz - tüm ticaret mantığı birkaç satırda.

Bu örnekte, Sinyalin pozitif dinamikler göstermesi için, algoritmik tüccarın tüm özü aslında sadece bir satırda yer almaktadır.

Sipariş mantığı ile ilgisi olmayan, ancak TS'nin sonuçları için belirleyici olan.


"Tam olarak aynı satır" herhangi bir yetkili danışmandadır. Ve onu yazmakla meşgul olanlar algoritmik tüccarlardır.


Gerçek hayatta ne gösteriyor? Mutsuz bir ruh halindesiniz. Elbette sorun (eğer varsa) gerçek işle ilgili kaydedilmemiş bazı önemsiz şeylerde gizlidir (orada bir tür ping atlama, veri paketlerinin kaybı veya ağdaki güç dalgalanmaları nedeniyle elbisenin zorluk çekmesi. Bu arada, ben ayrıca konu çalışmamı yavaş yavaş toplamak.
 
Alexey Oreshkin :

Ne için?
Ben hiç gui robotu yapmadım, bununla vakit kaybetmenin mantığını anlamıyorum.

Statarbitraj stratejilerini görsel olarak nasıl analiz edebileceğinizi de anlamıyorum)) Analizin tamamı yalnızca hesaplanmış verilerdir, ancak bunun için hata ayıklama aşamasında yeterli günlükler vardır. Örneğin, bu tür veriler strateji hata ayıklama aşamasında kullanılır, ancak görselleştirmeleri size hiçbir şey söylemez.

Dosyalar:
 
fxsaber :

Görünüşe göre, bir algo-tüccarın programlama amacına benzer bir şey diyorsunuz - tüm ticaret mantığı birkaç satırda.

Bu örnekte, Sinyalin pozitif dinamikler göstermesi için, algoritmik tüccarın tüm özü aslında sadece bir satırda yer almaktadır.

Sipariş mantığı ile ilgisi olmayan, ancak TS'nin sonuçları için belirleyici olan.


"Tam olarak aynı satır" herhangi bir yetkili danışmandadır. Ve onu yazmakla meşgul olanlar algoritmik tüccarlardır.


Keneler sadece scalping için uygundur. Doğru giriş için bir analiz olmadığı için pozisyonların yarısı bir dairede sıkışıp kalacağından, kısa vadeli bir kapalı algoritma stratejisiyle bile güvenilemezler. Girdi rastgele elde edilir ve sonuç uygundur. Buradaki akıllı insanların bana söylediği gibi, keneler strateji test cihazında iyi yardımcı olur, ayrıca hisse senetleriyle çalışmak daha verimli hale geldi, aksi takdirde ne tür kene girişleri olabilir - sadece giriş-çıkış ve 5-10 dolar kar gibi ölçeklendirme için. Bu, herhangi bir bilgi içermeyen saf bir yineleme, tüm bu keneler - tekrar söylüyorum, onların geçmiş durumlarını tiklerle bilirsiniz, ancak gelecekteki durumlarını asla bilemezsiniz ve piyasa yalnızca teknik analizle hareket eder, bu da bir beklenti yaratan teknik analizdir. döviz çifti tekliflerinin hareket yönü. Bu analizlerin dışında kalanlar hesaba para taşır, o analizlerde olanlar ve kurallarına göre oynayanlar - hesaptan para çekerler. Her şey, forex'in tüm doğası bu. Bu görselleştirilmiş saçmalık yerine, teklif tablosunun teknik analizi teknikleriyle danışmana birkaç üç gösterge vidalayın ve enstrümanın fiyatlarının 0,5'ten fazla bir olasılıkla piyasada daha fazla hareket etme vektörünü belirleyin, bakın robo sms ve bir gün sadece %49 kayıp, %51 kar gönderecek Ve mutluluk olacak :) ))
 
Bu konu ile ilgili olmayan yorumlar " Kendi GUI konseptine " taşınmıştır.
 

Herhangi bir DLL olmadan doğrudan MetaTrader 5 terminalinde OpenCL ile neler yapılabileceğini öğrenmek için bir kez daha konuya gidiyorum.

ama çılgın bayramlar okumalısın.. Büyük bir rica.. Konuya yazılacak bir şey yoksa hiç yazmayın...

 

Çok ilginç.

Terminalde bir bellek sızıntısı gibi görünüyor.

Bir demo senaryosu yazdım. Hiçbir şeyi kaçırmadığımdan emin olmak istiyorum ve bu gerçekten bir hata.

 //+------------------------------------------------------------------+
//|                                            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 ;
}


Bellek oldukça belirgin bir şekilde sızdırıyor. Yüz MB için bir dakika.

Sızıntı programa dahil edilmemiştir, çünkü MQLInfoInteger ( MQL_MEMORY_USED ) bunu dışlar.

Bu gerçekten bir hata mı ve servis masasına gitmeli miyim?

Günlükteki komut dosyası, hem programın kendisi hem de terminal tarafından tüketilen RAM miktarını yazdırır.

 
Marat Sultanov :

Çok ilginç.

Terminalde bir bellek sızıntısı gibi görünüyor.

Bir demo senaryosu yazdım. Hiçbir şeyi kaçırmadığımdan emin olmak istiyorum ve bu gerçekten bir hata.


Bellek oldukça belirgin bir şekilde sızdırıyor. Yüz MB için bir dakika.

Sızıntı programa dahil edilmemiştir, çünkü MQLInfoInteger ( MQL_MEMORY_USED ) bunu dışlar.

Bu gerçekten bir hata mı ve servis masasına gitmeli miyim?


lütfen bu konudaki araştırma sonuçlarını burada yayınlayın, böylece köpeğin nerede dolaştığını bileceksiniz))
 

Gerçekten, hiç kimse pratik görevlerde OpenCL kullanmıyor mu? :)

Konstantin :

lütfen bu konudaki araştırma sonuçlarını burada yayınlayın, böylece köpeğin nerede dolaştığını bileceksiniz))

İyi. Pardon, benim gibi bu yüzden mi takıldınız yoksa sadece genel gelişim için mi bilmek istiyorsunuz?

 
Marat Sultanov :

Gerçekten, hiç kimse pratik görevlerde OpenCL kullanmıyor mu? :)


Kullanıyorum ama ellerin örneğe ulaşmadı
 
Igor Volodin :

Kullanıyorum ama ellerin örneğe ulaşmadı

İyi. Günlükteki komut dosyası, hem programın kendisi hem de terminal tarafından tüketilen RAM miktarını yazdırır. Komut dosyasını çalıştırırsanız, günlükte terminal tarafından tüketilen RAM miktarının nasıl arttığını hemen göreceksiniz.

Programlarınızda yoğun hesaplamalar kullanıyor musunuz?

Neden: