200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 【漆学军】EA编程速成教程(4)修改止损止盈

【漆学军】EA编程速成教程(4)修改止损止盈

时间:2023-03-12 17:33:30

相关推荐

【漆学军】EA编程速成教程(4)修改止损止盈

本课程的目标是给之前下的单子添加止损止盈价。

首选添加外部参数

input int SL=600;//止损点数input int TP=200;//止盈点数

给单子添加止损止盈有两个方法:

一、在下单函数里面带上相应的止损和止盈。

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);

具体使用方法如下:

int ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,3,Ask-SL*Point,Ask+TP*Point,"My order",16384,0,clrGreen);

注意:有些平台下单的时候不允许同时带上止损和止盈,否则会报错,之前的东航金融平台就是,也有的平台要求止损止盈至少要距离当前价格一定的点数,如果设置太小的话,可能造成下单失败。所以,设置止损止盈的方法我们通常使用第二种。

二、下单成功后,通过修改订单设置上止损和止盈。

修改订单用到的函数是OrderModify,这个函数有6个参数,其中第三个和第四个分别是止损价和止盈价

bool OrderModify(intticket,// ticketdoubleprice,// pricedoublestoploss,// stop lossdoubletakeprofit,// take profitdatetimeexpiration,// expirationcolorarrow_color// color);

第一个参数ticket是订单编号,订单编号一般是需要通过遍历账户的所有单子来获取,修改止损止盈的全部代码如下:

for(int i=0; i<OrdersTotal(); i++){if(OrderSelect(i,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 |//| 云开 |//||//+------------------------------------------------------------------+#property copyright ""#property link""#property description "【漆天编程】 测试EA"#property description " "#property description "这是一款测试EA,作者QQ:80364276"#property description " "#property description "发布时间:.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; i<OrdersTotal(); i++){if(OrderSelect(i,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(ticket<0){Print("OrderSend failed with error #",GetLastError());}else{isgo=false;Print("OrderSend placed successfully");}}}//+------------------------------------------------------------------+

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。