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

阅读 :
欢迎访问 外 汇 邦 WWW.WaiHuiBang.com

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

欢迎访问 外 汇 邦 WWW.WaiHuiBang.com
本文标题:外汇EA:简单的订单管理(三) - MT4平台MQL4编程学习
本文地址:http://www.ea666.cn/fxschool/autotrading/mql4/40632.html

相关文章

  • 波士顿科技发布MT4服务器延时地图
    波士顿科技发布MT4服务器延时地图

    波士顿科技(BT)是一家总部位于美国马萨诸塞州波士顿市的金融科技公司,服务从事外汇、差价合约(CFD)、期货和期权业务的银行、基金以及零售经纪商。BT于2007年研发了全球第一个商用MT4桥接器,实现了MT4实时STP功能,自此BT...

    MQL4编程学习
  • EA编程教程第七讲 变量

    在MQL中,变量是极其重要的,变量在使用前必须先定义,而且各个变量名称不能重复,基本变量有四样:int:整型,也就是整数。double:浮点型,也就是可以带小数点的数字。bool:true或falsestring:字符串。如:int a;double b;bool c;stri...

    MQL4编程学习
  • 外汇VPS到底是个什么鬼?
    外汇VPS到底是个什么鬼?

    近年来,外汇VPS交易逐渐在零售外汇圈内流行起来。本文将对外汇VPS及其原理、优势进行简要介绍。外汇VPS(虚拟私人服务器)支持EA交易员进行自动交易,最大程度地缩减MT4客户终端和MT4服务器之间的延迟。通过使用安全位置的...

    MQL4编程学习
  • Smart Pips EA:实现从趋势盈利
    Smart Pips EA:实现从趋势盈利

    在评论了一些机器人像Easy Walker,显示的价格都是超过300美元高价,我一直在寻找一个便宜的剥头皮专家顾问。今天我遇到了这样的机器人:Smart Pips EA,价格是微薄的99美元,开发商把它编程为一个剥头皮EA,并且它在真实账户...

    MQL4编程学习
  • 外汇智能交易策略

      交易策略  所有的交易分类都是完全随意的。下面这种分类强调从交易的基本概念上分类  根据走势  根据走势的策略等待与所建仓位同方向的价位变化。这样,我们假设走势会保持这个方向变化。当根据走势交易...

    MQL4编程学习
你可能感兴趣