我已经从iqoption获得了OHLC值,并试图找到将其与MT5结合使用的方法。

这是我得到值的方式:

importtimefromiqoptionapi.stable_apiimportIQ_Option

I_want_money=IQ_Option("email","password")goal="EURUSD"print("get candles")print(I_want_money.get_candles(goal,60,111,time.time()))

该行:I_want_money.get_candles(goal,60,111,time.time())输出json为:命令的输出

现在,我想在输出中获取json,因此它的工作原理类似于API。

同时,我尝试在MT5中创建一个自定义符号iqoption。现在,我只想从API向其中添加OHLC的数据,以便它将继续从Iqoption提取数据并在图表窗口上显示自定义符号的图表iqoption。

但是我无法将其加载到自定义符号中。请帮帮我。

已编辑

这是来自iqoption的实时流数据的代码:

fromiqoptionapi.stable_apiimportIQ_Optionimportloggingimporttime

logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(message)s')I_want_money=IQ_Option("email","password")I_want_money.start_candles_stream("EURUSD")thread=I_want_money.collect_realtime_candles_thread_start("EURUSD",100)I_want_money.start_candles_stream("USDTRY")thread2=I_want_money.collect_realtime_candles_thread_start("USDTRY",100)time.sleep(3)#Do some thingans=I_want_money.thread_collect_realtime.items()fork,vinans:print(k,v)I_want_money.collect_realtime_candles_thread_stop(thread)I_want_money.stop_candles_stream("EURUSD")I_want_money.collect_realtime_candles_thread_stop(thread2)I_want_money.stop_candles_stream("USDTRY")

解决方案

好的,您需要

1.接收来自代理的提要(我希望您成功了)

2.将其写入文件

**(均为python)**

3.读取并解析它

4.将其添加到历史中心/ marketWatch

**(均为-mt5)**

因此,在I_want_money.get_candles(goal,60,111,time.time())此字符串可能是json或json-array之后,您将以字符串形式接收数据。

重要的问题当然是放置数据的路径。MQL45的专家只能访问两个文件夹(如果不应用dll):C:\ Users \ MY_NAME_IS_DANIEL_KNIAZ \ AppData \ Roaming \ MetaQuotes \ Terminal \ MY_TERMINAL_ID_IN_HEX_FORMAT \ MQL4 \ Files和C:\ Users \ MY_NAME_IS_DANIM_KANI Terminal \ Common \ Files,在后一种情况下,您需要使用const int handle = FileOpen(,| * | FILECOMMON);打开文件。

为了解析json,您可以使用jason.mqhhttps://www.mql5.com/en/code/13663库(其他库很少),但据我所知它有一个bug:它无法解析数组对象正确。为了克服这个问题,我建议将每个刻度线写在单独的行上。最后,您将在随机时间从python应用程序接收数据,并将其写入Common或direct文件夹。MT5机械手将读取并删除。为了避免混淆,最好保证文件具有唯一的名称。从日期时间开始随机(random.randint(1,1000))或毫秒都可以提供帮助。

到目前为止,您已经有了python代码:

receivedString=I_want_money.get_candles(goal,60,111,time.time())filePath='C:\Users\MY_NAME_IS_DANIEL_KNIAZ\AppData\Roaming\MetaQuotes\Terminal\MY_TERMINAL_ID_IN_HEX_FORMAT\MQL4\Files\iqoptionfeed'fileName=os.path.join(filePath,"_"+goal+"_"+str(datetime.now())+".txt")file=open(fileName,"w")forstring_inreceivedString:file.write(string_)file.close()

如果您创建了一个线程,则每次从该线程收到答案时,您都会编写这样的文件。

接下来,您需要MT5中的数据。最简单的方法是遍历现有文件,确保可以读取并读取(如果无法删除则放弃),读取后删除,然后继续处理接收到的数据。最简单快捷的方法当然是使用0MQ,但让我们在没有dll的情况下进行操作。为了读取文件,您需要设置一个计时器,使其尽可能快地工作,然后松开它。由于您不能让Windows应用程序休眠少于15.6毫秒,因此您的计时器应休眠此时间。

