我是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
发布于 2016-12-04 14:58:44
至于修正您的算法,我建议您不要从头开始操作,而是将各种库合并在一起,从一个工作示例开始,然后根据您的喜好修改它。你不需要完全理解它,但你需要一些东西开始。
我甚至会抽象出MT4和引号读取逻辑,只在CSV或TXT文件中有一些测试编号(假的或抽样的)。从一个可以识别该文件中A和B模式的工作示例开始。有了这个定义,您自己的算法是如何不同的,并尝试调整它。
当它开始工作时,最后一步是MT4集成。看起来DDE服务器只用于数据导出,而不是用于构建指示符。考虑一下这个替代框架:链接MT4到Python。你不仅可以用它建立一个图表上的指示器,而且还可以使用你的算法执行自动交易。
发布于 2016-12-04 17:04:24
问:如何把它组合在一起.?
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 4/5 MetaTrader终端中使用(阻塞)
2) DDE忘记使用集成,有些O/S根本不支持它
( pandas ) 3)忘记使用(即使是任何人工智能/ML模型原型)作为毫秒在ML处理过程中的重要作用,熊猫是一个很好的玩具,但对于现实世界对ML模型调整的交易需求来说,它并不是一个很好的玩具。
4)忘记使用开始-结束逻辑,AI/ML-引擎必须分开,以便有效地训练/验证/测试它们在巨大的HyperPARAM状态空间中的最佳泛化能力。
for m in models:可以在源代码中,但不存在于现实中.一个工具可能需要(而且确实需要)大约几十个[CPU-core*days]运行时才能在COTS硬件上进行参数优化,因此在这里用实际的数字来计算,以便正确地编制每个S+T周期的预算。
结语:
总之,一个聪明的计划,如果批准在财政上可行的话。可能和其他关于低延迟MT4-AI/ML集成的文章一样,用于算法交易。
https://stackoverflow.com/questions/31661722
复制相似问题