トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 2333

 


....

 

簡単、遺伝的プログラミングの可能性についての良い記事

https://blog.ephorie.de/symbolic-regression-genetic-programming-or-if-kepler-had-r

 

Pythonでmqlスクリプトをテストし、その中のいくつかの関数を大幅に高速化するクールな方法を(私にとっては)見つけました。

以下は、mql5の初期関数で、pythonに置きたいものです。平滑化されたパターンを使って、価格の極小値や極大値を探すだけです。

void get_loc_extremum(double &x[],double &x2[],double &loc_max[],double &loc_min[],bool real_price)
  {
   int N = ArraySize(x);
   for(int i=1; i<N-1; i++)
     {
      if(x[i-1]<x[i]&& x[i]>x[i+1])
        {
         ArrayResize(loc_max,ArraySize(loc_max)+1);
         if(real_price)
            loc_max[ArraySize(loc_max)-1]=x2[i];
         else
            loc_max[ArraySize(loc_max)-1]=x[i];
        }

      if(x[i-1]>x[i]&& x[i]<x[i+1])
        {

         ArrayResize(loc_min,ArraySize(loc_min)+1);
         if(real_price)
            loc_min[ArraySize(loc_min)-1]=x2[i];
         else
            loc_min[ArraySize(loc_min)-1]=x[i];
        }

     }

これはいくつかのステップで行われます。

1.Visual StudioまたはCodeblockのどこかで、DLLをコンパイルしてください。.cpp ファイルに関数を書き、.h ファイルに関数を宣言します。投稿の添付ファイルでうまくいった例。フォルダ内のcodebloxプロジェクトファイル、main.cppファイル、 main.h ファイル、フォルダ内の \lib.dll ファイル。 つまり、c++の関数のヘッダーは 以下のとおりです。

void DLL_EXPORT GetLocalMaxMin(double* x_sm[],double* x_rl[], double* loc_max[], double* loc_min[], int N, bool real_price)
{
...
}

2 pythonで以下を実行します。

from ctypes import *

my_dll = cdll.LoadLibrary("my_dll/my_lib.dll") 					#загружаем  свою DLL
my_dll.GetLocalMaxMin.argtypes = [POINTER(c_double), 
        POINTER(c_double), POINTER(c_double), POINTER(c_double), c_int, c_bool] #определяем  типы входных аргументов функции через атрибуты ctypes
my_dll.GetLocalMaxMin.restype = None                                            #определяем  типы выходных данных 

...
#  y - список цен
#  y_sm - список сглаженных цен
#  len(y)=len(y_sm) - длина списков одинаковая

x_sm = (c_double * len(y))(*y_sm)    				  #создаем  указатель на массив x_sm размером len(y_sm) предаем туда указатель на массив y_sm
x_rl = (c_double * len(y))(*y)       			       	  #создаем  указатель на массив x_rl размером len(y) предаем туда указатель на массив y
loc_max = (c_double * len(y))()      				  #создаем  указатель на массив loc_max размером len(y) заполный 0.0 
loc_min = (c_double * len(y))()     				  #создаем  указатель на массив loc_min размером len(y) заполный 0.0 
my_dll.GetLocalMaxMin(x_sm, x_rl, loc_max, loc_min, len(y), True) #вызываем  функцию и передаем туда все что насоздавали

print(list(loc_max),list(loc_min)) #смотрим  что получилось

これは最終的な真実ではなく、任意の追加、または他のオプションを持って、書き込みます。

ファイル:
my_lib.zip  36 kb
 
welimorn:

Pythonでmqlスクリプトをテストし、その中のいくつかの関数を大幅に高速化するクールな方法を(私にとっては)見つけました。

以下は、mql5の初期関数で、pythonに置きたいものです。平滑化されたパターンを使って、価格の極小値や極大値を探すだけです。

これはいくつかのステップで行われます。

1.Visual StudioまたはCodeblockのどこかで、DLLをコンパイルしてください。.cpp ファイルに関数を書き、.h ファイルに関数を宣言します。投稿の添付ファイルでうまくいった例。フォルダ内のcodebloxプロジェクトファイル、main.cppファイル、 main.h ファイル、フォルダ内の \lib.dll ファイル。 つまり、c++の関数のヘッダーは 以下のとおりです。

2 pythonで以下を実行します。

これは最終的な真実ではなく、任意の追加、または他のオプションは、書き込みます。

何を実現したいのか?
スピードなら、使わないで
ArrayResize(loc_max,ArraySize(loc_max)+1);

ループの内側で,関数を呼び出す前に一度,C++ や python でやったように好きなサイズを設定するか,第3パラメータで予約します.

ArrayResize(loc_max,ArraySize(loc_max)+1, max_size);

これで、ArrayResizeを呼び出すたびに、メモリ上に新しいブロックが作成され、古いブロックがそこにコピーされ、古いブロックが削除されるようになりました。これはとてもとても遅いです。

И

ArraySize(loc_max)

は、毎回やる必要はなく、変数に格納すればよい。


簡単な関数を3つの異なるプログラミング言語に翻訳する必要がなくなるかもしれないので、試してみてください。開発者は、MQLはC++に匹敵するスピードで、ものによってはさらに速くなると言っています。

MQLから直接DLLを呼び出せるなら、なぜPythonが必要なのですか?

それとも、何か別の目的があるのでしょうか?
 
elibrarius:
何を実現したいのですか?
スピードの場合、使用しない

ループの内側で,関数を呼び出す前に1回,C++ や Python でやったように好きなサイズを設定するか,第3パラメータで予約します。

これで、ArrayResizeを呼び出すたびに、メモリ上に新しいブロックが作成され、古いブロックがそこにコピーされ、古いブロックが削除されるようになりました。これはとてもとても遅いです。

И

は、毎回やる必要はなく、変数に格納すればよい。


簡単な関数を3つの異なるプログラミング言語に翻訳する必要がなくなるかもしれないので、試してみてください。開発者は、MQLはC++に匹敵するスピードで、ものによってはもっと速いと言っています。

MQLから直接DLLを呼び出せるのであれば、なぜPythonが必要なのでしょうか?

それとも、何か別の目的があるのでしょうか?

メッセージにある極限探索 機能は、その原理を示すための一例として提供されているに過ぎません。

目的は、Pythonで特徴量とターゲットの依存関係を探し、モデルを選ぶのに便利であること、一方、MQLはテスターが充実しており、自分をごまかさないのであれば、調査結果を明確に見積もることができることです。

Pythonの操作には慣れているのですが、勉強中のため、Pythonでベクトル計算を使ったループでmql5の関数を書くことができないのです。Pythonは非常に遅いので、これなしでコードを書くのは時間の無駄です。関数によっては、すべてのバーで呼び出されることがあり、その場合、見つけるのが非常に難しくなります。私は、pythonとmql5の両方のソリューションを持っているので、どこでもalgibを使用しています。しかし、私の狂った想像力に関しては、いくつかの問題があります。

mql5 用のコードは、簡単にc++に 変換してDLLに コンパイルすることができます。その結果、テスターとPythonスクリプトで同じ関数を使用することになりました。

 
welimorn:

メッセージにある極限探索関数は、その原理を示すために、単に例として挙げたものです。

目的は、Pythonは特徴量とターゲットの依存関係の検索やモデルのフィッティングに便利で、MQLはテスターが充実しているので、自分をごまかさないのであれば、調査結果を明確に見積もることができる。


Pythonで依存関係を見つけ、モデルを選び、トレーニングし、テストしたわけです。また、テスターでどのようにテストするのですか?PythonはテスターやMKL5と仲が悪い。

 
TSの平均位置保持時間が10分である場合。そして、現在のポジションは 10時間ウロウロしており、その後その結果はガンビット(完全に非システム的)なのか?
 
fxsaber:
TSの平均ポジション保持時間が10分とすると。そして、現在のポジションは 10時間ぶら下がっていて、その後その結果はガンビット(完全に非システム的)なのですか?

TSのロジック・ルールがどのように書かれているかによる。もしかしたら」は確率的な結果であり、TCのロジックで決まるものではありません。もし、そのロジックが10時間すべて間違いなく機能したのであれば、それは単なるレアケースと言えるでしょう。

 
Valeriy Yastremskiy:

10時間のロジックがすべて間違いなく機能したとしたら、それは単なるレアケースです。

ロジックがうまくいったからと言って、結果がシステム化されるわけではありません。

 
fxsaber:

ロジックがうまくいったからと言って、結果がシステマティックになるわけではありません。

質問では、見返りやシステム性を何に適用するかは明記されていない。TCに対してならTCに依存し、外部条件に対してならレアケースは本来システム化されない。また、例外もあるかもしれません。5月から15年3月までのユーロドル14.システム的な事件ではない

理由: