开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 580|回复: 14
收起左侧

[完成] 请问有搞外汇的么?易语言怎么调用mt4有一起的朋友吗?

 关闭 [复制链接]
结帖率:69% (9/13)
发表于 2026-1-27 15:30:56 | 显示全部楼层 |阅读模式   山西省忻州市
5精币
请问有搞外汇的么?易语言怎么调用mt4有一起的朋友吗?

最佳答案

查看完整内容

我的qq,709117482,是要搞对冲?
结帖率:33% (2/6)
发表于 2026-1-27 15:30:57 | 显示全部楼层   山东省滨州市
我的qq,709117482,是要搞对冲?
回复

使用道具 举报

结帖率:86% (19/22)

签到天数: 7 天

发表于 2026-1-27 16:06:02 | 显示全部楼层   广东省东莞市
用py写MQL脚本,易语言调用
回复

使用道具 举报

结帖率:69% (9/13)
 楼主| 发表于 2026-1-27 16:16:00 | 显示全部楼层   山西省忻州市
xianggu 发表于 2026-1-27 16:06
用py写MQL脚本,易语言调用

易语言不能单独调用吗?都写py还用什么易语言呀
回复

使用道具 举报

结帖率:86% (19/22)

签到天数: 7 天

发表于 2026-1-27 16:26:46 | 显示全部楼层   广东省东莞市
385110487 发表于 2026-1-27 16:16
易语言不能单独调用吗?都写py还用什么易语言呀

MT5 MT4  只支持MQL语言
回复

使用道具 举报

结帖率:69% (9/13)
 楼主| 发表于 2026-1-27 16:34:48 | 显示全部楼层   山西省忻州市
xianggu 发表于 2026-1-27 16:26
MT5 MT4  只支持MQL语言

方便加你Q吗
回复

使用道具 举报

结帖率:97% (29/30)

签到天数: 8 天

发表于 2026-1-27 16:37:09 | 显示全部楼层   广东省广州市
我也在找呢
回复

使用道具 举报

结帖率:69% (9/13)
 楼主| 发表于 2026-1-27 16:38:16 | 显示全部楼层   山西省忻州市
听说是编写dll调用
回复

使用道具 举报

结帖率:86% (19/22)

签到天数: 7 天

发表于 2026-1-27 16:54:43 | 显示全部楼层   广东省东莞市

用PY写TCP客户Duan,加载到MT4里面,易语言写TCP服务端 连接 就能调用了
回复

使用道具 举报

结帖率:100% (1/1)
发表于 2026-1-27 17:08:47 | 显示全部楼层   广东省广州市
易语言(上层控制端)→ 通信桥接(DLL/文本文件/注册表)→ MT4终端(MQ4脚本/EA,底层执行端)→ 外汇市场(行情/交易)

