设为首页 收藏本站 切换语言

资金管理指标,按照外汇冠军思路设计下单手数  

| 发表于 2020-8-10 12:04:05 | 显示全部楼层 |复制链接
资金管理指标,按照外汇冠军思路设计下单手数

  1. //+------------------------------------------------------------------+
  2. //|                                                 资金管理指标.mq4 |
  3. //|                                            www.shuidongyijing.cn |
  4. //+------------------------------------------------------------------+
  5. #property copyright "教与交易 www.shuidongyijing.cn "
  6. #property link      "http://www.shuidongyijing.cn"
  7. #property strict
  8. #property indicator_chart_window
  9. #property indicator_buffers 3
  10. #property indicator_color1  clrNONE
  11. #property indicator_color2  clrNONE
  12. #property indicator_color3  clrNONE
  13. extern double    风险 = 0.01;
  14. extern bool      Use_ATR_Based_StopLoss = true;
  15. extern int       波幅计算天数 = 14;
  16. extern double    ATR_SL_Multiplier = 1.5;
  17. extern int       止损修正点数 = 1000;
  18. extern int       计算历史蜡烛数 = 500;
  19. int       Display_Corner = 2;
  20. double   buffer_atrPoints[];
  21. double   buffer_stoplossPoints[];
  22. double   buffer_lotsize[];
  23. int init() {
  24.    SetIndexBuffer(0,buffer_atrPoints); SetIndexLabel(0,"buffer_atrPoints"); SetIndexStyle(0,DRAW_NONE); SetIndexEmptyValue(0,EMPTY_VALUE);
  25.    SetIndexBuffer(1,buffer_stoplossPoints); SetIndexLabel(1,"buffer_stoplossPoints"); SetIndexStyle(1,DRAW_NONE); SetIndexEmptyValue(1,EMPTY_VALUE);
  26.    SetIndexBuffer(2,buffer_lotsize); SetIndexLabel(2,"buffer_lotsize"); SetIndexStyle(2,DRAW_NONE); SetIndexEmptyValue(2,EMPTY_VALUE);
  27.    IndicatorShortName(WindowExpertName());
  28.    
  29.    return(0);
  30. }
  31. int deinit() {
  32.    ObjectDelete("@MM-ATR");
  33.    ObjectDelete("@MM-LotText");
  34.    ObjectDelete("@MM-LotSize");
  35.    return(0);
  36. }
  37. int start() {
  38.    int counted_bars=IndicatorCounted();
  39.    if(counted_bars<0) return(-1);
  40.    if(counted_bars>0) counted_bars--;
  41.    int limit = 计算历史蜡烛数 - counted_bars;
  42.    double atr,lotsize;
  43.    int atrPoints, slPoints;
  44.    
  45.    for(int i=limit; i>=0; i--) {
  46.      atr = iATR(NULL,0,波幅计算天数,i+1);
  47.      atrPoints = (int)(atr * MathPow(10,MarketInfo(Symbol(),MODE_DIGITS)));
  48.      
  49.      if(Use_ATR_Based_StopLoss) {
  50.          slPoints = (int)MathCeil(ATR_SL_Multiplier*atrPoints);
  51.          slPoints = slPoints > 0 ? slPoints : 止损修正点数;
  52.      } else {
  53.          slPoints = 止损修正点数;
  54.      }
  55.      
  56.      lotsize = CalculateLotSize(Symbol(),风险, slPoints, 0, 10);
  57.      buffer_atrPoints[i]=StrToDouble(DoubleToStr(atrPoints,0));
  58.      buffer_stoplossPoints[i]=StrToDouble(DoubleToStr(slPoints,0));
  59.      buffer_lotsize[i]=StrToDouble(DoubleToStr(lotsize,2));;
  60.    }
  61.    if(Use_ATR_Based_StopLoss) {
  62.       DisplayText("@MM-ATR",StringConcatenate("真实波幅 (",波幅计算天数,"): ",buffer_atrPoints[0]," 点"),clrGold,30,35,Display_Corner);
  63.    }
  64.    DisplayText("@MM-LotText",StringConcatenate("允许最大手数 (风险 ",DoubleToStr((风险*100),0),"% , 建议止盈止损距离 ",buffer_stoplossPoints[0]," 点) :"),clrGold,30,10,Display_Corner);
  65.    DisplayText("@MM-LotSize",StringConcatenate(buffer_lotsize[0]),clrAqua,580,10,Display_Corner);
  66.    return(0);
  67. }
  68. double Multiplicator(string currencyPairAppendix="")
  69. {
  70.         double multiplicator = 1.0;
  71.        
  72.         if ( AccountCurrency() == "USD" )
  73.                 return ( multiplicator );
  74.    if ( AccountCurrency() == "EUR" )
  75.                 multiplicator = 1.0 / MarketInfo ( "EURUSD" + currencyPairAppendix, MODE_BID );
  76.    if ( AccountCurrency() == "GBP" )
  77.                 multiplicator = 1.0 / MarketInfo ( "GBPUSD" + currencyPairAppendix, MODE_BID );
  78.    if ( AccountCurrency() == "AUD" )
  79.                 multiplicator = 1.0 / MarketInfo ( "AUDUSD" + currencyPairAppendix, MODE_BID );               
  80.    if ( AccountCurrency() == "NZD" )
  81.                 multiplicator = 1.0 / MarketInfo ( "NZDUSD" + currencyPairAppendix, MODE_BID );               
  82.    if ( AccountCurrency() == "CHF" )
  83.                 multiplicator = MarketInfo ( "USDCHF" + currencyPairAppendix, MODE_BID );
  84.    if ( AccountCurrency() == "JPY" )
  85.                 multiplicator = MarketInfo ( "USDJPY" + currencyPairAppendix, MODE_BID );
  86.    if ( AccountCurrency() == "CAD" )
  87.                 multiplicator = MarketInfo ( "USDCAD" + currencyPairAppendix, MODE_BID );               
  88.    if ( multiplicator == 0 )
  89.            multiplicator = 1.0; // If account currency is neither of EUR, GBP, AUD, NZD, CHF, JPY or CAD we assumes that it is USD
  90.         return ( multiplicator );
  91. }
  92. double CalculateLotSize(string argSymbol, double argRiskDecimal, int argStoplossPoints, int argExtraPriceGapPoints, double argAllowedMaxLotSize)
  93. {
  94.    // Calculate LotSize based on Equity, Risk in decimal and StopLoss in points
  95.    double _availableMoney, _maxLotByEquity, _maxLot, _minLot, _lotSize1, _lotSize2, _lotSize;
  96.         int _lotdigit = 2;
  97.           
  98.    // Calculate margin required for 1 lot
  99.    double _marginForOneLot = MarketInfo(argSymbol, MODE_MARGINREQUIRED);
  100.    // Step in lot size changing
  101.    double _lotStep = MarketInfo(argSymbol, MODE_LOTSTEP);
  102.         // Amount of money in base currency for 1 lot
  103.         double _lotBase = MarketInfo ( Symbol(), MODE_LOTSIZE );
  104.        
  105.         if ( _lotStep ==  1)
  106.                 _lotdigit = 0;
  107.         if ( _lotStep == 0.1 )       
  108.                 _lotdigit = 1;
  109.    if ( _lotStep == 0.01 )
  110.                 _lotdigit = 2;
  111.         // Get available money as Equity
  112.         _availableMoney = AccountEquity();
  113.         // Maximum allowed Lot by the broker according to Equity. And we don't use 100% but 98%
  114.         _maxLotByEquity = MathFloor(_availableMoney * 0.98 / _marginForOneLot / _lotStep) * _lotStep;
  115.         _maxLot = MathMin(_maxLotByEquity, MathMin(argAllowedMaxLotSize, MarketInfo(argSymbol, MODE_MAXLOT)));
  116.         // Minimum allowed Lot by the broker
  117.         _minLot = MarketInfo(argSymbol, MODE_MINLOT);
  118.         // Lot according to Risk.
  119.         _lotSize1 = MathFloor ( argRiskDecimal * _availableMoney / ( argStoplossPoints + argExtraPriceGapPoints ) / _lotStep ) * _lotStep;
  120.    _lotSize2 = _lotSize1 * Multiplicator("");
  121.    _lotSize = MathMax(MathMin(_lotSize2, _maxLot), _minLot);
  122.         _lotSize = NormalizeDouble (_lotSize, _lotdigit);
  123.         return ( _lotSize );
  124. }
  125. void DisplayText(string objname,string objtext,int clr,int x,int y,int corner) {
  126.    if(ObjectFind(objname)==-1) {
  127.       ObjectCreate(objname,OBJ_LABEL,0,0,0);
  128.       ObjectSet(objname,OBJPROP_CORNER,corner);
  129.       ObjectSet(objname,OBJPROP_XDISTANCE,x);
  130.       ObjectSet(objname,OBJPROP_YDISTANCE,y);
  131.    }
  132.    ObjectSetText(objname,objtext,18,"Arial",clr);
  133. }
