📅 财经日历 📊 实时波动 📈 大盘云图 📶 行情走势 🆚 投机情绪 🚀 今日热点

    清仓方法

    老周 LV16
    2016-11-08 · 2562 阅读
    本节所讲的“清仓”并不是全部持仓单平仓,而是指针对具有相同条件的订单平仓,例如所有盈利的订单平仓。 为了实现这种操作, 有两个知识点需要掌握, 一是遍历所有持仓单,二是筛选特定条件的目标订单。


    for 语句完成遍历持仓单任务,MQL4 将持仓单按照时间远近顺序分配了序号,例如当前持仓单数量为 2,那么第 1 张持仓单顺序号为 0,第 2 张持仓单顺序号为 1。


    if 语句中的“OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)”表示按序号选择订单,如果被选中返回 true,否则返回 false。筛选条件的设置真是一门学问,稍有差池,结果就会大相径庭。我们继续添加条件,当持仓单被选中后,需要增加一个货币对筛选条件,即“OrderSymbol()==Symbol()” , 将持仓单货币对锁定在当前货币对里, 再在增加一个特征码筛选条件“OrderMagicNumber()==MyMagicNum” ,将持仓单锁定在 EA 监管的范围内,最后增加一项“OrderProfit()>0” ,将持仓单锁定在盈利范围内。此时就完成了目标订单的选择。


    总结筛选组合条件:选中订单+当前货币对+EA 可监管+订单盈利。


    平仓动作需要注意的是买入单和卖出单使用的平仓价格不同,买入单用 Bid 平仓,卖出单用 Ask 平仓,因此在代码中还需要做进一步区分。清仓操作还包括撤销挂单, 可以利用订单类型再增加一个筛选条件, 撤销订单的操作只需要用“OrderDelete(OrderTicket());”命令即可,与报价无关。


    1. for (cnt=0;cnt< OrdersTotal();cnt++) //用循环语句实现遍历持仓单
    2. {
    3. if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES) && OrderSymbol()==Symbol() && OrderMagicNumber()==MyMagicNum &&
    4. OrderProfit()>0)
    5. {
    6. if (OrderType()==OP_BUYSTOP) //买入单
    7. {
    8. iWait();
    9. OrderClose(OrderTicket(),OrderLots(),Bid,0);
    10. }
    11. if (OrderType()==OP_SELLSTOP) //卖出单
    12. {
    13. iWait();
    14. OrderClose(OrderTicket(),OrderLots(),Ask,0);
    15. }
    16. }
    17. }
    复制代码


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

    举报

     
    您需要登录后才可以回帖 登录 | 注册

    提醒: 禁止引战、谩骂、灌水内容

    微信二维码

    有问题联系客服