DLLを使わずにMetaTrader 5で直接OpenCLを使ってできることは次のとおりです。 - ページ 11

 
fxsaber:

どうやら、アルゴトレーダーのプログラミングの目的は、このよう なもの、つまり数行の中にすべての取引ロジックが含まれているというものらしい。

この例では、シグナルがポジティブなトレンドを示すために、アルゴトレーディングの目標全体は、実際にはたった1本の線に含まれています。

オーダーロジックとは関係ないが、TSの結果には決定的な意味を持つ。


"全く同じライン "は、どんな有能なExpert Advisorにもあるのです。そして、アルゴトレーダーが書いているものです。


そして、実際の取引ではどのように表示されるのでしょうか。機嫌が悪いんですね。きっと、実作業とは関係ない些細なこと(Pingが飛んだり、パケットロスしたり、ネットワークの電圧変動でローバにトラブルが起きたり)に問題があるのだろう。ちなみに、これは私のテーマでも あり、ゆっくりロボットを作っています。
 
Alexey Oreshkin:

なぜ?
ロボット用のguiは全く作ったことがないので、無駄な時間を過ごす意味がないと思っています。

また、starbitrage戦略を視覚的に分析する方法がわからない))。解析はすべて計算データのみですが、その分デバッグ段階で十分なログが取れています。例えば、ストラテジーのデバッグ 段階でこのようなデータが使われますが、その可視化では何も分かりません。

ファイル:
 
fxsaber:

どうやら、アルゴトレーダーのプログラミングの目的は、このよう なもの、つまり数行の中にすべての取引ロジックが含まれているというものらしい。

この例では、シグナルがポジティブなトレンドを示すために、アルゴトレーディングの目標全体は、実際にはたった1本の線に含まれています。

オーダーロジックとは関係ないが、TSの結果には決定的な意味を持つ。


"全く同じライン "は、どんな有能なExpert Advisorにもあるのです。そして、アルゴトレーダーが書いているものです。


ダニはスキャルピングにのみ適しています。正しいエントリーのためのテクニカル分析がないため、ポジションの半分がフラットで動かなくなるため、クローズドアルゴリズムの短期戦略でさえも信頼できないのである。ランダムに入力し、その結果が対応する。しかし、ティックによるエントリーは、スキャルピングのような、エントリー・エグジットで5〜10銭の利益を得るようなものでしょうか。もう一度言いますが、あなたは彼らの過去の状態を知っていますが、未来の状態を知ることはありません。それは外国為替の性質である。 この可視化されたナンセンスの代わりに、あなたのエキスパート-アドバイザに指標のカップルを添付し、彼らはチャートを分析し、0.5以上の確率でさらなる価格の動きのベクトルを識別します。)
 
このトピックに関係のないコメントは、「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;
}


メモリが漏れているのが、かなり目立つ。1分間に100MB。

MQLInfoInteger(MQL_MEMORY_USED) で除外されているので、プログラム上ではリークを除外しています。

これは本当にバグなのか、サービスデスクに問い合わせるべきなのか。

このスクリプトは、プログラム自身とターミナルによって消費されたRAMの量をログに出力します。

 
Marat Sultanov:

とても不思議です。

まさにターミナルでメモリリークしているような感じです。

それを実証するためにスクリプトを書きました。見落としがないか、本当にバグなのか、確認したいです。


メモリが漏れているのが、かなり目立つ。1分間に100MB。

MQLInfoInteger(MQL_MEMORY_USED) で除外されているので、プログラム上ではリークを除外しています。

本当にバグなのか、servicedeskに行く価値はあるのか?


この件に関する研究結果を後日ここに投稿してください、犬の埋葬場所がわかるように ))
 

OpenCLを実用的なタスクで使っている人はいないのでしょうか?:)

Konstantin:

その犬がどこに埋まっているのか、調べた結果をここに投稿してください ))

OKです。すみません、私と同じで、これが原因で行き詰っているのか、それとも一般的な開発のために知りたいのか?

 
Marat Sultanov:

OpenCLを実用的なタスクで使っている人はいないのでしょうか?:)


そうなんですが、あなたの例には手が回らないんです
 
Igor Volodin:

そうなんですが、あなたの例には手が回らないんです

素晴らしい。このスクリプトは、プログラム自身と端末の両方で消費されたRAMの量をログに出力します。このスクリプトを実行すると、端末が何MBのRAMを消費しているか、すぐにログで確認することができます。

プログラムで集中計算を行うことはありますか?