系统交易

iCHO趋势CCIDualOnMA过滤器 - MetaTrader 5交易策略解析
MetaTrader5
iCHO趋势CCIDualOnMA过滤器 - MetaTrader 5交易策略解析

交易策略这款专家顾问(EA)结合了两个指标:iCHO(Chaikin振荡器)和自定义的CCIDualOnMA。iCHO主要用作趋势指标,并在其跨越零线时关闭仓位。而'CCIDualOnMA'指标则作为过滤器来添加仓位。这两个指标都是在指定的“工作时间框架”内创建的,同样的时间框架用于确定新K线的生成时机(如果适用于参数“在...寻找信号”和“跟踪在...”)。交易信号:当CHO指标跨越零线时关闭仓位:交叉情况仓位:反转交易模式从下往上交叉'false' -> 关闭所有卖出仓位('仅允许买入仓位' 或 '允许买入和卖出仓位') -> 开启买入仓位'true' -> 关闭所有买入仓位('仅允许卖出仓位' 或 '允许买入和卖出仓位') -> 开启卖出仓位自上而下交叉'false' -> 关闭所有买入仓位('仅允许卖出仓位' 或 '允许买入和卖出仓位') -> 开启卖出仓位'true' -> 关闭所有卖出仓位('仅允许买入仓位' 或 '允许买入和卖出仓位') -> 开启买入仓位正常信号(添加仓位)当CHO指标在零上方,快速CCI从下往上穿越慢速CCI,并且快速CCI在零下时 - 这时是开买入仓位的信号。当CHO指标在零下,快速CCI从上往下穿越慢速CCI,并且快速CCI在零上时 - 这时是开卖出仓位的信号。图1. iCHO趋势CCIDualOnMA过滤器特点:该专家顾问可以根据工作时间框架进行优化(“工作时间”框架)每根K线最多只能有一个“市场入场”交易(这是一个内部参数,不包括在输入参数内,与“仅一个仓位”参数无关)。在“内部K线”模式下(“在...”寻找信号参数设置为“bar#0(每个点)”),当前K线为K线#0;而在“仅在新K线生成时”模式下(“在...”寻找信号参数设置为“bar#1(在新K线生成时)”),当前K线为K线#1。参数“交易模式: ' - 限制交易方向。可以取值为'仅允许买入仓位'、'仅允许卖出仓位'和'允许买入和卖出仓位'。“使用时间控制”参数 - 搜索交易信号的时间区间,从“开始小时”::“开始分钟”到“结束小时”::“结束分钟”。时间范围可以设置在一天内,也可以跨天设置。现在让我们更详细地了解每组参数:交易设置:'工作时间框架' -工作时间框架。指标创建的时间框架以及寻找新K线的时间框架。止损、盈利和跟踪停损以点数设置。任一参数('止损'、'盈利'、'跟踪止损')可以禁用 - 只需将所选参数设置为 '0.0'。关于跟踪的工作原理,详细信息请参见TrailingStop代码中的图片。仓位管理(手数计算)手数可以是固定的('资金管理'设置为'固定手数'并在'资金管理的值'中设置手数)或动态的 - 根据每笔交易的风险百分比('资金管理'设置为'每笔交易的风险百分比'并在'资金管理的值'中设置风险百分比)。同样可以设置固定手数等于最小手数 - '资金管理'设置为'最小手数'。时间控制:该部分设置搜索交易信号的时间范围。通过'使用时间控制'启用时间范围,并设置从'开始小时'::'开始分钟'到'结束小时'::'结束分钟'的信号搜索时间区间。时间范围可以设置在一天内,也可以跨天设置。不影响跟踪。附加功能:将'仓位:仅一个'标志设置为'true',允许专家顾问在市场上只持有一个仓位。注意:'仓位:仅一个'设置为'true' 并不会取消'仓位:关闭相反'设置为'true'!换句话说:相反的仓位会首先被关闭。'仓位:反转'标志负责反转信号。一个有趣的标志是 '仓位: 关闭相反' - 当设置为'true'时,在开仓前确保移除相反的仓位。'打印日志输出所有操作的详细记录。'冻结和止损水平系数'参数设置当这些水平为零时的止损和冻结水平的系数,建议使用值 '3'。

2025.04.04
如何在MetaTrader 5中检测新K线的开始
MetaTrader5
如何在MetaTrader 5中检测新K线的开始

在使用专家顾问(EA)的过程中,当MetaTrader接收到新的报价(即“tick”)时,标准的OnTick()事件处理函数会被调用。但是,MetaTrader并没有标准的事件处理函数来检测新K线的开始。 要实现这一点,我们需要监控最近K线的开盘时间。当开盘时间发生变化时,这就意味着新K线的开始,我们可以对此做出反应并处理事件。以下是一个兼容MQL4和MQL5的方法示例,展示了如何实现这一功能: // 标准的tick事件处理函数    void OnTick()    {       // 检查是否有新K线(兼容MQL4和MQL5)。          static datetime dt当前K线   = WRONG_VALUE;                 datetime dt前一K线 = dt当前K线;                          dt当前K线   = iTime( _Symbol, _Period, 0 );                 bool     b新K线事件  = ( dt当前K线 != dt前一K线 );       // 对新K线事件做出反应。          if( b新K线事件 )          {             // 检测是否为首次接收的tick。                /* 例如,当图表首次应用时,K线正处于进展中,并不是真正的新K线开始。 */                if( dt前一K线 == WRONG_VALUE )                {                   // 对首次tick或K线中间状态进行处理 ...                }                else                {                   // 常规K线出现后的处理 ...                };             // 独立于前一条件的其他处理 ...          }          else          {             // 处理其他情况 ...          };       // 继续其他操作 ...    }; 在上面的代码中,static变量用于跟踪K线的开盘时间,即使在返回OnTick()函数后,它仍然能够保持数据。这是检测当前K线开盘时间变化的关键。 需要注意的是,当EA第一次应用到图表上时,前面的代码会将其反应为刚刚开盘的K线。这种情况需要特殊处理,以便能够正确应对。 另外,请注意,我在CodeBase上发布的所有源代码现在可以通过MetaEditor的“公共项目”中找到,项目名称为“FMIC”。

2025.04.03
基于蜡烛图分析的MT5交易系统 - 高效交易助手
MetaTrader5
基于蜡烛图分析的MT5交易系统 - 高效交易助手

这款MT5交易系统结合了多时间框架的蜡烛图模式分析和基本面事件过滤,旨在以严格的风险管理来执行交易。 核心策略 价格行为聚焦:完全依赖于蜡烛图模式(如针形蜡烛、吞没形态、锤子/射击之星)在三个时间框架(5分钟、1小时、4小时)中发出交易信号。 多时间框架共鸣:要求5分钟的触发信号与更高时间框架(1小时/4小时)的趋势结构一致。 风险管理 1.5:1风险回报比:系统会自动计算以1.5倍止损距离设置的止盈点。 保证金保护:限制保证金使用(默认少于30%),并自动调整持仓规模。 动态止损:根据ATR波动性缩放或固定点数距离来设置止损。 新闻过滤 事件前关闭:在高影响力新闻事件(如GDP、NFP、CPI)前2小时关闭所有持仓。 避免波动:在预定的高风险期间内不进行新交易。 操作设计 5分钟执行:在5分钟图表上触发交易,同时尊重1小时和4小时的市场背景。 交易时段限制:仅在流动性高峰时段(服务器时间8 AM–5 PM)内进行交易。 优势: 通过纯粹的价格行为分析消除了指标滞后。 通过固定的风险回报比和保证金上限实现严格的风险控制。 适应趋势市场和震荡市场。 适用对象: 适合:在活跃交易阶段的EURUSD及其他流动性较高的主要货币对。 希望在交易中系统执行并具备事件风险保护的交易者。 这款系统在技术模式识别与宏观经济意识之间取得了良好的平衡,优先考虑资金保护,同时目标是实现稳定的1.5:1回报场景。

2025.03.31
监控提款的EA代码 - 让MetaTrader 5更智能
MetaTrader5
监控提款的EA代码 - 让MetaTrader 5更智能

为MetaTrader 5添加提款监控功能 大家好,今天我们来聊聊如何让你的专家顾问(EA)更智能,特别是关于提款监控的功能。如果你在交易中使用EA,那么你一定希望能够实时了解账户的提款情况,这样才能更好地管理自己的资金。 为什么需要提款监控? 通常情况下,大多数EA都是在虚拟私人服务器(VPS)上运行的,这样可以避免在更改时间框架或图表模板时重置参数。可有时候,很多交易者在设置手数(lot size)时,往往会选择在亏损的情况下继续增加手数,希望能够在未来的某个时间点弥补亏损,而不考虑市场的实际情况。 如何处理提款与亏损的区别? 亏损:当出现亏损时,EA会继续使用最后已知的手数来试图恢复损失。 提款:如果账户发生提款,EA则需要根据新的余额来调整手数。 然而,许多EA并不能区分提款和亏损,这就导致了在提款后,手数并没有自动减少,反而可能会导致更大的风险。 代码优化建议 为了让你的EA能够更好地应对这种情况,我们可以对代码进行一些修改,不仅可以监控提款,还能够在发生提款时自动调整手数。这样一来,EA就能更灵活地适应账户余额的变化,帮助你更有效地管理风险。 希望这些建议能够帮助到你们,让大家在交易的道路上走得更稳健!

2025.03.31
监控提款的完美助手:为MetaTrader 4增添代码
MetaTrader4
监控提款的完美助手:为MetaTrader 4增添代码

引言 在交易的过程中,资金的管理至关重要。今天,我想和大家分享一段代码,旨在为您现有的交易专家顾问(EA)添加提款监控功能。这段代码可以帮助您更好地追踪账户中的提款情况,确保您时刻掌握财务动态。 为什么需要提款监控? 很多交易者会将EA托管在虚拟专用服务器(VPS)上,以避免在更改时间框架或图表模板时重置参数。这样做虽然方便,但在提款管理上却容易忽略一些细节。 常见问题 持续增加手数:有时,EA会设置手数不断增加,即使在亏损的情况下,仍希望通过增加手数来弥补损失。 无法区分提款与亏损:目前大多数EA在提款后不会自动减少手数,因为它们无法区分提款和亏损。 如何解决这个问题? 当发生亏损时,EA会继续使用最后已知的手数进行交易,但如果是提款,EA则需要根据新的余额减少手数。这是因为提款会影响账户的整体资金,合理调整手数是保持交易稳定的关键。 代码的灵活性 这段代码不仅能监控提款,还可以根据提款情况自动调整手数,以适应新的账户余额。通过这种方式,您可以更好地管理风险,提升交易的有效性。 结语 希望这段代码能为您的交易之路带来帮助。如果您有任何问题,欢迎在评论区讨论,让我们共同进步!

2025.03.31
RRS Tangled EA:MetaTrader 4的智能交易助手
MetaTrader4
RRS Tangled EA:MetaTrader 4的智能交易助手

大家好,今天给大家介绍一款非常有趣的交易助手——RRS Tangled EA。这款EA是对RRS Chaotic EA和RRS Randomness in Nature EA的升级版本。它的独特之处在于,完全不依赖技术指标或基本面分析,而是利用自然界的随机性来选择货币对、手数和订单类型进行交易。 只要设置好止盈、止损、跟踪止损和风险管理等参数,RRS Tangled EA就能帮助我们获取可观的利润。 多货币交易的优势 这款EA不仅支持单一货币对的交易,还是一款多货币或多资产的EA。即便它挂载在某个特定的货币对图表上,也能自动管理其他货币对的交易操作,非常灵活。 参数设置详解 变量 值 描述 minLot_Size 双精度值 设置最低手数,确保随机手数不会低于此值。 maxLot_Size 双精度值 设置最高手数,确保随机手数不会超过此值。 StopLoss 整数值 设置止损点数(点数为资产价格最小变动单位)。设置止损为0以禁用此功能。 TakeProfit 整数值 设置止盈点数。设置止盈为0以禁用此功能。 Trailing_Start 整数值(点数) 设置开始跟踪的点数距离开仓价格的距离。设置跟踪开始为0以禁用跟踪操作。 Trailing_Gap 整数值(点数) 设置当前市场价格与跟踪止损之间的点数间隔。设置跟踪间隔为0以禁用跟踪操作。 Risk_In_Money_Type FixedMoney, BalancePercentage FixedMoney:当浮动亏损达到您设定的金额时,关闭所有开仓。BalancePercentage:根据您的账户余额自动计算,并在达到该限制时关闭所有交易。 Money_In_Risk 整数值 如果Risk_In_Money_Type设置为FixedMoney,请填写您能够承受的损失金额。如果设置为BalancePercentage,EA会根据您的账户余额自动计算风险,并在达到该限制时关闭所有交易。 Max_Spread 整数值(点数) 设置可接受的最大点差。如果当前点差超过此值,EA将不进行交易,并等待点差回到规定范围内。 Slippage 整数值(点数) 设置订单执行的最大滑点。 MaxOpenTrade 整数值 允许的最大开仓数量 祝大家好运,交易愉快!

2025.03.23
RRS混沌交易EA - 为MetaTrader 4量身定制的交易助手
MetaTrader4
RRS混沌交易EA - 为MetaTrader 4量身定制的交易助手

大家好!今天我想给大家介绍一款非常特别的交易EA——RRS混沌交易EA。这款EA是基于随机性的交易策略,能够在不同的货币对上随意开仓,随意设置手数和订单类型,非常适合喜欢尝试新策略的交易者。 这款EA并不依赖于复杂的技术分析,比如指标、价格走势、新闻日历事件或者蜡烛图模式。它提供多种交易策略、风险管理计划以及其他可自定义的设置,灵活性非常高。 尽管这个EA是基于随机原则操作,但只要设置得当,它依然可以获得不错的收益。 变量 值 描述 minLot_Size 双精度值 确保随机手数不低于此值的最小手数。 maxLot_Size 双精度值 确保随机手数不超过此值的最大手数。 StopLoss 整数值 设置止损点数(资产的最小价格变动单位)。设置止损为0以禁用止损。 TakeProfit 整数值 设置止盈点数。设置止盈为0以禁用止盈。 Risk_In_Money_Type FixedMoney, BalancePercentage FixedMoney:当浮动亏损达到指定金额时,关闭所有打开的交易。BalancePercentage:自动根据账户余额计算,并在达到该限制时关闭所有交易。 Money_In_Risk 整数值 如果设置为FixedMoney,请输入您可以承受的损失金额。如果设置为BalancePercentage,EA将根据您的账户余额自动计算风险,并在达到该限制时关闭所有交易。 Max_Spread 整数值(点数/点差) 设置可接受的最大点差。如果当前点差超过此值,EA将不会开仓,并会等待点差恢复到指定范围内。 Slippage 整数值(点数/点差) 设置订单执行的最大滑点。  MaxOpenTrade  整数值 允许的最大打开交易数 注意:如果您在EA操作中遇到故障或错误,请从EA代码的第8行删除#property strict。 祝大家好运,交易愉快!

2025.03.19
RRS随机性交易助手:MetaTrader 4的随机交易策略
MetaTrader4
RRS随机性交易助手:MetaTrader 4的随机交易策略

大家好,今天我们来聊聊一款非常特别的交易助手——RRS随机性交易助手。这款EA在本质上是完全随机的,它会随机选择货币对、手数和订单类型。与其他依赖技术分析的工具不同,这款EA完全不依赖指标、价格走势、新闻日历事件或蜡烛图模式。 虽然它的交易策略基于随机性,但依然可以实现不错的盈利。 变量 值 说明 交易策略 单边、双边 单边: EA会进行一次交易,买入或卖出。双边: EA会同时进行一次买入和一次卖出交易。 最小手数 双精度值 设置随机手数的最小值,确保不低于该值。 最大手数 双精度值 设置随机手数的最大值,确保不超过该值。 止损 整数值 设置止损点数(资产价格的最小波动单位)。 设置止损为0以禁用此功能。 止盈 整数值 设置止盈点数。 设置止盈为0以禁用此功能。 跟踪止损起始点 整数值(点数/点差) 指定从开盘价开始跟踪的点数。 设置跟踪起始点为0以禁用此功能。 跟踪止损间隔 整数值(点数/点差) 设置当前市场价格与跟踪止损之间的间隔点数。 设置跟踪间隔为0以禁用此功能。 风险类型 固定金额、余额百分比 固定金额: 当浮动亏损达到您设定的金额时,关闭所有持仓。余额百分比: 根据您的账户余额自动计算,并在达到此限度时关闭所有交易。 风险金额 整数值 如果选择固定金额,请输入您能承受的损失金额。 如果选择余额百分比,EA将自动根据您的账户余额计算风险,并在达到该限度时关闭所有交易。 最大点差 整数值(点数/点差) 设置可以接受的最大点差。如果当前点差超过此值,EA将不会进行交易,而是等待点差回落到指定范围内。 滑点 整数值(点数/点差) 设置订单执行过程中允许的最大滑点。 注意:如果您在使用EA时遇到故障或错误,请在EA代码第8行移除#property strict。 祝您好运,交易愉快!

2025.03.19
掌握RRS非方向性EA:MetaTrader 4的交易利器
MetaTrader4
掌握RRS非方向性EA:MetaTrader 4的交易利器

大家好!今天要跟大家聊聊一款非常有趣的交易工具——RRS非方向性EA。这款EA不依赖于任何技术分析技巧,比如指标、价格行为、新闻日历事件或蜡烛图模式。它提供了多种交易策略、风险管理方案以及其他可定制的设置,让你在交易中游刃有余。 尽管这款EA采用随机交易的方式,但只要合理设置风险管理,依然能够带来可观的利润。 主要功能介绍 变量 值 描述 交易策略 对冲风格、随机买卖、买入卖出、自动换仓、买单、卖单 对冲风格:同时开启买入和卖出交易。随机买卖:随机选择买入或卖出。买入卖出:根据上一个已平仓的订单类型决定新订单。如果最后一个平仓订单是买入,则开启卖出交易。自动换仓:仅根据正的掉期方向开启买入或卖出,忽略负掉期的交易。买单:仅开启买入交易。卖单:仅开启卖出交易。 新交易 真/假 真:EA可以执行交易。假:EA不会执行任何交易。 手数 双精度值 选择EA每次交易的手数。 止损类型 虚拟止损、经典止损 虚拟止损:当达到指定止损时,EA将平掉交易,但止损水平不会在经纪商服务器上显示(保留在本地PC上)。经典止损:EA在经纪商服务器上设置可见的止损。此功能在经纪商不支持高频EA、每日修改次数有限制,或你怀疑经纪商在狙击你的止损时特别有用。 止损 整数值 设置止损值(以点/点差为单位)。将止损设置为0以禁用。 止盈类型 虚拟止盈、经典止盈 虚拟止盈:止盈水平在经纪商服务器上不可见。经典止盈:止盈水平在经纪商服务器上可见。 止盈 整数值 设置止盈值(以点/点差为单位)。将止盈设置为0以禁用。 跟踪止损类型 虚拟跟踪、经典跟踪 虚拟跟踪:止损修改保留在本地PC上,不反映在经纪商服务器上。经典跟踪:止损修改直接更新在经纪商服务器上。此功能在经纪商不支持高频EA、每日修改次数有限制,或你怀疑经纪商在狙击你的止损时特别有用。 跟踪起始点 整数值(点/点差) 指定从开盘交易价格起,跟踪止损开始的点数。 跟踪间隔 整数值(点/点差) 设置市场价格与跟踪止损之间的点差。将跟踪间隔设置为0以禁用跟踪操作。 风险金额类型 固定金额、余额百分比 固定金额:当负浮动达到你指定的金额时,平掉所有未平仓交易。余额百分比:根据账户余额自动计算,并在达到限制时平掉所有交易。 风险金额 整数值 如果风险金额类型设置为固定金额,请输入可以承受的损失金额。如果设置为余额百分比,EA将根据账户余额自动计算风险,并在达到限制时平掉所有交易。 最大点差 整数值(点/点差) 设置可接受的最大点差。如果当前点差超过此值,EA将不会执行交易,并等待点差回到指定的范围内。 滑点 整数值(点/点差) 设置订单执行的最大滑点。 注意:如果你在EA操作中遇到故障或错误,请在第6行代码中移除#property strict。 祝你好运,快乐交易!

2025.03.17
均值回归趋势交易系统 - MetaTrader 5 的完美助手
MetaTrader5
均值回归趋势交易系统 - MetaTrader 5 的完美助手

1. 概述 均值回归趋势交易系统(MeanReversionTrendEA)将趋势跟随与均值回归策略结合起来,利用移动平均线和基于ATR的波动率测量,内置的交易验证功能确保在各种市场条件下可靠执行。 2. 主要特点 双重策略:结合了趋势跟随(移动平均交叉)与均值回归(价格与移动平均的偏差)。 自适应信号:使用快速和慢速移动平均线来识别趋势。 波动率整合:通过ATR测量市场波动,为均值回归提供入场信号。 内置验证器:全面的交易验证系统,检查交易量、保证金和止损水平。 安全机制:包含安全交易功能,用于回测验证。 防守性头寸管理:固定或比例的止损/止盈,确保有效验证。 多资产兼容:适用于外汇、商品、指数和股票,并有适当的手数大小。 3. 工作原理 监测移动平均线交叉,以确定趋势方向变化。 使用ATR波动带测量价格偏离慢速移动平均线的程度。 当快速移动平均线突破慢速移动平均线时生成买入信号,或当价格跌破波动带时。 当快速移动平均线跌破慢速移动平均线时生成卖出信号,或当价格突破波动带时。 在适当的风险管理参数下验证并执行交易。 4. 输入参数 快速移动平均期(Fast_MA_Period,20)、慢速移动平均期(Slow_MA_Period,50)、ATR周期(ATR_Period,14) ATR乘数(ATR_Multiplier,2.0),用于均值回归带的计算 手数大小(LotSize,0.1) 止损点数(SL_Points,500)和止盈点数(TP_Points,1000)用于风险管理 魔术数字(Magic_Number,123456),用于订单识别 5. 使用注意事项 适合所有主要货币对和流动性良好的金融工具。 适用于所有时间框架,推荐H1-H4以获得更好的信号质量。 需要足够的历史数据以进行正确的指标计算。 最适合趋势市场中偶尔的回归机会。 强大的验证系统确保在各个券商之间的有效执行。 6. 代码结构 CTradeValidator:全面的交易验证类。 指标初始化和数据处理函数。 结合趋势和回归逻辑的信号生成。 在适当的验证和风险管理下执行交易。 确保回测完整性的安全机制。 7. 免责声明 本内容仅供教育用途,按原样提供。过往表现并不代表未来结果。在真实交易之前请务必在模拟账户上进行充分测试。

2025.03.14
如何使用魔法数字追踪多个EA的实时盈亏面板
MetaTrader5
如何使用魔法数字追踪多个EA的实时盈亏面板

个别策略洞察 当一个账户同时运行多个策略时,最大的挑战就是如何分清每个策略的表现。如果没有魔法数字,你可能只能依靠模糊的交易注释或票据范围来判断。而魔法数字则提供了一种系统化的、自动应用的数字标签,让EA能够轻松识别。 精准的绩效追踪 这样,你就能迅速找出哪个系统出现了回撤,或者哪个表现出色。这种信息能够帮助你更快做出决策,比如决定暂停表现不佳的机器人,或是向表现优异的策略投入更多资本。 简化分析与记录 与其一遍遍翻阅日志或历史标签,不如通过一个简洁的“面板”来集中显示每个EA的总闭合利润、交易数量和相关注释。这不仅有助于记录,还能优化策略,甚至在你为他人管理账户时进行客户报告。完整代码附在文末。 使用小贴士 将脚本/EA附加 到MT5的任意图表上。编译后,它会立即显示一个包含每个魔法数字的表格。 检查图表大小: 如果你的图表窗口非常狭窄,部分文本可能会超出屏幕右边缘。可以适当扩大图表或降低字体大小以提高可读性。 匹配字体: 建议使用Courier New以便于列对齐,但如果你喜欢其他风格,可以在代码中更改。 调整更新时间: 默认情况下,脚本每5秒更新一次。如果你希望更新频率更高或更低,可以修改EventSetTimer(5)。

2025.02.25
下载MetaTrader 5中的所有符号历史数据
MetaTrader5
下载MetaTrader 5中的所有符号历史数据

今天我们来聊聊如何使用专家顾问(EA)来下载MetaTrader 5中某个符号的所有历史数据。这段代码会扫描您经纪商的市场观察列表,并提取出可以下载所有可用ticks的符号。 这个工具可以帮助您下载所有符号的历史数据,以便进行回测,或者从这些ticks创建自定义图表。 请注意,终端会将ticks缓存到数据文件夹中,所以确保您的硬盘空间足够。 为了方便下载,我们首先需要一个下载管理器。 以下是 CDownloadManager 结构,它包含我们需要保留的所有信息: struct CDownloadManager {&nbsp;&nbsp; bool m_started, m_finished;&nbsp;&nbsp; string m_symbols[], m_current;&nbsp;&nbsp; int m_index;} 它包含了以下信息: 下载状态(已开始/已完成) 待扫描的符号列表 当前符号 正在扫描的符号索引 我们还需要读写硬盘,因为我们在处理符号时,需要创建两个快速的函数来从二进制文件中读写字符串。 保存字符串到文件的函数: void writeStringToFile(int f, string thestring) {&nbsp;&nbsp; // 保存符号字符串&nbsp;&nbsp; char sysave[];&nbsp;&nbsp; int charstotal = StringToCharArray(thestring, sysave, 0, StringLen(thestring), CP_ACP);&nbsp;&nbsp; FileWriteInteger(f, charstotal, INT_VALUE);&nbsp;&nbsp; for (int i = 0; i < charstotal; i++) {&nbsp;&nbsp;&nbsp;&nbsp; FileWriteInteger(f, sysave[i], CHAR_VALUE);&nbsp;&nbsp;&nbsp;&nbsp;}} 这个函数接收: 文件句柄 f,一个以写入和二进制标志打开的文件 要写入文件的字符串 它会写入字符串的字符长度,并将每个字符存储到文件中。 从文件读取字符串的函数: string readStringFromFile(int f) {&nbsp;&nbsp; string result = "";&nbsp;&nbsp; // 加载符号字符串&nbsp;&nbsp; char syload[];&nbsp;&nbsp; int charstotal = (int)FileReadInteger(f, INT_VALUE);&nbsp;&nbsp; if (charstotal > 0) {&nbsp;&nbsp;&nbsp;&nbsp; ArrayResize(syload, charstotal, 0);&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i < charstotal; i++) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; syload[i] = (char)FileReadInteger(f, CHAR_VALUE);&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; result = CharArrayToString(syload, 0, charstotal, CP_ACP);&nbsp;&nbsp;}&nbsp;&nbsp; return result;} 这个函数接收: 文件句柄 f,一个以二进制方式打开的文件 它会读取预期字符的长度,然后逐个读取字符到字符数组中,最后将字符数组转换为字符串返回。 接下来,我们需要一种方法来初始化下载管理器,并从市场观察中填充它: void grab_symbols() {&nbsp;&nbsp; // 仅从市场观察中获取符号&nbsp;&nbsp; int s = SymbolsTotal(true);&nbsp;&nbsp; ArrayResize(m_symbols, s, 0);&nbsp;&nbsp; for (int i = 0; i < ArraySize(m_symbols); i++) {&nbsp;&nbsp;&nbsp;&nbsp; m_symbols[i] = SymbolName(i, true);&nbsp;&nbsp;}} 这个过程非常简单: 询问市场观察中有多少个符号(活动的) 调整 m_symbols 数组来接收这些符号 循环获取所有符号的名称 我们还需要一个管理下载符号数据的函数: void manage(string folder, string filename) {&nbsp;&nbsp; // 启动或导航到下一个符号&nbsp;&nbsp; if (ArraySize(m_symbols) > 0) {&nbsp;&nbsp;&nbsp;&nbsp; // 如果没有开始&nbsp;&nbsp;&nbsp;&nbsp; if (!m_started) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_started = true;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_current = m_symbols[0];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_index = 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; save(folder, filename);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (_Symbol != m_current) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ChartSetSymbolPeriod(ChartID(), m_current, _Period);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_index++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_index

2025.02.22
首页 上一页 1 2 3 4 5 6 7 8 9 下一页 末页