当前位置:Eagle Trader > 资讯 > 正文

作者:Eagle Trader

外汇EA:简单的订单管理(三)

  // 如果当前货币对没有开仓仓位,忽略它
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,
Dig

斑马投诉温馨提示:投资有风险,交易需谨慎!

未经允许不得转载:

作者:Eagle Trader, 转载或复制请以 超链接形式 并注明出处 Eagle Trader
原文地址:《外汇EA:简单的订单管理(三)》 发布于2024-06-25

分享到:
赞(0)

评论 抢沙发

7 + 1 =


联系我们

系电话:852-53489575 联系邮箱:[email protected]

访问官网

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录