4.6 交易函数

第 25 节 / 共 36 节 课程:Mt4编程语言
交易函数是EA的核心。

OrderSend开仓

int ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,sl,tp,"MyEA",8888,0,clrGreen);

完整示例

input double Lots=0.1;
input int SL=50,TP=100,Magic=8888;
int OpenBuy(){
    double sl=NormalizeDouble(Bid-SL*Point,Digits);
    double tp=NormalizeDouble(Bid+TP*Point,Digits);
    ResetLastError();
    int t=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,sl,tp,"EA",Magic,0,clrBlue);
     if(t > 0)
        Print("开多成功 #",t);
    else
         Print("开多失败",GetLastError());
    return t;
}

OrderClose平仓

void CloseAll(){
     for(int i=OrdersTotal()-1;i >= 0;i--){
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)&& OrderSymbol()==Symbol()){
            double p=(OrderType()==OP_BUY)? Bid:Ask;
            OrderClose(OrderTicket(),OrderLots(),p,3,clrWhite);
        }
    }
}

OrderModify修改订单

void TrailingStop(){
     for(int i=OrdersTotal()-1;i >= 0;i--){
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)&& OrderType()==OP_BUY){
             if(Bid-OrderOpenPrice() > 30*Point){
                double ns=NormalizeDouble(Bid-20*Point,Digits);
                 if(ns > OrderStopLoss())
                     OrderModify(OrderTicket(),OrderOpenPrice(),ns,OrderTakeProfit(),0,clrYellow);
            }
        }
    }
}

订单查询

函数说明
OrdersTotal()持仓总数
OrderTicket()订单号
OrderSymbol()品种
OrderType()类型
OrderLots()手数
OrderOpenPrice()开仓价
OrderStopLoss()止损
OrderTakeProfit()止盈
OrderProfit()盈亏
OrderMagicNumber()幻数