void OnTick()
{
double h1maxiao[];
sj.MA(h1maxiao,4,Symbol(),PERIOD_H1,均线周期,0,MODE_SMA,PRICE_CLOSE);
// double h4mada[];
// sj.MA(h4mada,4,Symbol(),PERIOD_H1,大均线周期,0,MODE_SMA,PRICE_CLOSE);
// MqlRates m30rate[];
// sj.getrates(m30rate,4,Symbol(),PERIOD_H1);
MqlRates h1rate[];
sj.getrates(h1rate,4,Symbol(),PERIOD_H1);
///////////////////////////////////////////////
//////////////////////////////////////////////////
if(h1rate[1].close>h1maxiao[1] && h1maxiao[1]>h1maxiao[2]) //开多单
{
buyplus(Symbol(),开单手数,止损点数,止盈点数,Symbol()+"buy",magic); //
}
if(h1rate[1].close<h1maxiao[1] ) //平多单
{
closeallbuy(Symbol(),magic);
}
if(h1rate[1].close<h1maxiao[1] && h1maxiao[1]<h1maxiao[2]) //开空单
{
sellplus(Symbol(),开单手数,止损点数,止盈点数,Symbol()+"sell",magic);
}
if(h1rate[1].close>h1maxiao[1]) //平空单
{
closeallsell(Symbol(),magic);
}
}
ulong buyplus(string symbol,double lots,int slpoint,int tppoint,string com,int magic)
{
ulong a=0;
int t=PositionsTotal();
for(int i=t-1;i>=0;i--)
{
if(PositionGetTicket(i)>0)
{
if(PositionGetString(POSITION_SYMBOL)==symbol &&
PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && PositionGetInteger(POSITION_MAGIC)==magic &&
PositionGetString(POSITION_COMMENT)==com)
{
a=1;
return(0);
}
}
}
if(a==0)
{
a=buy(symbol,lots,slpoint,tppoint,com,magic);
}
return(a);
}
ulong buy(string symbol,double lots,int slpoint,int tppoint,string com,int magic)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action=TRADE_ACTION_DEAL;
request.symbol=symbol;
request.type=ORDER_TYPE_BUY;
request.volume=lots;
request.deviation=100;
request.type_filling=ORDER_FILLING_IOC;
request.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
if(slpoint>SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL))
{
request.sl=SymbolInfoDouble(symbol,SYMBOL_ASK)-slpoint*SymbolInfoDouble(symbol,SYMBOL_POINT);
}
if(tppoint>SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL))
{
request.tp=SymbolInfoDouble(symbol,SYMBOL_ASK)+tppoint*SymbolInfoDouble(symbol,SYMBOL_POINT);
}
request.comment=com;
request.magic=magic;
//--- 发送请求
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
//--- 操作信息
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
return(result.order);
}
ulong sellplus(string symbol,double lots,int slpoint,int tppoint,string com,int magic)
{
ulong a=0;
int t=PositionsTotal();
for(int i=t-1;i>=0;i--)
{
if(PositionGetTicket(i)>0)
{
if(PositionGetString(POSITION_SYMBOL)==symbol &&
PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && PositionGetInteger(POSITION_MAGIC)==magic &&
PositionGetString(POSITION_COMMENT)==com)
{
a=1;
return(0);
}
}
}
if(a==0)
{
a=sell(symbol,lots,slpoint,tppoint,com,magic);
}
return(a);
}
ulong sell(string symbol,double lots,int slpoint,int tppoint,string com,int magic)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action=TRADE_ACTION_DEAL;
request.symbol=symbol;
request.type=ORDER_TYPE_SELL;
request.volume=lots;
request.deviation=100;
request.type_filling=ORDER_FILLING_IOC;
request.price=SymbolInfoDouble(symbol,SYMBOL_BID);
if(slpoint>SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL))
{
request.sl=SymbolInfoDouble(symbol,SYMBOL_BID)+slpoint*SymbolInfoDouble(symbol,SYMBOL_POINT);
}
if(tppoint>SymbolInfoInteger(symbol,SYMBOL_TRADE_STOPS_LEVEL))
{
request.tp=SymbolInfoDouble(symbol,SYMBOL_BID)-tppoint*SymbolInfoDouble(symbol,SYMBOL_POINT);
}
request.comment=com;
request.magic=magic;
//--- 发送请求
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); // 如果不能发送请求,输出错误代码
//--- 操作信息
PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
return(result.order);
}
void closeallbuy(string symbol,int magic=0)
{
int t=PositionsTotal();
for(int i=t-1;i>=0;i--)
{
if(PositionGetTicket(i)>0)
{
if(PositionGetString(POSITION_SYMBOL)==symbol &&
PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
if(magic==0)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action =TRADE_ACTION_DEAL;
// 交易操作类型
request.symbol =symbol;
// 交易品种
request.volume =PositionGetDouble(POSITION_VOLUME); //
0.1手交易量
request.type =ORDER_TYPE_SELL;
// 订单类型
request.price =SymbolInfoDouble(symbol,SYMBOL_BID); //
持仓价格
request.type_filling=ORDER_FILLING_IOC;
request.deviation=100; // 允许价格偏差
request.position =PositionGetTicket(i);
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); //
如果不能发送请求,输出错误
}
else
{
if(PositionGetInteger(POSITION_MAGIC)==magic)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action =TRADE_ACTION_DEAL;
// 交易操作类型
request.symbol =symbol;
// 交易品种
request.volume
=PositionGetDouble(POSITION_VOLUME); // 0.1手交易量
request.type =ORDER_TYPE_SELL;
// 订单类型
request.price
=SymbolInfoDouble(symbol,SYMBOL_BID); // 持仓价格
request.deviation=100; // 允许价格偏差
request.type_filling=ORDER_FILLING_IOC;
request.position =PositionGetTicket(i);
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError());
// 如果不能发送请求,输出错误
}
}
}
}
}
}
void closeallsell(string symbol,int magic=0)
{
int t=PositionsTotal();
for(int i=t-1;i>=0;i--)
{
if(PositionGetTicket(i)>0)
{
if(PositionGetString(POSITION_SYMBOL)==symbol &&
PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
if(magic==0)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action =TRADE_ACTION_DEAL;
// 交易操作类型
request.symbol =symbol;
// 交易品种
request.volume =PositionGetDouble(POSITION_VOLUME); //
0.1手交易量
request.type =ORDER_TYPE_BUY;
// 订单类型
request.price =SymbolInfoDouble(symbol,SYMBOL_ASK); //
持仓价格
request.deviation=100; // 允许价格偏差
request.type_filling=ORDER_FILLING_IOC;
request.position =PositionGetTicket(i);
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); //
如果不能发送请求,输出错误
}
else
{
if(PositionGetInteger(POSITION_MAGIC)==magic)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action =TRADE_ACTION_DEAL;
// 交易操作类型
request.symbol =symbol;
// 交易品种
request.volume
=PositionGetDouble(POSITION_VOLUME); // 0.1手交易量
request.type =ORDER_TYPE_BUY;
// 订单类型
request.price
=SymbolInfoDouble(symbol,SYMBOL_ASK); // 持仓价格
request.deviation=100; // 允许价格偏差
request.type_filling=ORDER_FILLING_IOC;
request.position =PositionGetTicket(i);
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError());
}
}
}
}
}
}
void closeall(string symbol,int magic=0)
{
int t=PositionsTotal();
for(int i=t-1;i>=0;i--)
{
if(PositionGetTicket(i)>0)
{
if(PositionGetString(POSITION_SYMBOL)==symbol &&
PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
{
if(magic==0)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action =TRADE_ACTION_DEAL;
// 交易操作类型
request.symbol =symbol;
// 交易品种
request.volume =PositionGetDouble(POSITION_VOLUME); //
0.1手交易量
request.type =ORDER_TYPE_SELL;
// 订单类型
request.price =SymbolInfoDouble(symbol,SYMBOL_BID); //
持仓价格
request.deviation=100; // 允许价格偏差
request.type_filling=ORDER_FILLING_IOC;
request.position =PositionGetTicket(i);
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); //
}
else
{
if(PositionGetInteger(POSITION_MAGIC)==magic)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action =TRADE_ACTION_DEAL;
// 交易操作类型
request.symbol =symbol;
// 交易品种
request.volume
=PositionGetDouble(POSITION_VOLUME); // 0.1手交易量
request.type =ORDER_TYPE_SELL;
// 订单类型
request.price
=SymbolInfoDouble(symbol,SYMBOL_BID); // 持仓价格
request.deviation=100; // 允许价格偏差
request.type_filling=ORDER_FILLING_IOC;
request.position =PositionGetTicket(i);
if(!OrderSend(request,result))
PrintFormat("OrderSend error
%d",GetLastError());
}
}
}
if(PositionGetString(POSITION_SYMBOL)==symbol &&
PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
{
if(magic==0)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action =TRADE_ACTION_DEAL;
// 交易操作类型
request.symbol =symbol;
// 交易品种
request.volume =PositionGetDouble(POSITION_VOLUME); //
0.1手交易量
request.type =ORDER_TYPE_BUY;
// 订单类型
request.price =SymbolInfoDouble(symbol,SYMBOL_ASK); //
持仓价格
request.deviation=100; // 允许价格偏差
request.type_filling=ORDER_FILLING_IOC;
request.position =PositionGetTicket(i);
if(!OrderSend(request,result))
PrintFormat("OrderSend error %d",GetLastError()); //
如果不能发送请求,输出错误
}
else
{
if(PositionGetInteger(POSITION_MAGIC)==magic)
{
MqlTradeRequest request={0};
MqlTradeResult result={0};
request.action =TRADE_ACTION_DEAL;
// 交易操作类型
request.symbol =symbol;
// 交易品种
request.volume
=PositionGetDouble(POSITION_VOLUME); // 0.1手交易量
request.type =ORDER_TYPE_BUY;
// 订单类型
request.price
=SymbolInfoDouble(symbol,SYMBOL_ASK); // 持仓价格
request.deviation=100; // 允许价格偏差
request.type_filling=ORDER_FILLING_IOC;
request.position =PositionGetTicket(i);
if(!OrderSend(request,result))
PrintFormat("OrderSend error
%d",GetLastError());
}
}
}
}
}
}
- MT5EA下不了单求助
- 使用mql5帮助文件的举例代码进行平仓为何总是失败?
- MT5开单函数在 EA和脚本中有何不同?