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