【无标题】

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)+tppoint
Point();
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()); // 如果不能发送请求,输出错误代码

             }
         }
       }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值