欢恩宝羊奶粉怎么样:简单的订单管理(30)

来源:百度文库 编辑:中财网 时间:2024/05/02 20:54:02
简单的订单管理(3)2009-03-24 20:30 // 如果当前货币对没有开仓仓位,忽略它
if ( OrderSymbol() != Symbol() ) continue;


// 如果MagicNumber 不等于 _MagicNumber,
// 忽略这个仓位
        if ( OrderMagicNumber() != _MagicNumber ) continue;

        // 取决于仓位类型,
        // 改变变量值:

        switch ( OrderType() )
        {
          case OP_BUY:      BuyOrder      = OrderTicket(); break;
          case OP_SELL:     SellOrder     = OrderTicket(); break;
          case OP_BUYSTOP: BuyStopOrder = OrderTicket(); break;
          case OP_SELLSTOP: SellStopOrder = OrderTicket(); break;
        }

    }

    //---- 如果我们有两个挂单交易,退出
    //---- 等待他们开启
    if ( BuyStopOrder > 0 && SellStopOrder > 0 ) return(0);

    // 在全部定单中第二次搜索
    // 现在运行它们:

    _OrdersTotal = OrdersTotal();
    for ( z = _OrdersTotal - 1; z >= 0; z -- )

    {
        // 如果在仓位搜索中生成错误,
        // 转至下一个仓位
        if ( !OrderSelect( z, SELECT_BY_POS ) )

        {
            _GetLastError = GetLastError();
            Print("OrderSelect(", z, ", SELECT_BY_POS) - 错误 #",
                  _GetLastError );
            continue;
        }


        // 如果对于当前的货币对没有开仓
        // 忽略它
        if ( OrderSymbol() != Symbol() ) continue;

        // 如果 MagicNumber 不等于 _MagicNumber,
        // 忽略这个仓位

        if ( OrderMagicNumber() != _MagicNumber ) continue;

        // 取决于仓位的类型,
        // 改变变量值:

        switch ( OrderType() )
        {
            //----如果BUY仓位开仓,
            case OP_BUY:
            {

                // 如果 SellStop定单还没有删除,
                // 删除:
                if ( SellStopOrder > 0 )
                {

                  if ( !OrderDelete( SellStopOrder ) )
                  {

                    Alert(OrderDelete Error #", GetLastError());
                    return(-1);
                  }

                }
                // 检测止损被移动:
                // 如果追踪止损的大小不是很小,
                if(TrailingStop > MarketInfo( Symbol(),

                   MODE_STOPLEVEL ) )
                {
                    // 如果赢利点超过追踪止损点,
                    if(NormalizeDouble( Bid - OrderOpenPrice(),
                       Digits ) >
                       NormalizeDouble(TrailingStop*Point,

                       Digits ) )
                    {
                        // 如果新的止损水平超过当前仓位的水平
                        // (或者如果仓位没有止损),
                        if(NormalizeDouble(Bid -
                           TrailingStop*Point, Digits ) >
                           OrderStopLoss() || OrderStopLoss() <=
                           0.0 )

                        {
                            //---- 修改定单
                            if(!OrderModify( OrderTicket(),
                               OrderOpenPrice(),
                               NormalizeDouble(Bid -

                               TrailingStop*Point, Digits ),
                               OrderTakeProfit(),
                               OrderExpiration()))

                            {
                                Alert("OrderModify 错误 #",
                                    GetLastError());
                                return(-1);
                            }

                        }                   
                    }
                }
                // 如果没有开仓仓位,退出
                // 无事可做
                return(0);
            }

            // 下一个单元格与BUY 仓位的单元个一样
            // 这就是我们不能在单元格上标注的原因...
            case OP_SELL:
            {
                if ( BuyStopOrder > 0 )

                {
                    if ( !OrderDelete( BuyStopOrder ) )

                    {
                        Alert("OrderDelete 错误 #",
                              GetLastError());
                        return(-1);
                    }

                }
                if(TrailingStop > MarketInfo( Symbol(),
                   MODE_STOPLEVEL ) )

                {
                  if(NormalizeDouble(OrderOpenPrice() - Ask,
                  Digits) > NormalizeDouble(TrailingStop*Point,
                  Digits ) )

                    {
                      if(NormalizeDouble(Ask + TrailingStop*Point,
                         Digits ) < OrderStopLoss() ||

                         OrderStopLoss() <= 0.0 )
                        {
                          if(!OrderModify( OrderTicket(),
                             OrderOpenPrice(),
                      NormalizeDouble(Ask + TrailingStop*Point,

                            Digits), OrderTakeProfit(),
                            OrderExpiration() ) )
                            {

                              Alert("OrderModify Error #",
                                    GetLastError());
                              return(-1);
                            }

                        }                   
                    }
                }
                return(0);
            }
        }

    }


  • 全部博文(2181)
  • 外汇EA软件(67)
  • 外汇EA编程(144)
  • 外汇专栏(127)
  • 资金管理(71)
  • 交易系统(77)
  • 交易规则(38)
  • 交易实战(98)
  • 交易感悟(95)
  • 交易哲学(44)
  • 套利交易(17)
  • 技术运用(108)
  • 基本面分析(188)
  • 文斋书房(769)
  • 情趣乐园(49)
  • 养生健身(192)