string path;intOnInit(){EventSetMillisecondTimer(16);path="iqoptionfeed\\*";}voidOnDeinit(const int reason){EventKillTimer();}string _fileName;long _search_handle;voidOnTimer(){_search_handle=FileFindFirst(path,_fileName);if(_search_handle!=INVALID_HANDLE){do{ResetLastError();FileIsExist(_fileName);if(GetLastError()!=ERR_FILE_IS_DIRECTORY)processFile(path+_fileName);}while(FileFindNext(_search_handle,_fileName));FileFindClose(_search_handle);}}

这段代码循环了文件夹并处理了它设法找到的每个文件。现在读取文件(两个函数)并处理其中的消息:

void processFile(const string fileName){string message;if(ReadFile(fileName,message))processMessage(message,fileName);}boolReadFile(const string fileName,string&result,const bool common=false){const int handle=FileOpen(fileName,common?(FILE_COMMON|FILE_READ):FILE_READ);if(handle==INVALID_HANDLE){printf("%i - failed to find file %s (probably doesnt exist!). error=%d",__LINE__,fileName,GetLastError());return(false);}Read(handle,result);FileClose(handle);if(!FileDelete(fileName,common?FILE_COMMON:0))printf("%i - failed to delete file %s/%d. error=%d",__LINE__,fileName,common,GetLastError());return(true);}voidRead(const int handle,string&message){string text="";while(!FileIsEnding(handle)&&!IsStopped()){text=StringConcatenate(text,FileReadString(handle),"\n");}//printf("%i %s - %s.",__LINE__,__FUNCTION__,text);message=text;}

最后但并非最不重要的一点:处理获取的文件。如上面的建议,它为每个新的滴答都有一个json格式的滴答,以\ r \ n分隔。

我们的目标是将其添加到符号中。为了解析json,jason.mqh是可用的解决方案,但是您当然可以手动对其进行解析。

void processMessage(const string message,const string fileName){string symbolName=getSymbolFromFileName(fileName);if(!SymbolSelect(symbolName,true)){if(!CustomSymbolCreate(symbolName))return;}string lines[];int size=StringSplit(message,(ushort)'\n',lines);for(int i=0;i

不要忘记添加调试信息,并且GetLastError()由于某些原因而请求错误。

可以在反向测试器中工作吗?当然不是。拳头,OnTimer() is not supported in MQL tester. Next, you need some history record in order to make it running. If you do not have any history - Nobody can help you unlees a broker can give it to you; the best idea could be to start collecting and storing it right now, and when the project is ready (maybe another couple months), you will have it ready and be able to test and optimize the strategy with the available dataset. You can apply the collected set into tester (MQL5 is really the next step in algo trading development compared to MQL4), either manually or with something like tickDataSuite and its Csv2Fxt.ex4 file that makes HST binary files that the tester can read and process; anyway that is another question and nobody can tell you if your broker stores their data somewhere to provide it to you.

python mql4_使用MQL5将OHLC值从Python API集成到MT5相关推荐

  1. python 修改json文件的value值,利用python修改json文件的val

    做工程时遇到需要监听json文件,根据json文件中的key-value值作出相应处理的情形.为此写了修改json文件的python脚本供工程后续调用. 代码如下:# coding=utf-8 //设 ...

  2. php检测txt中重复数据,Python实现检测文件的MD5值来查找重复文件案例

    平时学生交上机作业的时候经常有人相互复制,直接改文件名了事,为了能够简单的检测这种作弊行为,想到了检测文件的MD5值,虽然对于抄袭来说作用不大,但是聊胜于无,以后可以做一个复杂点的. # coding ...

  3. CrazyWing:Python自动化运维开发实战 八、Python数据类型之字符串

    导语: 字符串是Python中最常用的数据类型,它是编程语言中表示文本的数据类型. 使用引号('或")来创建字符串. 创建字符串 只要为变量分配一个值即可. 例如: var1 = 'Hell ...

  4. python时区转换_在python 不同时区之间的差值与转换方法

    之前有个程序,里面有个时间部分是按照国内时区,也就是东八区,来写的,程序中定义了北京时间2点到八点进行检查:后面程序在国外机器上,例如说韩国,欧美等,执行的时候发现会有时间上的问题,因为获取的是机器的 ...

  5. python参数传递方法_深入理解python中函数传递参数是值传递还是引用传递

    python 的 深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是&q ...

  6. python读取配置文件获取所有键值对_python笔记14-读取yaml配置文件(pyyaml)

    yaml简介 1.yaml [ˈjæməl]: Yet Another Markup Language :另一种标记语言.yaml 是专门用来写配置文件的语言,非常简洁和强大,之前用ini也能写配置文 ...

  7. python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce、map、filter)

    python函数+定义+调用+多返回值+匿名函数+lambda+高级函数(reduce.map.filter) Python 中函数的应用非常广泛,比如 input() .print().range( ...

  8. python英语字典程序修改_详解如何修改python中字典的键和值

    我们知道python中字典是无序的,它们都是通过hash去对应的.一般的如果我们需要修改字典的值,只需要直接覆盖即可,而修改字典的键,则需要使用字典自带的pop函数,示例如下: t = {} t['a ...

  9. linux中popen汉字乱码,Python中使用subprocess.Popen返回值乱码解决方案

    Python中使用subprocess.Popen返回值乱码解决方案 问题描述 在python 2.7中,使用subprocess.Popen()调用*nix命令,并通过管道,获取其输出,并将其返回值 ...

  10. python输入两个变量的值、输出大的_Python 变量和输入输出 关卡二

    练习题1 认识python 要求: 1.什么是python的交互模式,如何进入python交互模式1)在终端可以进入Python环境,或用Python3进入,通常用来做测试或调试 2)shift+鼠标 ...

最新文章

  1. python是如何实现进程池和线程池的_高并发:线程、线程锁与线程池(精华),手写代码实现线程池...
  2. 一次违反常规的Java大厂面试经历,内含福利
  3. UICountingLabel实现数字变化的动画效果-b
  4. Node.js 把图片流送到客户端
  5. easyUI tabs 显示与隐藏 tab 页
  6. o oia ospf 路由优先_CCNP理论之OSPF协议(二)
  7. 草稿 前端开发 代码的编写习惯 缩进的意义 HTML的格式
  8. 通用职责分配软件原则之3-低耦合原则
  9. 阿里云镜像下载ubuntu 1
  10. jq使用教程06_数据更新日志
  11. SQL Server数据库导入导出数据方式比较
  12. Remote Desktop Connection for mac 报错:证书或相关链无效
  13. 【语义分割专题】语义分割相关工作--SegNet
  14. sl4a库_SL4A客户端Python服务器(SL4A client Python server)
  15. php 表格内边距,CSS 内边距
  16. laravel查询指定的一列数据 pluck
  17. Disallow self-closing on HTML void elements
  18. Qt: 读取/写入文本文件内容
  19. 前后端开发的心得体会_从后端支撑岗位到前端渠道运营中心工作感想
  20. Excel排序,数据透视图,公式预测

热门文章

  1. php 关于模板的原理和解析,PHP-关于模板的原理和解析_PHP教程
  2. 数字视频广播字幕系统(第6.7章)
  3. 一体机怎么修复音频服务器,多媒体教学一体机没有声音是怎么办?
  4. 嵌入式linux操作framebuffer显示bmp图片
  5. html页面怎么放swf,如何在HTML页面中嵌入SWF文件?
  6. GhostScript 沙箱绕过(命令执行)漏洞(CVE-2018-19475)复现
  7. python爬取微博用户信息_Python爬取新浪微博用户信息及内容
  8. 颜晖c语言设计答案,c语言程序设计 (何钦铭 颜晖 著)课后习题答案
  9. 22021成都市高考成绩查询,四川大学本科教务系统登录
  10. 离散数学与组合数学汇总