//+------------------------------------------------------------------+//|                                                  MT4ForE.lang |//|                        Copyright 2026, MetaQuotes Software Corp. |//|                                             https://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2026, MetaQuotes Software Corp."#property link      "https://www.mql5.com"#property version   "1.00"#property strict// 导出DLL函数:供易语言调用(必须用extern "C",避免函数名混淆)extern "C" {    // 功能1:获取外汇货币对最新报价    // 参数:symbol=货币对(如"EURUSD"),bid=买价(输出),ask=卖价(输出)    __declspec(dllexport) bool GetSymbolPrice(const char* symbol, double* bid, double* ask);        // 功能2:下外汇市价多单(买涨)    // 参数:symbol=货币对,lots=手数(0.01-10,外汇最小手数),stoploss=止损点,takeprofit=止盈点    __declspec(dllexport) ulong OpenBuyOrder(const char* symbol, double lots, double stoploss, double takeprofit);        // 功能3:下外汇市价空单(买跌)    // 参数:同多单    __declspec(dllexport) ulong OpenSellOrder(const char* symbol, double lots, double stoploss, double takeprofit);}// 实现:获取最新报价bool GetSymbolPrice(const char* symbol, double* bid, double* ask){   if(!bid || !ask) return false;   *bid = SymbolInfoDouble(symbol, SYMBOL_BID);  // 获取买价(用户卖出价)   *ask = SymbolInfoDouble(symbol, SYMBOL_ASK);  // 获取卖价(用户买入价)   return true;}// 实现:下市价多单ulong OpenBuyOrder(const char* symbol, double lots, double stoploss, double takeprofit){   // 订单请求结构(MT4官方标准)   MqlTradeRequest request={0};   MqlTradeResult  result={0};      request.action = TRADE_ACTION_DEAL;          // 执行交易:市价单   request.symbol = symbol;                     // 外汇货币对   request.volume = lots;                       // 手数   request.type = ORDER_TYPE_BUY;               // 多单(买涨)   request.price = Ask;                         // 市价单价格=卖价   request.sl = stoploss;                       // 止损(0=无止损)   request.tp = takeprofit;                     // 止盈(0=无止盈)   request.deviation = 3;                       // 滑点容忍:3个点(外汇通用)   request.type_filling = ORDER_FILLING_FOK;    // 成交方式:立即成交(外汇适配)      // 发送订单请求到MT4   if(!OrderSend(request, result))   {      Print("多单下单失败:", GetLastError());  // MT4终端日志打印错误      return 0;   }   return result.order;  // 返回订单号(易语言接收,用于后续平仓/cha询)}// 实现:下市价空单ulong OpenSellOrder(const char* symbol, double lots, double stoploss, double takeprofit){   MqlTradeRequest request={0};   MqlTradeResult  result={0};      request.action = TRADE_ACTION_DEAL;   request.symbol = symbol;   request.volume = lots;   request.type = ORDER_TYPE_SELL;              // 空单(买跌)   request.price = Bid;                         // 市价单价格=买价   request.sl = stoploss;   request.tp = takeprofit;   request.deviation = 3;   request.type_filling = ORDER_FILLING_FOK;      if(!OrderSend(request, result))   {      Print("空单下单失败:", GetLastError());      return 0;   }   return result.order;}//+------------------------------------------------------------------+


