JBrainTrend1Stop_Alert - MetaTrader 5脚本


JBrainTrend1Stop趋势指示器具有警报、电子邮件和推送通知功能。
为了实现警报、电子邮件消息和推送通知,对指标代码进行了以下更改:
输入 单位条数=1;//信号的柱数 输入 布尔值声音开启=真的;//启用警报 输入 单位警报数量=2;//警报数量 输入 布尔值电子邮件开启=错误的;//启用邮寄信号 输入 布尔值按下=错误的;//启用向移动设备发送信号
</li>
<li>在指标代码末尾添加了三个新函数:BuySignal()、SellSignal() 和 GetStringTimeframe()<div class="code"><span class="comment">//+------------------------------------------------------------------+</span><br />
<span class="comment">//|购买信号功能 |</span><br />
<span class="comment">//+------------------------------------------------------------------+</span><br />
<span class="keyword">空白</span>买入信号(<span class="keyword">细绳</span>信号先生姓名, <span class="comment">// 电子邮件和推送消息的指标名称文本</span><br /> <span class="keyword">双倍的</span>购买箭头(&B)[], <span class="comment">// 带有上升趋势信号的指标缓冲区</span><br /> <span class="keyword">双倍的</span>销售箭头(&S)[], <span class="comment">// 带有下降趋势信号的指标缓冲区</span><br /> <span class="keyword">常量</span> <span class="keyword">整数</span>费率_总计, <span class="comment">// 当前柱数</span><br /> <span class="keyword">常量</span> <span class="keyword">整数</span>前_计算,<span class="comment">// 前一个价格变动的柱数</span><br /> <span class="keyword">常量</span> <span class="keyword">双倍的</span>&<span class="predefines">关闭</span>[], <span class="comment">// 收盘价</span><br /> <span class="keyword">常量</span> <span class="keyword">整数</span>&传播[]) <span class="comment">// 传播</span><br /> {<br />
<span class="comment">//---</span><br /> <span class="keyword">静止的</span> <span class="keyword">单位</span>计数器=<span class="number">0</span>;<br /> <span class="keyword">如果</span>(Rates_total!=Prev_calculated) 计数器=<span class="number">0</span>;<br />
<br /> <span class="keyword">布尔值</span>买入信号=<span class="macro">错误的</span>;<br /> <span class="keyword">布尔值</span>系列测试=<span class="functions">数组获取系列</span>(购买箭头);<br /> <span class="keyword">整数</span>索引,索引1;<br /> <span class="keyword">如果</span>(系列测试)<br /> {<br /> 索引=<span class="keyword">整数</span>(条数);<br /> 索引1=索引+<span class="number">1</span>;<br /> }<br /> <span class="keyword">别的</span><br /> {<br /> 索引=Rates_total-<span class="keyword">整数</span>(条数)-<span class="number">1</span>;<br /> 索引1=索引-<span class="number">1</span>;<br /> }<br /> <span class="keyword">如果</span>(SellArrow[index1] && SellArrow[index1]!=<span class="macro">空_VALUE</span>&& BuyArrow[索引] && BuyArrow[索引]!=<span class="macro">空_VALUE</span>) 购买信号=<span class="macro">真的</span>;<br /> <span class="keyword">如果</span>(BuySignal && 计数器<=NumberofAlerts)<br /> {<br /> 计数器++;<br /> <span class="predefines">Mql日期时间</span>TM;<br /> <span class="functions">构建时间</span>(<span class="functions">时间当前</span>(),tm);<br /> <span class="keyword">细绳</span>文字=<span class="functions">字符串时间</span>(<span class="functions">时间当前</span>(),<span class="macro">TIME_DATE</span>)+<span class="string">” “</span>+<span class="keyword">细绳</span>(tm.小时)+<span class="string">“:”</span>+<span class="keyword">细绳</span>(tm.分钟);<br /> 系列测试=<span class="functions">数组获取系列</span>(<span class="predefines">关闭</span>);<br /> <span class="keyword">如果</span>(系列测试)索引=<span class="keyword">整数</span>(条数);<br /> <span class="keyword">别的</span>索引=Rates_total-<span class="keyword">整数</span>(条数)-<span class="number">1</span>;<br /> <span class="keyword">双倍的</span> <span class="predefines">问</span>=<span class="predefines">关闭</span>[指数];<br /> <span class="keyword">双倍的</span> <span class="predefines">出价</span>=<span class="predefines">关闭</span>[指数];<br /> 系列测试=<span class="functions">数组获取系列</span>(传播);<br /> <span class="keyword">如果</span>(系列测试)索引=<span class="keyword">整数</span>(条数);<br /> <span class="keyword">别的</span>索引=Rates_total-<span class="keyword">整数</span>(条数)-<span class="number">1</span>;<br /> <span class="predefines">出价</span>+=<span class="predefines">_观点</span>*传播[索引];<br /> <span class="keyword">细绳</span>问=<span class="functions">双精度转字符串</span>(<span class="predefines">问</span>,<span class="predefines">_数字</span>);<br /> <span class="keyword">细绳</span>出价=<span class="functions">双精度转字符串</span>(<span class="predefines">出价</span>,<span class="predefines">_数字</span>);<br /> <span class="keyword">细绳</span>sPeriod=GetStringTimeframe(<span class="functions">图表周期</span>());<br /> <span class="keyword">如果</span>(声音打开)<span class="functions">警报</span>(<span class="string">"买入信号 \n 询问="</span>,<span class="predefines">问</span>,<span class="string">“\n 出价=”</span>,<span class="predefines">出价</span>,<span class="string">“\n 当前时间=”</span>,文本,<span class="string">“\n 符号=”</span>,<span class="functions">象征</span>(),<span class="string">“句号=”</span>,s 期间);<br /> <span class="keyword">如果</span>(电子邮件)<span class="functions">发送邮件</span>(信号先生姓名+<span class="string">“:买入信号提醒”</span>,<span class="string">“在询问处买入信号=”</span>+问+<span class="string">“,出价=”</span>+出价+<span class="string">“,日期=”</span>+文字+<span class="string">“符号=”</span>+<span class="functions">象征</span>()+<span class="string">“句号=”</span>+s句点);<br /> <span class="keyword">如果</span>(推开)<span class="functions">发送通知</span>(信号先生姓名+<span class="string">": 在 Ask=" 处买入信号</span>+问+<span class="string">“,出价=”</span>+出价+<span class="string">“,日期=”</span>+文字+<span class="string">“符号=”</span>+<span class="functions">象征</span>()+<span class="string">“句号=”</span>+s句点);<br /> }<br />
<br />
<span class="comment">//---</span><br /> }<br />
<span class="comment">//+------------------------------------------------------------------+</span><br />
<span class="comment">//|卖出信号函数 |</span><br />
<span class="comment">//+------------------------------------------------------------------+</span><br />
<span class="keyword">空白</span>卖出信号(<span class="keyword">细绳</span>信号先生姓名, <span class="comment">// 电子邮件和推送消息的指标名称文本</span><br /> <span class="keyword">双倍的</span>销售箭头(&S)[], <span class="comment">// 带有下降趋势信号的指标缓冲区</span><br /> <span class="keyword">双倍的</span>购买箭头(&B)[], <span class="comment">// 带有上升趋势信号的指标缓冲区</span><br /> <span class="keyword">常量</span> <span class="keyword">整数</span>费率_总计, <span class="comment">// 当前柱数</span><br /> <span class="keyword">常量</span> <span class="keyword">整数</span>前_计算,<span class="comment">// 前一个价格变动的柱数</span><br /> <span class="keyword">常量</span> <span class="keyword">双倍的</span>&<span class="predefines">关闭</span>[], <span class="comment">// 收盘价</span><br /> <span class="keyword">常量</span> <span class="keyword">整数</span>&传播[]) <span class="comment">// 传播</span><br /> {<br />
<span class="comment">//---</span><br /> <span class="keyword">静止的</span> <span class="keyword">单位</span>计数器=<span class="number">0</span>;<br /> <span class="keyword">如果</span>(Rates_total!=Prev_calculated) 计数器=<span class="number">0</span>;<br />
<br /> <span class="keyword">布尔值</span>卖出信号=<span class="macro">错误的</span>;<br /> <span class="keyword">布尔值</span>系列测试=<span class="functions">数组获取系列</span>(卖出箭头);<br /> <span class="keyword">整数</span>索引,索引1;<br /> <span class="keyword">如果</span>(系列测试)<br /> {<br /> 索引=<span class="keyword">整数</span>(条数);<br /> 索引1=索引+<span class="number">1</span>;<br /> }<br /> <span class="keyword">别的</span><br /> {<br /> 索引=Rates_total-<span class="keyword">整数</span>(条数)-<span class="number">1</span>;<br /> 索引1=索引-<span class="number">1</span>;<br /> }<br /> <span class="keyword">如果</span>(BuyArrow[index1] && BuyArrow[index1]!=<span class="macro">空_VALUE</span>&& SellArrow[索引] && SellArrow[索引]!=<span class="macro">空_VALUE</span>) 卖出信号=<span class="macro">真的</span>;<br /> <span class="keyword">如果</span>(SellSignal && 计数器<=NumberofAlerts)<br /> {<br /> 计数器++;<br /> <span class="predefines">Mql日期时间</span>TM;<br /> <span class="functions">构建时间</span>(<span class="functions">时间当前</span>(),tm);<br /> <span class="keyword">细绳</span>文字=<span class="functions">字符串时间</span>(<span class="functions">时间当前</span>(),<span class="macro">TIME_DATE</span>)+<span class="string">” “</span>+<span class="keyword">细绳</span>(tm.小时)+<span class="string">“:”</span>+<span class="keyword">细绳</span>(tm.分钟);<br /> 系列测试=<span class="functions">数组获取系列</span>(<span class="predefines">关闭</span>);<br /> <span class="keyword">如果</span>(系列测试)索引=<span class="keyword">整数</span>(条数);<br /> <span class="keyword">别的</span>索引=Rates_total-<span class="keyword">整数</span>(条数)-<span class="number">1</span>;<br /> <span class="keyword">双倍的</span> <span class="predefines">问</span>=<span class="predefines">关闭</span>[指数];<br /> <span class="keyword">双倍的</span> <span class="predefines">出价</span>=<span class="predefines">关闭</span>[指数];<br /> 系列测试=<span class="functions">数组获取系列</span>(传播);<br /> <span class="keyword">如果</span>(系列测试)索引=<span class="keyword">整数</span>(条数);<br /> <span class="keyword">别的</span>索引=Rates_total-<span class="keyword">整数</span>(条数)-<span class="number">1</span>;<br /> <span class="predefines">出价</span>+=<span class="predefines">_观点</span>*传播[索引];<br /> <span class="keyword">细绳</span>问=<span class="functions">双精度转字符串</span>(<span class="predefines">问</span>,<span class="predefines">_数字</span>);<br /> <span class="keyword">细绳</span>出价=<span class="functions">双精度转字符串</span>(<span class="predefines">出价</span>,<span class="predefines">_数字</span>);<br /> <span class="keyword">细绳</span>sPeriod=GetStringTimeframe(<span class="functions">图表周期</span>());<br /> <span class="keyword">如果</span>(声音打开)<span class="functions">警报</span>(<span class="string">"卖出信号 \n 询问="</span>,<span class="predefines">问</span>,<span class="string">“\n 出价=”</span>,<span class="predefines">出价</span>,<span class="string">“\n 当前时间=”</span>,文本,<span class="string">“\n 符号=”</span>,<span class="functions">象征</span>(),<span class="string">“句号=”</span>,s 期间);<br /> <span class="keyword">如果</span>(电子邮件)<span class="functions">发送邮件</span>(信号先生姓名+<span class="string">“:卖出信号警报”</span>,<span class="string">“卖出信号在询问=”</span>+问+<span class="string">“,出价=”</span>+出价+<span class="string">“,日期=”</span>+文字+<span class="string">“符号=”</span>+<span class="functions">象征</span>()+<span class="string">“句号=”</span>+s句点);<br /> <span class="keyword">如果</span>(推开)<span class="functions">发送通知</span>(信号先生姓名+<span class="string">": 在 Ask=" 时卖出信号</span>+问+<span class="string">“,出价=”</span>+出价+<span class="string">“,日期=”</span>+文字+<span class="string">“符号=”</span>+<span class="functions">象征</span>()+<span class="string">“句号=”</span>+s句点);<br /> }<br />
<span class="comment">//---</span><br /> }<br />
<span class="comment">//+------------------------------------------------------------------+</span><br />
<span class="comment">//| 获取字符串形式的时间范围 |</span><br />
<span class="comment">//+------------------------------------------------------------------+</span><br />
<span class="keyword">细绳</span>获取字符串时间范围(<span class="macro">ENUM_TIMEFRAMES</span>大体时间)<br /> {<br />
<span class="comment">//----</span><br /> <span class="keyword">返回</span>(<span class="functions">字符串子串</span>(<span class="functions">枚举转字符串</span>(大体时间),<span class="number">7</span>,-<span class="number">1</span>));<br />
<span class="comment">//----</span><br /> }</div>
</li>
<li>在 OnCalculate() 块中的指标计算周期之后添加了对 BuySignal() 和 SellSignal() 函数的几次调用<div class="code"><span class="comment">//--- </span><br /> 买入信号(<span class="string">“JBrainTrend1Stop_Alert”</span>,BuyStopBuffer,SellStopBuffer,rates_total,prev_calculated,close,spread);<br /> 卖出信号(<span class="string">“JBrainTrend1Stop_Alert”</span>,SellStopBuffer,BuyStopBuffer,rates_total,prev_calculated,close,spread);<br />
<span class="comment">//--- </span></div>
其中 BuyStopBuffer 和 SellStopBuffer 是用于存储上升和下降趋势信号(多头和空头的止损线)的指标缓冲区的名称。如果没有适当的趋势,则指标缓冲区中应存在零值或 EMPTY_VALUE。
假定对 BuySignal() 和 SellSignal() 函数的唯一一次调用将在指标代码的 OnCalculate() 块中使用。
将 JMA.mq5 指标编译文件放置到 MQL5\Indicators。

图1.图表上的 JBrainTrend1Stop_Alert 指标

图2. JBrainTrend1Stop_Alert 指标。生成警报
附件下载
📎 jma.mq5 (47.27 KB)
📎 jbraintrend1stop_alert.mq5 (36.04 KB)
Source: MQL5 #16895
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录
