MT用のPythonトレーディングシステムを作る。 - ページ 3

 
Yuriy Asaulenko:

それはまた別の話ですが)。

チームを組んだりしない。自分の足で歩き、自分が正しいと思うこと、面白いと思うことを行い、何の約束もしない。

付き合ってくれる人がいれば、反対もしないし、約束もしない。

チームの話ではなく、あのスレッドで提案したPythonやRとMQLを連携させるEXEアプリケーションという形のエンジンの話です。
 
Ivan Negreshniy:
コマンドの話ではなく、あのスレッドで提案したPythonやRとMQLを連携させるEXEアプリケーションという形のエンジンの話です。

EXEを手に入れることができます。Pythonでは問題ありません。R、ごめん、使ってないんだー、イミフ、なんでもかんでも大放出。このゴミの中にダイヤモンドがあるとしたら、その探し方に問題がある。SanSanychが教えてくれれば別ですが)。

私は主にニューラルネットワークを扱っていますが、Rを使わなくても十分な数のニューラルネットワークがあります。

しかし、実はこのインタラクションの手法は普遍的なものになる予定であり、おそらくRにも使えると思います。

 
さて、ビルド済みのアプリケーションができたので、いよいよ端末とPythonの間でデータのやり取りをします。
まずは、最もシンプルな交換方法であるファイルによるデータ交換を選択することにします。
今、多くの人がインク壺の中で、無駄な鼻歌を歌うだろう。だから、させる)。
1.アプリケーションの 構築やデバッグの 際には、バージョンアップの手間がかからないファイル共有が最も効率的です。また、一度作ったアプリケーションは、他のものに置き換えることができます。
2.既成のTCの大半は、ファイル交換のスピードは十分すぎるほどです。50~100msです。物足りない?
3.RAM-Diskでファイル交換した場合、1.5GByte/sに達します。レイテンシーを全く計測できない。
全部、吐き出して、相手のことは忘れてください(笑)。
まあ、実は最終局面でも、私たちやトピックが生きれば、別の交流が予定されているのですが......)。

端末とのやりとりはCSVファイルで行います。これまでは、端末からアプリケーションへの一方通行でした。
利害の衝突を避けるため、セマフォ・ファイルを使用することにします。
そこで、データファイルをDataTS.csvとし、セマフォファイルをSTS.sとする。
端末はDataTS.csvにデータを書き込み、書き込み後、空のセマフォファイルSTS.sを作成する。
アプリケーションはSTS.sセマフォファイルの存在を確認し、次にDataTS.csvファイルを読み込み、そしてSTS.sセマフォファイルを削除します。
そして、端末はSTS.sのセマフォファイルの消滅を検出し、その時だけ新しいデータをDataTS.csvファイルに書き込む。
PhytonやMTファイルの機能により、様々なバリエーションが考えられるが、まだ調べていない。
しかし、一度に全部ではなく、まずはPythonと連携し、その能力を見極める必要があります。
それが、私たちの仕事です。
 
前回訪問時から、いくつかの変化がありました。アプリは完全に機能するようになりました。前回の記事で説明したすべてが実装されています。すべてのボタンが動作し、ファイル交換が実装されました。
- クリアボタンは、出力ウィンドウをクリアします。
- 送信ボタンは、入力ウィンドウの行を出力ウィンドウに送ります。
- Startボタンを押すと、ファイル交換が開始されます。
- 停止ボタンでファイル交換を停止します。
これは簡単に確認できます。フォルダ C:\PyTS を作成し、データファイル DFile.csv を置き、セマフォファイル SFile.tx を置きます。このPythonプログラムは、セマフォファイルを検出し、データファイルを読み込んで出力ウィンドウに表示し、セマフォファイルを削除しています。
これで、DFile.csvのデータを変更して新しいセマフォファイルを作成すれば、プログラムは新しいデータを読み込んで出力します。
簡単なMQLプログラムを書いて、私たちのプログラムの読み込みフォルダをMTの書き込みフォルダに変更すれば、交換のスピード、可能なデータギャップ、その他多くのことを評価することができます。
ファイル交換を担当する関数は、FileExchange()のみである。これは、追加のスレッドであるタイマースレッドで実装されています。このようなスレッドや関数を何十個も用意しても、アプリケーションには何の影響もありません。つまり、何十個もの並列かつ独立したデータ交換チャンネルを自由に使うことができるのです。
現在、タイマーは10.0秒に設定されていますが、0.001秒に設定することも可能です。
まあ、本当に速度やその他の特性を測定したいのであれば - 交換パスのデバッグ用print()関数を 削除してください - これらは著しく速度を低下させます。
Pythonのプログラムコードは添付ファイルにあります。いつものように、.pyにリネームしてください。
ファイル:
PyTS_1.0.txt  3 kb
 

