2

私はかなり新しいですpython

から価格フィードをインポートする簡単なスクリプトを作成しました。mt4

私のアイデア/プロジェクトは、これをある種の確率指標に変えることです。つまり、ビッドアンドアスクに加えて、確率を示します。たとえば、次のようになります。

TIME/                BID             ASK
USD/CADD     22:19   1.30451 60%^    1.30D39 40%v

確率は特定の期間内、つまり1時間の期間内で変化するため、1時間ごとに方向の新しい確率が得られます

A、B、

パターン A は強気パターンを表します

パターン B は弱気パターンを表します

基本的に、再発する可能性が高い2つのうち、AまたはBが再発する可能性がどれくらい強いかを探します。

ここが私が立ち往生している場所です

まとめ方がわからない…

これが私がこれまでに持っているものです:

import datetime
import numpy as np
import pandas as pd
import sklearn

from pandas.io.data       import DataReader
from sklearn.ensemble     import RandomForestClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.lda          import LDA
from sklearn.metrics      import confusion_matrix
from sklearn.qda          import QDA
from sklearn.svm          import LinearSVC, SVC

import dde_client as ddec
import time

QUOTE_client = ddec.DDEClient('MT4', 'QUOTE')

symbols = ['USDCAD', 'GOLD','EURUSD', 'SILVER', 'US30Cash',  ]
for i in symbols:
    QUOTE_client.advise(i)


def Get_quote():
 while 1:
    time.sleep(1)
    print "Symbol\tDATE\t\tTIME\tBID\tASK"
    for i in symbols:
        current_quote = QUOTE_client.request(i).split(" ")
        day, _time, bid, ask = (current_quote[0], current_quote[1],
                            current_quote[2], current_quote[3])
        print i + ":\t" + day + "\t" + _time +"\t" +bid+ "\t" + ask
        break
        time.sleep(1)
        return Get_quote()
        continue


    def create_lagged_series(cuurent_quote,start_time, end_time, lags=1):
      ts = DataReader(cuurent_quote,symbols,
                    start_time-datetime.timedelta(hours=1),
                    end_time
                    )
      tslag = pd.DataFrame(index=ts.index)
      ts['Today'] = ts['Adj Close']
      tslag["Volume"] = ts["Volume"]
      for i in xrange(0, lags):
         tslag["Lag%s" % str(i+1)] = ts["Adj Close"].shift(i+1)

      tsret = pd.DataFrame(index=tslag.index)
      tsret["Volume"] = tslag["Volume"]
      tsret["Today"] = tslag["Today"].pct_change()*100.0

      for i in xrange(0, lags):
             if (abs(x) < 0.0001):
              tsret["Today"][i] = 0.0001

      for i in xrange(0,lags):
            tsret["Lag%s" % str(i+1)] = \
            tslag["Lag%s" % str(i+1)].pct_change()*100.0

      tsret["Direction"] = np.sign(tsret["Today"])
      tsret = tsret[tsret.index >= start_time]

      return tsret

      if __name__ == "__main__":
         snpert = create_lagged_series(len('GOLD', Get_quote(), 1))
         X = snpret[["Lag1","Lag2"]]
         y = snpret["Direction"]
         start_test = cuurernt_quote


         X_train = X[X.index < start_test]
         X_test = X[X.index >= start_test]
         y_train = y[y.index < start_test]
         y_test = y[y.index >= start_test]
         print "Hit Rates/Confusion Matrices:\n"
         models = [ ( "LR",   LogisticRegression() ),
                    ( "LDA",  LDA() ),
                    ( "QDA",  QDA() ),
                    ( "LSVC", LinearSVC() ),
                    ( "RSVM", SVC( C            = 1000000.0,
                                   cache_size   = 200,
                                   class_weight = None,
                                   coef0        = 0.0,
                                   degree       = 3,
                                   gamma        = 0.0001,
                                   kernel       = 'rbf',
                                   max_iter     = -1,
                                   probability  = False,
                                   random_state = None,
                                   shrinking    = True,
                                   tol          = 0.001,
                                   verbose      = False
                                   )
                      ),
                    ( "RF",   RandomForestClassifier( n_estimators = 1000,
                                                      criterion    = 'gini',
                                                      max_depth         = None,
                                                      min_samples_split = 2,
                                                      min_samples_leaf  = 1,
                                                      max_features      = 'auto',
                                                      bootstrap         = True,
                                                      oob_score         = False,
                                                      n_jobs            = 1,
                                                      random_state      = None,
                                                      verbose           = 0
                                                      )
                      )
                    ]

    # Iterate through the models
      for m in models:

        # Train each of the models on the training set
                 m[1].fit(X_train, y_train)


                 pred = m[1].predict(X_test)


                 print "%s:\n%0.3f" % (m[0], m[1].score(X_test, y_test))
                 print "%s\n" % confusion_matrix(pred, y_test)

