MQL 5:脚本
1、默认脚本不会有提示框,如果有提示框需要加一句代码#property script_show_inputs
如果是要显示输入参数则同时添加:input double a=0.1;
2、自定义下单函数:
由于MT5内置的下单函数和MT4有很大差别,所以需要自己创建一个单独的类文件,用来引做下单。
类文件内容:
int buy(string symbol,double lots,int slpoint,int tppoint,string com,int magic)
{
int a;
MqlTradeResult result={};
MqlTradeRequest request={};
request.action=TRADE_ACTION_DEAL;
request.symbol=symbol;
request.type=ORDER_TYPE_BUY;
request.type_filling=ORDER_FILLING_IOC;//切记留意该选项,若不指定会出现无法下单的情况。
request.volume=lots;
request.deviation=100;
request.price=SymbolInfoDouble(symbol,SYMBOL_ASK);
request.sl=SymbolInfoDouble(symbol,SYMBOL_ASK)-slpointPoint();
request.tp=SymbolInfoDouble(symbol,SYMBOL_ASK)+tppointPoint();
request.comment=com;
request.magic=magic;
OrderSend(request,result);
return a;
}
3、开仓基本逻辑:MT5统一使用ordersend函数进行交易、修改订单等操作,通过构建两个内置结构体,并在结构体中添加对应的参数值,通过ordersend函数执行这两个结构体而实现下单、修改订单等操作。
结构体中包含了很多参数。
4、平仓基本逻辑:先使用PositionsTotal获取持仓订单总数。使用PositionGetTicket获取指定订单行号对应的持仓订单编号,使用positiongetstring获取持仓订单交易产品,使用positiongetinteger获取指定订单买卖方向—最后创建结构体,执行该结构体即可。
void closeallbuy(string symbol)
{
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)
{
MqlTradeRequest request;ZeroMemory(request);
MqlTradeResult result;ZeroMemory(result);
request.action=TRADE_ACTION_DEAL;
request.position=PositionGetTicket(i);
request.type=ORDER_TYPE_SELL;
request.type_filling=ORDER_FILLING_IOC;
request.symbol=symbol;
request.volume=PositionGetDouble(POSITION_VOLUME);
request.deviation=100000;
request.price=SymbolInfoDouble(symbol,SYMBOL_BID);
if(!OrderSend(request,result))
PrintFormat(“OrderSend error %d”,GetLastError()); // 如果不能发送请求,输出错误代码
}
}
}