CSVファイルの交換についてお話しましたが、バージョン1.0(前回の記事参照)では、ファイルを開いて読み込むだけです。次のバージョン1.01では、いくつかの改良を加え、CSVファイルを読み込んでInData変数に格納するようにしました。

実はすべての改造

def FileExchange():
    global Change
    if Change==True:
        if os.path.exists(SFile):
            print("SFile.txt is")
            if os.path.exists(DFile):
                print("DFile.csv is")
                InData = csv.reader(open(DFile, 'r'))
                data_read = [row for row in InData]
                print(data_read)
                os.remove(SFile)
            else:
                print("DFile.csv no")
        else:
            print("SFile.txt no")
        print('Вывод таймера')
        timer =threading.Timer(10.0,FileExchange)
        timer.start()

たった3行の変更+csvライブラリ接続。

また、InData変数からのCSVコンテンツの出力も制御します。

In [18]: [['04.08.2018 14:00', ' 1300', ' 1295', '1310', '1305', '100'], ['04.08.2018 14:10', ' 1307', ' 1297', '1320', '1315', '150']]

これで、行の値は、インデックス、タイプ - 行、列で利用できるようになりました。

さて、そしてコード自体ですが、添付ファイルをご覧ください。

ファイル:
PyTS_1.01.txt  3 kb
 
Yuriy Asaulenko:

CSVファイルの交換についてお話しましたが、バージョン1.0(前回の記事参照)では、ファイルを開いて読み込むだけです。次のバージョン1.01では、いくつかの改良を加え、CSVファイルを読み込んでInData変数に格納するようにしました。

実はすべての改造

たった3行の変更+csvライブラリ接続。

また、InData変数からのCSVコンテンツの出力も制御します。

これで、行の値は、インデックス、タイプ - 行、列で利用できるようになりました。

さて、そしてコード自体ですが、添付ファイルをご覧ください。

ファイル共有の利用は最適な解決策ではありません。ファイル操作が非常に遅い。このような交換には、RAMディスクを接続する必要があります。
 
Grigoriy Chaunin:
ファイルを交換に使うのは最適な解決策ではありません。ファイル操作が非常に遅い。このような交換には、RAMディスクを接続する必要があります。
ファイル交換の性能特性(あるもの)と必要な作業(必要なもの)を教えてください。


そして、私としては、「遅い」ではなく「極めて速い」と言いたい。数値的な特徴がなければ、あなたも私も何も根拠がなく、当面の課題としては意味をなさないのです。ファイル交換と問題のニーズの両方の特徴が必要であり、それらを比較して初めて有効な結論が得られるのです。Yuri Asaulenkoが適切なファイルだと判断したのですから、予定しているデータ転送量と処理時間をよく理解しているのだと思います。

一般にディスクファイルは、シャットダウンしたディスクに保存され、1週間後や1年後にアクセスできるなど、揮発性メモリに比べて大きな利点がある。コントロールするため、分析するため、検証するため、ただ観察するため。

 
Grigoriy Chaunin:
スワップするためにファイルを使用することは、最良の解決策ではありません。ファイル操作が非常に遅い。このような交換には、RAMディスクを接続する必要があります。

この問題は、すでにこのスレッドで、必要に応じてRAM-Diskを使用する可能性も含めて、過去の投稿で議論されています。

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

Pythonを使ったMTのトレーディングシステムの作り方。

ユリイ・アサウレンコ さん 2018.08.01 19:33

アプリケーションの設計図ができたので、いよいよPythonで端末のデータ交換に取り組みます。
まず、最もシンプルな交換方法である、ファイルによるデータ交換を選択します。
今、多くの人がインク壺の中で鼻で笑うだろうが、それは無駄なことだ。だから、させる)。
1.アプリケーションの 構築やデバッグの 際には、バージョンアップの手間がかからないファイル共有が最も効率的です。また、一度作ったアプリケーションは、他のものに置き換えることができます。
2.既成のTCの大半は、ファイル交換のスピードは十分すぎるほどです。50~100msです。物足りない?
3.RAM-Diskでファイル交換した場合、1.5GByte/sに達します。レイテンシーを全く計測できない。
全ては吐き出して、相手を忘れること)
まあ、実は最終局面でも、私たちやトピックが生きれば、別の交流が予定されているのですが......)。
また、このスレッドの最初の投稿の一つで
 

このバージョンは、機能的にはバージョン1.01と同等ですが、不要なprint() コントロールをコードから削除し、クラスアプローチを実装し始めました(Lenin wrote - the approach must be class based)-CSVファイルの処理は完全にクラス-cCSVJobに割り当てられています。

添付のZipファイルには、以前のバージョンのプログラムと、PyTSフォルダにあるテスト用のソースデータが入った必要なファイルが含まれています。

ファイル:
PyTS.zip  6 kb