これは、私のMT4価格フィード スクリプトそのものです。

import dde_client as ddec
import time

__author__ = 'forex Ticker'

print __author__


QUOTE_client = ddec.DDEClient('MT4', 'QUOTE')

symbols = ['USDCAD', 'GOLD','EURUSD', 'SILVER', 'US30Cash',  ]
for i in symbols:
    QUOTE_client.advise(i)



while 1:
    time.sleep(1)
    print "Symbol\tDATE\t\tTIME\tBID\tASK"
    for i in symbols:
        current_quote = QUOTE_client.request(i).split(" ")
        day, _time, bid, ask = (current_quote[0], current_quote[1],
                            current_quote[2], current_quote[3])
        print i + ":\t" + day + "\t" + _time +"\t" +bid+ "\t" + ask
        break
        time.sleep(1)
        continue

4

2 に答える 2

2

アルゴリズムの修正に関しては、ゼロから作成してさまざまなライブラリを一緒にハッキングするのではなく、実際の例から始めて、好みに合わせて変更することをお勧めします。完全に理解する必要はありませんが、何かを始める必要があります。

MT4 と引用符の読み取りロジックを抽象化し、CSV または TXT ファイルにいくつかのテスト番号 (偽またはサンプリング) を含めることさえできます。このファイルの A パターンと B パターンを認識できる作業例から始めます。独自のアルゴリズムがどのように異なるかを定義し、それを調整してみてください。

それが機能している場合、最後のステップは MT4 統合です。DDE サーバーはデータのエクスポートのみを目的としており、インジケーターを構築するためのものではないようです。この代替フレームワークを検討してください: MT4 を Python にリンクします。それを使用してチャート上のインジケーターを構築できるだけでなく、アルゴリズムを使用して自動取引を実行することもできます。

于 2016-12-04T14:58:44.507 に答える
0

Q:どうやって合わせるの…?
A: 現実的な計画を立てる - お金をテーブルに置く前が最善です。

これにより
、ナンセンスなことを始めたり、非現実的な目標を目指し
たりすることさえ防げます。

計画が、「素晴らしくてクールな新しい破壊的ビジョン」がどのように作成されるかについて、すべての関係者によって精緻化され、合意された最初の作業文書である場合、誰も害はありませ

[man*weeks]さらなる作業を段階的に整理し、予算管理を常に追加[k$]します。

最初は素晴らしくクールなアイデアの実現可能性と存続可能性を判断できるはずです。

MQL4/5側面pythonとその他のコンポーネントの両方で、主要なフェーズ内で慎重に計画します。

  • X [man*weeks][システム統合アーキテクチャ] で、
  • Y [man*weeks][統合モデルの設計] で、
  • Z [man*weeks][統合モデル プロトタイプ] で、
  • U [man*weeks][統合モデルのテスト] で、
  • V [man*weeks][統合モデルのリリース] で、
  • W [man*weeks][統合モデル生産エコシステム]について
  • S [man*weeks][最適な予測モデルを見つけるためのデザイン サイクル]
  • T [man*weeks][予測のための優れた取引戦略を見つけるためのデザイン サイクル]

初期のアーキテクチャ決定で忘れてはならない項目:

0)MQL4/5 を使用するのを忘れると、数億ドルの戦いと動きでサブミリ秒のドメインの戦いに身を置く危険にさらされる
1)Custom Indicator MQL4/5 MetaTrader ターミナルで使用するのを忘れる (ブロッキング)
2)統合を使用するのを忘れるDDE、いくつかの O /Sはそれをまったくサポートしていませ
pandasML モデルのチューニングの必要性。
4)開始と終了のロジックを使用することを忘れてください。膨大な HyperPARAM 状態空間で最高の一般化能力を効率的にトレーニング/検証/テストするには、AI/ML エンジンを分離する必要があります。
for m in models:ソースコードにはあるかもしれませんが、実際にはありません。[CPU-core*days]COTS ハードウェアのパラメーター最適化では、1 つの機器で約数十回の実行時間がかかる場合があるため (実際にかかる場合もあります) 、[S]+[T] サイクルのそれぞれを適切に予算化するために、ここでは現実的な数値で数えます。


エピローグ:

いずれにせよ、財政的に実現可能であると承認されれば、スマートなプログラムです。のための低遅延 MT4-AI/ML 統合に関する他の投稿が好きかもしれません。

于 2016-12-04T17:04:24.270 に答える