.版本 2.支持库 spec' ===================== 核心:声明MT4的DLL命令(严格对应MQ4函数,参数类型必须一致)=====================' 注意:DLL路径填写你的MT4实际路径,如:"D:\IC Markets MT4\MQL4\Libraries\MT4ForE.dll".DLL命令 GetSymbolPrice, 逻辑型, "MT4ForE.dll", "GetSymbolPrice", 公开, 获取外汇货币对最新报价.参数 symbol, 文本型,  , 外汇货币对,如"EURUSD"、"GBPUSD".参数 bid, 双精度小数型, 传址, 买价(输出,用户卖出价).参数 ask, 双精度小数型, 传址, 卖价(输出,用户买入价).DLL命令 OpenBuyOrder, 整数型, "MT4ForE.dll", "OpenBuyOrder", 公开, 下外汇市价多单(买涨),返回订单号(0=失败).参数 symbol, 文本型,  , 货币对.参数 lots, 双精度小数型,  , 手数(外汇最小0.01).参数 stoploss, 双精度小数型,  , 止损点(0=无止损).参数 takeprofit, 双精度小数型,  , 止盈点(0=无止盈).DLL命令 OpenSellOrder, 整数型, "MT4ForE.dll", "OpenSellOrder", 公开, 下外汇市价空单(买跌),返回订单号(0=失败).参数 symbol, 文本型,  , 货币对.参数 lots, 双精度小数型,  , 手数.参数 stoploss, 双精度小数型,  , 止损点.参数 takeprofit, 双精度小数型,  , 止盈点' ===================== 按钮1:获取外汇最新报价(示例:EURUSD)=====================.子程序 _按钮1_被单击, , , 获取报价.局部变量 货币对, 文本型.局部变量 买价, 双精度小数型.局部变量 卖价, 双精度小数型.局部变量 是否成功, 逻辑型货币对 = “EURUSD”  ' 可改为编辑框输入,如:编辑框1.内容是否成功 = GetSymbolPrice (货币对, 买价, 卖价).如果 (是否成功)    调试输出 (“获取报价成功:”, 货币对, “ 买价:”, 买价, “ 卖价:”, 卖价)    标签1.标题 = 货币对 + “ 买价:” + 到文本 (买价) + “ 卖价:” + 到文本 (卖价).否则    信息框 (“获取报价失败!请检查MT4是否开启DLL权限/货币对是否正确”, 0, ).如果结束' ===================== 按钮2:下EURUSD市价多单(买涨,示例:0.01手,无止损止盈)=====================.子程序 _按钮2_被单击, , , 下多单.局部变量 货币对, 文本型.局部变量 手数, 双精度小数型.局部变量 止损, 双精度小数型.局部变量 止盈, 双精度小数型.局部变量 订单号, 整数型货币对 = “EURUSD”手数 = 0.01  ' 外汇最小手数,可改为编辑框输入止损 = 0  ' 0=无止损,如需止损填写具体价格(如EURUSD买价1.08000,止损1.07800)止盈 = 0  ' 0=无止盈,如需止盈填写具体价格(如1.08500)订单号 = OpenBuyOrder (货币对, 手数, 止损, 止盈).如果 (订单号 > 0)    信息框 (“多单下单成功!订单号:” + 到文本 (订单号), 0, )    调试输出 (“多单订单号:”, 订单号).否则    信息框 (“多单下单失败!请检查MT4账号/资金/网络”, 0, ).如果结束' ===================== 按钮3:下EURUSD市价空单(买跌,示例:0.01手,无止损止盈)=====================.子程序 _按钮3_被单击, , , 下空单.局部变量 货币对, 文本型.局部变量 手数, 双精度小数型.局部变量 止损, 双精度小数型.局部变量 止盈, 双精度小数型.局部变量 订单号, 整数型货币对 = “EURUSD”手数 = 0.01止损 = 0止盈 = 0订单号 = OpenSellOrder (货币对, 手数, 止损, 止盈).如果 (订单号 > 0)    信息框 (“空单下单成功!订单号:” + 到文本 (订单号), 0, )    调试输出 (“空单订单号:”, 订单号).否则    信息框 (“空单下单失败!请检查MT4账号/资金/网络”, 0, ).如果结束
确保MT4 终端已登录(模拟 / 实盘账号均可,建议先模拟测试)
易语言中,将 DLL 命令的「库文件名」改为MT4ForE.dll 的实际绝对路径避免找不到 DLL
在 MQ4 的 DLL/EA 中添加平仓函数,易语言传递「订单号」或「货币对 + 方向」实现平仓:
// MQ4平仓函数(导出为DLL,易语言调用)extern "C" {    __declspec(dllexport) bool CloseOrder(ulong orderId);  // 根据订单号平仓}bool CloseOrder(ulong orderId){   MqlTradeRequest request={0};   MqlTradeResult  result={0};   OrderSelect(orderId, SELECT_BY_ORDER, MODE_TRADES);   request.action = TRADE_ACTION_DEAL;   request.order = orderId;   request.type = (OrderType()==ORDER_TYPE_BUY) ? ORDER_TYPE_SELL : ORDER_TYPE_BUY;   request.price = (OrderType()==ORDER_TYPE_BUY) ? Bid : Ask;   request.volume = OrderVolume();   request.deviation = 3;   request.type_filling = ORDER_FILLING_FOK;   if(!OrderSend(request, result)) {Print("平仓失败:", GetLastError()); return false;}   return true;}
止损止盈修改
实现动态修改订单的止损止盈点,适配外汇行情的实时变化。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表