2

我还很陌生python

我制作了一个简单的脚本,从mt4

我的想法/项目是将其变成某种概率指标,即给出概率,除了出价和要价,例如:

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

并且概率在特定周期内发生变化,例如1小时周期,因此每小时都会给出一个新的方向概率

它正在寻找两种模式:A、B、

模式 A 代表看涨模式

模式 B 代表看跌模式

基本上是在寻找再次发生的可能性更高的两个中再次发生的概率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

问:如何把它放在一起......?
答:有一个现实的计划 - 最好在一个人把钱摆在桌面上之前。

这甚至可以让你
免于开始胡说八道

瞄准不现实的目标。

如果计划是有关如何创建“伟大而酷炫的新颠覆性愿景的所有相关方详细阐述和同意的第一份工作文件,那么任何人都不会受到伤害。

逐步组织您的进一步工作 + 始终添加预算控制,无论是[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 根本不支持它
3)忘记使用pandas(即使对于任何 AI/ML 模型原型),因为纳秒在 ML 过程中很重要,pandas 是一个很棒的玩具,但对于真实世界交易的性能却不是需要 ML 模型调整。
4)忘记使用起始逻辑,AI/ML 引擎必须分开,以便在巨大的 HyperPARAM 状态空间中有效地训练/验证/测试它们的最佳泛化能力。
for m in models:可以在源代码中,但不在现实中。[CPU-core*days]一台仪器在 COTS 硬件上的参数优化中可能需要(并且确实需要)大约几十个运行时间,因此请在此处计算实际数字,以便对每个 [S]+[T] 周期进行适当的预算。


结语:

无论如何,如果在财务上可行的话,这是一个聪明的计划。的低延迟 MT4-AI/ML 集成的其他帖子。

于 2016-12-04T17:04:24.270 回答