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

    EA中如何计算止损和止赢

    2011-09-21 · 7313 阅读
    [原创转载] 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()));
        }
      }
    ""
    还没有人打赏,支持一下
    回复

    举报

     

    回答|共 19 个

    后山俗人 LV5

    发表于 2012-11-21 23:54:18 | 显示全部楼层

    晕死也不多加点分  

    小林 LV3

    发表于 2012-11-21 23:54:18 | 显示全部楼层

    支持一下吧  

    纸老虎 LV6

    发表于 2012-11-22 00:02:14 | 显示全部楼层

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

    bjsam68 LV5

    发表于 2012-11-22 00:02:14 | 显示全部楼层

    我在顶贴~!~  

    dmpdc LV5

    发表于 2012-11-22 00:28:10 | 显示全部楼层

    不是吧  

    fxsin8.7 LV5

    发表于 2012-11-22 00:28:10 | 显示全部楼层

    哈哈,看的人少,回一下  

    草比 LV5

    发表于 2012-11-22 00:28:10 | 显示全部楼层

    楼主good  

    做梦吧你 LV5

    发表于 2012-11-22 00:28:10 | 显示全部楼层

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

    2641318963 LV5

    发表于 2012-11-22 00:28:10 | 显示全部楼层

    貌似我真的很笨????哎  
    123下一页
    您需要登录后才可以回帖 登录 | 注册

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

    微信二维码

    有问题联系客服