everything 发表于 2011-9-21 03:46:38

EA中如何计算止损和止赢

[原创转载] macy01.blogcn.com


一般一个EA中会定义止损水平和止赢水平,一般大家定义的参数都是int型,即点数。例如下面的变量定义:
extern int _SlipPage   = 2;   //最大允许滑点数
extern int _StopLoss   = 30;//止损水平
extern int _TakeProfit   = 100; //赢利水平
extern int _Magic      = 0;   //订单Migc号码

在使用OrderSend开仓的时候,并不能够直接将上面的参数传递给OrderSend,因为OrderSend需要的是真实的市场价位,例如EURUSD开多仓位置为1.5000,则对应止损为1.4970,止赢为1.5100;对于其他货币小数位数可能不同,例如USDJPY。注意事项为:
(1)如果没有经过转换,或者价位设置错误(例如多单的止损高于入场价位),则会返回错误码130: errorDescription=\"无效的止损(invalid stops)\";
(2)在传入OrderSend时,最好使用NormalizeDouble(stopLoss,Digits)将参数处理为小数位数合适的Double类型

转换的代码如下面所示:
/*
此函数的功能是根据指标返回信号进场交易。
函数参数:无
返回值类型:无
*/
void Trade()
{
    double openLots = LotsMgmt();    //开仓手数
    int ticket;                      //订单编号
    double stopLoss=0, takeProfit=0;
   
    if(CheckForOpen()==OPEN_BUY)
    {
      //计算止赢点位
      if(_TakeProfit==0)
      takeProfit=0;
      else
      takeProfit=Ask+_TakeProfit*Point;
      
      //计算止损点位   
      if(_StopLoss==0)
      stopLoss=0;
      else
      stopLoss=Ask-_StopLoss*Point;
            
      //这里止损和止赢必须使用NormalizeDouble处理和相应货币的小数位数对应
      ticket=OrderSend(Symbol(), OP_BUY, openLots, Ask, _SlipPage, NormalizeDouble(stopLoss,Digits),NormalizeDouble(takeProfit,Digits), ORDER_COMMENT, _Magic, 0, Red);
      if(ticket==-1)
      Print(\"Error Occured : \"+ErrorDescription(GetLastError()));
    }
   
    if(CheckForOpen()==OPEN_SELL)
    {
      //计算止赢点位
      if(_TakeProfit==0)
      takeProfit=0;
      else
      takeProfit=Bid-_TakeProfit*Point;
         
      //计算止损点位   
      if(_StopLoss==0)
      stopLoss=0;
      else
      stopLoss=Bid+_StopLoss*Point;
         
      //这里止损和止赢必须使用NormalizeDouble处理和相应货币的小数位数对应
      ticket=OrderSend(Symbol(), OP_SELL, openLots, Bid, _SlipPage, NormalizeDouble(stopLoss,Digits),NormalizeDouble(takeProfit,Digits), ORDER_COMMENT, _Magic, 0, Green);
      if(ticket==-1)
      Print(\"Error Occured : \"+ErrorDescription(GetLastError()));
    }
}

后山俗人 发表于 2012-11-21 23:54:18

晕死也不多加点分

小林 发表于 2012-11-21 23:54:18

支持一下吧

纸老虎 发表于 2012-11-22 00:02:14

看看现在变相卖EA的。。。越来越多!

bjsam68 发表于 2012-11-22 00:02:14

我在顶贴~!~

dmpdc 发表于 2012-11-22 00:28:10

不是吧

fxsin8.7 发表于 2012-11-22 00:28:10

哈哈,看的人少,回一下

草比 发表于 2012-11-22 00:28:10

楼主good

做梦吧你 发表于 2012-11-22 00:28:10

我有一个EA 好坏你自己定免费的需要的话 可以发给你玩玩

2641318963 发表于 2012-11-22 00:28:10

貌似我真的很笨????哎
页: [1] 2
查看完整版本: EA中如何计算止损和止赢