EA编程速成教程(4)修改止损止盈
[color=]本课程的目标是给之前下的单子添加止损止盈价。
[color=]首选添加外部参数
input int SL=
[color=]600
;
//止损点数input int TP=
[color=]200
;
//止盈点数
复制代码
[color=]给单子添加止损止盈有两个方法:
[color=]一、在下单函数里面带上相应的止损和止盈。
[color=]OrderSend函数有11个参数,其中第六个(stoploss)和第七个(takeprofit)分别是止损价和止盈价。
int OrderSend(string symbol, // symbolint cmd, // operationdouble volume, // volumedouble price, // priceint slippage, // slippagedouble stoploss, // stop lossdouble takeprofit, // take profitstring comment=NULL, // commentint magic=0, // magic numberdatetime expiration=0, // pending order expirationcolor arrow_color=clrNONE // color);
复制代码
[color=]具体使用方法如下:
int ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,
[color=]3
,Ask-SL*Point,Ask+TP*Point,
[color=]"My order"
,
[color=]16384
,
[color=]0
,clrGreen);
复制代码
[color=]注意:有些平台下单的时候不允许同时带上止损和止盈,否则会报错,之前的东航金融平台就是,也有的平台要求止损止盈至少要距离当前价格一定的点数,如果设置太小的话,可能造成下单失败。所以,设置止损止盈的方法我们通常使用第二种。
[color=]二、下单成功后,通过修改订单设置上止损和止盈。
[color=] 修改订单用到的函数是OrderModify,这个函数有6个参数,其中第三个和第四个分别是止损价和止盈价
bool OrderModify(int ticket, // ticketdouble price, // pricedouble stoploss, // stop lossdouble takeprofit, // take profitdatetime expiration, // expirationcolor arrow_color // color);
复制代码
[color=]第一个参数ticket是订单编号,订单编号一般是需要通过遍历账户的所有单子来获取,修改止损止盈的全部代码如下:
for(int i=
[color=]0
; iif(OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==
[color=]16384
&& OrderType()==OP_BUY) { if(OrderStopLoss()==
[color=]0
) { bool res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-SL*Point,OrderOpenPrice()+TP*Point,
[color=]0
); if(res) Print(
[color=]"订单修改成功"
); } } } }
复制代码整个EA的全部代码如下:
复制代码
//+------------------------------------------------------------------+
//| Test_EA_04.mq4 |
//| 云开 |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
[color=]#property copyright "http://www.forexmt4.cn"
[color=]#property link "http://www.forexmt4.cn"
[color=]#property description "【漆天编程】 测试EA"
[color=]#property description " "
[color=]#property description "这是一款测试EA,作者QQ:80364276"
[color=]#property description " "
[color=]#property description "发布时间:2020.04.16"
[color=]#property strict
[color=]#property icon "//Images//sea.ico"input double lots=
[color=]0.1
;
//交易手数input int SL=
[color=]600
;
//止损点数input int TP=
[color=]200
;
//止盈点数bool isgo=
[color=]true
;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+int OnInit() {
//---
//--- return(INIT_SUCCEEDED); }
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+void OnDeinit(const int reason) {
//--- }
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+void OnTick() { for(int i=
[color=]0
; iif(OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==
[color=]16384
&& OrderType()==OP_BUY) { if(OrderStopLoss()==
[color=]0
) { bool res=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-SL*Point,OrderOpenPrice()+TP*Point,
[color=]0
); if(res) Print(
[color=]"订单修改成功"
); } } } }
//--- if(isgo) { int ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,
[color=]3
,
[color=]0
,
[color=]0
,
[color=]"My order"
,
[color=]16384
,
[color=]0
,clrGreen); if(ticketelse { isgo=
[color=]false
; Print(
[color=]"OrderSend placed successfully"
); } } }
//+------------------------------------------------------------------+
复制代码
大家在看了小编以上对"EA编程速成教程(4)修改止损止盈"的介绍后应该都清楚了吧,希望对大家做单有所帮助。如果大家还想要下载更多有关"EA编程速成教程(4)修改止损止盈"的相关EA源码,敬请关注汇探网下载。我们会持续更新交易系统,EA源码。 |