在 MT4 上一键快速设定止盈和止损价位的脚本程序

前阵子一位年轻朋友提到在操作时下单后常忘记设止盈和止损价位 (就算大些也是保护住了), 当时就简单的写了个一键快速设定止盈和止损价位的脚本程序给他, 只要把脚本拉到那个商品的图表, 就能自动对未设定止盈和止损的单子作完设定, 以开仓价作基准, 非常方便且快速.

脚本的程序代码贴在下面, 请自行编译, 脚本程序需放在 MT4 文件夹的 MQL4\Scripts\ 文件夹内,  解说如下:

1. TargetProfit, StopLoss 和 FixedTargetProfit 三个参数是可以输入的, TargetProfit 是从开仓价起算的止盈价, StopLoss 是从开仓价算的止损价, FixedTargetProfit 是固定止盈价位.

如在 EURUSD 多单开仓于 1.3600, 止盈 100 点, 止损 100 点, 这样止盈价就变成 1.3700, 止损价为 1.3500, 但如果在 FixedTargetProfit 设 1.3800, 止盈点数的参数就不作用, 会直接使用 FixedTargetProfit 的 1.3800 作为止盈价位.

脚本要能作参数输入功能需要在程序里多个宣告:

#property show_inputs

2. TargetProfit 和 StopLoss 的点位是根据外汇小数点两位和四位来作单位的, 如果交易商是用三位(如 USDJPY) 和五位 (EURUSD), 在这行代码会自动把设定点数放大十倍:  对编程经验刚入门的朋友, TargetProfit*=10 这个意思是 TargetProfit = TargetProfit * 10; 自身乘以十的简单写法.

if (Digits==3 || Digits==5) { TargetProfit*=10; StopLoss*=10; }

3. 脚本的设计只对脚本拉过去的图表的商品的单子作设定动作, 如拉到 EURUSD 的图表, 只对 EURUSD 的单子作处理.  如果想直接对不同商品的单子统一一次性作处理, 可以将下面有两行带有 OrderSymbol() == Symbol() && 对图表商品名称判断的这部分移除即可.

4. 脚本因为是前阵子才写的, 用到 MT4 build 600 后的新函数名 void OnStart(), 如果你的 MT4 是还是旧版的, 可以改为 void start()

5. MT4 脚本最大的用途就是在处理一次性的批量执行, 最常用在下单或统计方面, 有兴趣的朋友可以自行研究更多的功能或在 MQL4 官方论坛上观摩代码库里的一些脚本程序: http://www.mql5.com/zh/code/mt4/scripts?orderby=downloads

6. 脚本要能对订单作处理, MT4 设定里的 “启用EA交易系统” 需要开启, 这是许多朋友在使用脚本作批量订单处理时会忘记的:

如果没有开启, 在修改订单时遇到 error code = 4109 也会弹出提示窗口:

***** SetTargetProfitStopLoss.mq4 脚本代码 ****

#property show_inputs
input int TargetProfit = 100;
input int StopLoss = 100;
input double FixedTargetProfit = 0.0;
int iTp=TargetProfit, iSl=StopLoss;
void OnStart()
{
//—

bool bOrderModify;
double dTargetProfit;

if (Digits==3 || Digits==5) { iTp*=10; iSl*=10; }

for (int i=OrdersTotal(); i>=0; i–)
{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if ( OrderSymbol() == Symbol() && OrderType() == OP_BUY )
{
if (FixedTargetProfit!=0.0) dTargetProfit = FixedTargetProfit;
else dTargetProfit = OrderOpenPrice() + Point * iTp;

bOrderModify = OrderModify(OrderTicket(),
OrderOpenPrice(),
NormalizeDouble(OrderOpenPrice() – Point * iSl, Digits),
NormalizeDouble(dTargetProfit,Digits),
0);
if (GetLastError()==4109)
{
MessageBox(“请在\”工具\”->\”选项\”->\”EA交易\”里勾选\”启用EA交易系统\””,”设置止盈止损”,0);
return;
}
}

if ( OrderSymbol() == Symbol() && OrderType() == OP_SELL )
{
if (FixedTargetProfit!=0.0) dTargetProfit = FixedTargetProfit;
else dTargetProfit = OrderOpenPrice() – Point * iTp;

bOrderModify = OrderModify(OrderTicket(),
OrderOpenPrice(),
NormalizeDouble(OrderOpenPrice() + Point * iSl, Digits),
NormalizeDouble(dTargetProfit, Digits),
0);
if(!bOrderModify)
if (GetLastError()==4109)
{
MessageBox(“请在\”工具\”->\”选项\”->\”EA交易\”里勾选\”启用EA交易系统\””,”设置止盈止损”,0);
return;
}
}

}

}

**** 顺便分享一键全部平仓的脚本代码, 只针对脚本拉过去的图表商品作平仓动作, 也就是会检查订单的商品名称是否与图表商品名称相同才作平仓动作

CloseAllOrders.mq4

void OnStart()
{
//—
bool bOrderClose;

for (int i=OrdersTotal(); i>=0; i–)
{

if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

if ( OrderSymbol() == Symbol() && OrderType() == OP_BUY )
bOrderClose = OrderClose(OrderTicket(),OrderLots(), Bid, 500);

if ( OrderSymbol() == Symbol() && OrderType() == OP_SELL )
bOrderClose = OrderClose(OrderTicket(),OrderLots(), Ask, 500);

RefreshRates();
}
}


点击查看《EA安装及运行教程》.
玩转策略正确流程:①复盘回测,判定策略质量→②加载虚拟盘检验,检测策略的原理可行性→③加载美分实盘试验,测试EA风险值→④实盘运行,注意风控!

.友情提醒:外汇EA网提供的资源,都不包含技术服务,请大家谅解!部分资源来源于用户上传和网络,如有侵权请邮件联系站长!外汇EA网资源售价只是赞助,收取费用仅维持本站的日常运营所需!外汇EA网不保证所提供下载的资源的准确性、安全性和完整性,策略资源仅供下载学习之用,如用于商业或者非法用途,与本站无关,一切后果请用户自负!
· 版权信息:本站所有资源仅供学习与参考,请勿用于商业用途,如有侵犯您的版权,请及时联系官网客服,我们将尽快处理。
· 免责声明:投资有风险,本网站所包含之所有信息均不构成任何投资的建议或意见,网站内容仅供参考。不适合所有投资者,客户需根据自身情况选择,网站访问者不应依赖本网站信息并将其视爲作爲或不作爲之依据。 对于任何个人依据本网站或网站的信息采取的作爲或不作爲所导致的结果,我们将毋须承担任何责任。

iMQL5自动外汇EA交易与EA指标 » 在 MT4 上一键快速设定止盈和止损价位的脚本程序

发表回复

MQL5外汇交易EA软件资源分享社区——免费EA,外汇EA,外汇软件,外汇mql5信号,EA下载,外汇ea编程,智能交易下载

最全最齐最好最低价的外汇EA下载大集市