复制代码

资金管理指标.mq4

11.85 KB, 下载次数: 18, 下载积分: 活跃度 -5  [下载]

评分
  • 1
  • 2
  • 3
  • 4
  • 5
平均分:NAN    参与人数:0    我的评分:未评 下载时遇到问题?
如果有帮助,就支持一下我呗
举报

评论 使用道具

精彩评论38

ljl1212004
DD
| 发表于 2020-8-10 12:52:43 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

gao0204
D
| 发表于 2020-8-10 16:54:01 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

摩羯羽人
DDD
| 发表于 2020-8-10 18:59:28 | 显示全部楼层
感谢分享!适合于改写成为一个自定义函数,嵌入到EA当中
举报

点赞 评论 使用道具

liuzizai
DDD
| 发表于 2020-8-10 21:25:49 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

天堂鸟
D
| 发表于 2020-9-16 00:41:03 | 显示全部楼层
这个非常有用
举报

点赞 评论 使用道具

thekof32
CC
| 发表于 2021-3-1 08:47:53 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

ASKARJAN
DD
| 发表于 2021-3-2 18:15:44 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

cavinHuang
DD
| 发表于 2021-3-19 10:29:46 | 显示全部楼层
这个非常有用
举报

点赞 评论 使用道具

latage
未及格
| 发表于 2021-3-20 14:19:19 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

haighs
DDD
| 发表于 2021-3-20 19:44:38 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

JOKEEBOSS
DD
| 发表于 2021-3-20 23:22:10 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

307484565
CC
| 发表于 2021-3-21 02:01:48 | 显示全部楼层
谢谢分享
举报

点赞 评论 使用道具

peng16813
DD
| 发表于 2021-5-10 00:34:17 | 显示全部楼层
感谢分享感谢分享
举报

点赞 评论 使用道具

jongjongyoshen
D
| 发表于 2021-5-10 08:26:24 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

升龙
DD
| 发表于 2021-5-10 11:33:21 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

lxh122
DD
| 发表于 2021-5-11 23:32:14 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

addat
DD
| 发表于 2021-5-16 13:15:38 | 显示全部楼层
感谢分享感谢分享
举报

点赞 评论 使用道具

欧啦啦
未及格
| 发表于 2021-8-29 11:00:54 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

tianping
DDD
| 发表于 2021-8-29 15:42:42 | 显示全部楼层
感谢分享
举报

点赞 评论 使用道具

12下一页
发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)