13评论

4收藏

MT4脚本 平三分之一仓可以实现平仓当前订单的三分之一手数

avatar lkx2008 | 3935 人阅读 | 13 人评论 | 2018-03-07

MT4脚本 平三分之一仓可以实现平仓当前订单的三分之一手数,当然最小0.03才能平仓三分之一
MQL4源码如下:
int start()
{
int cnt, total; total=OrdersTotal();
for(cnt=total-1;cnt>=0;cnt–)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
double lot = NormalizeDouble( OrderLots() * 1/3, 2); //取得单子的手数,然后算出要平仓的手数,并精确到小数点后两位
if(OrderType()==OP_SELL)
{
OrderClose(OrderTicket(),lot,Ask,3,CLR_NONE);
}
if(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(),lot,Bid,3,CLR_NONE);
}
}
return(0);
}


//.删除所有挂件
int start()
{  
ObjectsDeleteAll(0);  
return(0);
}  
################################################
//全部平仓
int start()
{  
int cnt, total;
total=OrdersTotal();  
for(cnt=total-1;cnt>=0;cnt--)
{     
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);   
if(OrderType()==OP_SELL)     
{      
OrderClose(OrderTicket(),OrderLots(),Ask,3,CLR_NONE);     
}     
if(OrderType()==OP_BUY)     
{      
OrderClose(OrderTicket(),OrderLots(),Bid,3,CLR_NONE);
}
}  
return(0);
}  
########################################
//删除所有挂单
#include <stdlib.mqh>
#include <WinUser32.mqh>
int start()  
{     
if (IsTradeAllowed()==false)
{
Alert("自动交易功能未打开,请在选项中设置。");
return;
}

   if(MessageBox("是否要删除所有挂单? ", "删除挂单", MB_YESNO|MB_ICONQUESTION) != IDYES) return;//     
int total=OrdersTotal();   
for(int i=total-1; i>=0; i--)   
{         
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) ==false) continue;         
if(OrderType() < 2) continue;         
while(true)         
{              
if(  OrderDelete(OrderTicket())  !=TRUE  )  Print("LastError  =  ",  ErrorDescription(GetLastError()));            
else break;
}     
}   
return;
}   
#########################################
//取消所有单子
int start()
{  
bool   result;   
double price;   
int    cmd,error;     
while(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))      
{        
cmd=OrderType();        
//---- first order is buy or sell      
if(cmd==OP_BUY || cmd==OP_SELL)         
{           
while(true)            
{              
if(cmd==OP_BUY) price=Bid;            
else            price=Ask;              
result=OrderClose(OrderTicket(),OrderLots(),price,3,CLR_NONE);              
if(result!=TRUE)
{
error=GetLastError();
Print("LastError = ",error);
}            
else error=0;              
if(error==135) RefreshRates();            
else break;            
}         
}
}     
Print( "单子全平 ! ");   
return(0);
}  
########################################  
//------------定单操作函数版本1.3------------------------  
//m取值0、1、2、3、4、5、6、7//0-5表示定单类型//6表示所有//也可以指定某个定单号//7表示清理所有挂单  
//1.0版本 0表示多单平仓、1表示空单平仓、2表示BUYLIMIT、3表示SELLLIMIT、4表示BUYSTOP、5表示SELLSTOP  
//1.1版本 继续1.0版本所有功能,加入6删除所有挂单,平仓所有成交定单
//1.2版本 继续1.1版本功能,加入7删除所有挂单   
bool delwhat(int m)
{  
bool trueorfalse;
if(m > 100000)  
{  
if(OrderSelect(m,SELECT_BY_TICKET,MODE_TRADES) == true)
{   
if(OrderType() == 0)
{  
trueorfalse = OrderClose(OrderTicket(),OrderLots(),Bid,maxslippages,Yellow); //平仓操作
return(trueorfalse);
}
else if(OrderType() == 1)
{  
trueorfalse = OrderClose(OrderTicket(),OrderLots(),Ask,maxslippages,Yellow);//平仓操作
return(trueorfalse);
}
else if(OrderType() > 1)
{  
trueorfalse = OrderDelete(OrderTicket()); //删除挂单操作
return(trueorfalse);
}
}  
else  
{  
Print("赋予删除函数的参数数值无效,请检查");  //MT_SpeechText("赋予删除函数的参数数值无效,请检查",1);
}
}   
if (-1 < m < 8)
{
for(b=0;b<=OrdersTotal();b ) //循环建立一系列数字为序列号
{  
if (OrderSelect(b,SELECT_BY_POS,MODE_TRADES) == false) break;//根据系列号抓取定单,失败打断该操作  
if(m == 0) //假如参数m的值为0,表示假如抓取的当前定单为buy单
{  

if(OrderType()==0)
{  
trueorfalse = OrderClose(OrderTicket(),OrderLots(),Bid,maxslippages,CLR_NONE); //平仓操作
return(trueorfalse);  
}
else {} //返回操作结果,成功为1,失败为0   
}
else if(m == 1) //抓取sell单
{  
if(OrderType()==1)
{  
trueorfalse = OrderClose(OrderTicket(),OrderLots(),Ask,maxslippages,CLR_NONE);//平仓操作
return(trueorfalse);
}
else {} //返回操作结果   
}
else if(m > 1 && m < 6 ) //抓取4种挂单
{  
if(OrderType()>1 && OrderType() == m)
{  
trueorfalse = OrderDelete(OrderTicket()); //删除挂单操作
return(trueorfalse);
}
else {}  //返回操作结果  
}
else if(m == 6) //表示需要删除所有挂单,平仓所有多和空单
{  
if(OrderType() == 0)
{  
trueorfalse = OrderClose(OrderTicket(),OrderLots(),Bid,maxslippages,CLR_NONE);//平仓操作
return(trueorfalse); //返回操作结果
}
else if (OrderType() == 1)
{  
trueorfalse = OrderClose(OrderTicket(),OrderLots(),Ask,maxslippages,CLR_NONE);//平仓操作
return(trueorfalse); //返回操作结果
}
else if(OrderType()>1)
{  
trueorfalse = OrderDelete(OrderTicket()); //删除挂单操作
return(trueorfalse);
}  
}
else if(m == 7)
{  
if(OrderType()>1)
{  
trueorfalse = OrderDelete(OrderTicket()); //删除挂单操作  
return(trueorfalse);
}
else {}  
}


""
还没有人打赏,支持一下

评论|共 13 个

drenched

发表于 2020-4-28 15:06:22 | 显示全部楼层

有竞争才有进步嘛

积博巍YX

发表于 2020-6-5 16:21:00 | 显示全部楼层

过来看看的

倾听那旋律

发表于 2020-6-29 14:28:59 | 显示全部楼层

谢谢楼主,共同发展

受害者联盟

发表于 2020-7-5 12:35:27 | 显示全部楼层

帮你顶下哈!!

为成功而努力

发表于 2020-7-12 17:02:47 | 显示全部楼层

帮你顶下哈!!

李香兰

发表于 2020-8-10 15:19:42 | 显示全部楼层

谢谢楼主分享

海还是海

发表于 2020-8-25 10:00:44 | 显示全部楼层

帮你顶下哈!!

QQ音乐

发表于 2020-9-3 10:36:50 | 显示全部楼层

谢谢楼主分享

xiaosong

发表于 2020-9-7 11:38:31 | 显示全部楼层

学习了,不错

12下一页
您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则