路路发智能交易

 找回密码
 立即注册
查看: 1952|回复: 0

MT4智能交易编程示例 Exposure指标

[复制链接]

管理员

MT4软件工程师

Rank: 9Rank: 9Rank: 9

积分
6546
帖子
2772
主题
2762
QQ
发表于 2014-4-4 14:37:59 | 显示全部楼层 |阅读模式
MT4智能交易编程示例 Exposure指标
  1. #property copyright   "路路发智能交易研发中心"
  2. #property link        "http://www.ea668.com"

  3. #property strict

  4. #property indicator_separate_window
  5. #property indicator_buffers 1
  6. #property indicator_minimum 0.0
  7. #property indicator_maximum 0.1

  8. #define SYMBOLS_MAX 1024
  9. #define DEALS          0
  10. #define BUY_LOTS       1
  11. #define BUY_PRICE      2
  12. #define SELL_LOTS      3
  13. #define SELL_PRICE     4
  14. #define NET_LOTS       5
  15. #define PROFIT         6

  16. input color InpColor=LightSeaGreen;  // Text color

  17. string ExtName="Exposure";
  18. string ExtSymbols[SYMBOLS_MAX];
  19. int    ExtSymbolsTotal=0;
  20. double ExtSymbolsSummaries[SYMBOLS_MAX][7];
  21. int    ExtLines=-1;
  22. string ExtCols[8]={"Symbol",
  23.                    "Deals",
  24.                    "Buy lots",
  25.                    "Buy price",
  26.                    "Sell lots",
  27.                    "Sell price",
  28.                    "Net lots",
  29.                    "Profit"};
  30. int    ExtShifts[8]={ 10, 80, 130, 180, 260, 310, 390, 460 };
  31. int    ExtVertShift=14;
  32. double ExtMapBuffer[];
  33. //+------------------------------------------------------------------+
  34. //| Custom indicator initialization function                         |
  35. //+------------------------------------------------------------------+
  36. void OnInit()
  37.   {
  38.         IndicatorShortName(ExtName);
  39.    SetIndexBuffer(0,ExtMapBuffer);
  40.    SetIndexStyle(0,DRAW_NONE);
  41.    IndicatorDigits(0);
  42.         SetIndexEmptyValue(0,0.0);
  43.   }
  44. //+------------------------------------------------------------------+
  45. //|                                                                  |
  46. //+------------------------------------------------------------------+
  47. void OnDeinit(const int reason)
  48.   {
  49.    int windex=WindowFind(ExtName);
  50.    if(windex>0)
  51.       ObjectsDeleteAll(windex);
  52.   }
  53. //+------------------------------------------------------------------+
  54. //| Custom indicator iteration function                              |
  55. //+------------------------------------------------------------------+
  56. int OnCalculate(const int rates_total,
  57.                 const int prev_calculated,
  58.                 const datetime &time[],
  59.                 const double &open[],
  60.                 const double &high[],
  61.                 const double &low[],
  62.                 const double &close[],
  63.                 const long& tick_volume[],
  64.                 const long& volume[],
  65.                 const int& spread[])
  66.   {
  67.    string name;
  68.    int    i,col,line,windex=WindowFind(ExtName);
  69. //----
  70.    if(windex<0)
  71.       return(rates_total);
  72. //---- header line
  73.    if(ExtLines<0)
  74.      {
  75.       for(col=0; col<8; col++)
  76.         {
  77.          name="Head_"+string(col);
  78.          if(ObjectCreate(name,OBJ_LABEL,windex,0,0))
  79.            {
  80.             ObjectSet(name,OBJPROP_XDISTANCE,ExtShifts[col]);
  81.             ObjectSet(name,OBJPROP_YDISTANCE,ExtVertShift);
  82.             ObjectSetText(name,ExtCols[col],9,"Arial",InpColor);
  83.            }
  84.         }
  85.       ExtLines=0;
  86.      }
  87. //----
  88.    ArrayInitialize(ExtSymbolsSummaries,0.0);
  89.    int total=Analyze();
  90.    if(total>0)
  91.      {
  92.       line=0;
  93.       for(i=0; i<ExtSymbolsTotal; i++)
  94.         {
  95.          if(ExtSymbolsSummaries[i][DEALS]<=0) continue;
  96.          line++;
  97.          //---- add line
  98.          if(line>ExtLines)
  99.            {
  100.             int y_dist=ExtVertShift*(line+1)+1;
  101.             for(col=0; col<8; col++)
  102.               {
  103.                name="Line_"+string(line)+"_"+string(col);
  104.                if(ObjectCreate(name,OBJ_LABEL,windex,0,0))
  105.                  {
  106.                   ObjectSet(name,OBJPROP_XDISTANCE,ExtShifts[col]);
  107.                   ObjectSet(name,OBJPROP_YDISTANCE,y_dist);
  108.                  }
  109.               }
  110.             ExtLines++;
  111.            }
  112.          //---- set line
  113.          int    digits=(int)MarketInfo(ExtSymbols[i],MODE_DIGITS);
  114.          double buy_lots=ExtSymbolsSummaries[i][BUY_LOTS];
  115.          double sell_lots=ExtSymbolsSummaries[i][SELL_LOTS];
  116.          double buy_price=0.0;
  117.          double sell_price=0.0;
  118.          if(buy_lots!=0)  buy_price=ExtSymbolsSummaries[i][BUY_PRICE]/buy_lots;
  119.          if(sell_lots!=0) sell_price=ExtSymbolsSummaries[i][SELL_PRICE]/sell_lots;
  120.          name="Line_"+string(line)+"_0";
  121.          ObjectSetText(name,ExtSymbols[i],9,"Arial",InpColor);
  122.          name="Line_"+string(line)+"_1";
  123.          ObjectSetText(name,DoubleToStr(ExtSymbolsSummaries[i][DEALS],0),9,"Arial",InpColor);
  124.          name="Line_"+string(line)+"_2";
  125.          ObjectSetText(name,DoubleToStr(buy_lots,2),9,"Arial",InpColor);
  126.          name="Line_"+string(line)+"_3";
  127.          ObjectSetText(name,DoubleToStr(buy_price,digits),9,"Arial",InpColor);
  128.          name="Line_"+string(line)+"_4";
  129.          ObjectSetText(name,DoubleToStr(sell_lots,2),9,"Arial",InpColor);
  130.          name="Line_"+string(line)+"_5";
  131.          ObjectSetText(name,DoubleToStr(sell_price,digits),9,"Arial",InpColor);
  132.          name="Line_"+string(line)+"_6";
  133.          ObjectSetText(name,DoubleToStr(buy_lots-sell_lots,2),9,"Arial",InpColor);
  134.          name="Line_"+string(line)+"_7";
  135.          ObjectSetText(name,DoubleToStr(ExtSymbolsSummaries[i][PROFIT],2),9,"Arial",InpColor);
  136.         }
  137.      }
  138. //---- remove lines
  139.    if(total<ExtLines)
  140.      {
  141.       for(line=ExtLines; line>total; line--)
  142.         {
  143.          name="Line_"+string(line)+"_0";
  144.          ObjectSetText(name,"");
  145.          name="Line_"+string(line)+"_1";
  146.          ObjectSetText(name,"");
  147.          name="Line_"+string(line)+"_2";
  148.          ObjectSetText(name,"");
  149.          name="Line_"+string(line)+"_3";
  150.          ObjectSetText(name,"");
  151.          name="Line_"+string(line)+"_4";
  152.          ObjectSetText(name,"");
  153.          name="Line_"+string(line)+"_5";
  154.          ObjectSetText(name,"");
  155.          name="Line_"+string(line)+"_6";
  156.          ObjectSetText(name,"");
  157.          name="Line_"+string(line)+"_7";
  158.          ObjectSetText(name,"");
  159.         }
  160.      }
  161. //---- to avoid minimum==maximum
  162.    ExtMapBuffer[Bars-1]=-1;
  163. //----
  164.    return(rates_total);
  165.   }
  166. //+------------------------------------------------------------------+
  167. //|                                                                  |
  168. //+------------------------------------------------------------------+
  169. int Analyze()
  170.   {
  171.    double profit;
  172.    int    i,index,type,total=OrdersTotal();
  173. //----
  174.    for(i=0; i<total; i++)
  175.      {
  176.       if(!OrderSelect(i,SELECT_BY_POS)) continue;
  177.       type=OrderType();
  178.       if(type!=OP_BUY && type!=OP_SELL) continue;
  179.       index=SymbolsIndex(OrderSymbol());
  180.       if(index<0 || index>=SYMBOLS_MAX) continue;
  181.       //----
  182.       ExtSymbolsSummaries[index][DEALS]++;
  183.       profit=OrderProfit()+OrderCommission()+OrderSwap();
  184.       ExtSymbolsSummaries[index][PROFIT]+=profit;
  185.       if(type==OP_BUY)
  186.         {
  187.          ExtSymbolsSummaries[index][BUY_LOTS]+=OrderLots();
  188.          ExtSymbolsSummaries[index][BUY_PRICE]+=OrderOpenPrice()*OrderLots();
  189.         }
  190.       else
  191.         {
  192.          ExtSymbolsSummaries[index][SELL_LOTS]+=OrderLots();
  193.          ExtSymbolsSummaries[index][SELL_PRICE]+=OrderOpenPrice()*OrderLots();
  194.         }
  195.      }
  196. //----
  197.    total=0;
  198.    for(i=0; i<ExtSymbolsTotal; i++)
  199.      {
  200.       if(ExtSymbolsSummaries[i][DEALS]>0) total++;
  201.      }
  202. //----
  203.    return(total);
  204.   }
  205. //+------------------------------------------------------------------+
  206. //|                                                                  |
  207. //+------------------------------------------------------------------+
  208. int SymbolsIndex(string SymbolName)
  209.   {
  210.    bool found=false;
  211.    int  i;
  212. //----
  213.    for(i=0; i<ExtSymbolsTotal; i++)
  214.      {
  215.       if(SymbolName==ExtSymbols[i])
  216.         {
  217.          found=true;
  218.          break;
  219.         }
  220.      }
  221. //----
  222.    if(found)
  223.       return(i);
  224.    if(ExtSymbolsTotal>=SYMBOLS_MAX)
  225.       return(-1);
  226. //----
  227.    i=ExtSymbolsTotal;
  228.    ExtSymbolsTotal++;
  229.    ExtSymbols[i]=SymbolName;
  230.    ExtSymbolsSummaries[i][DEALS]=0;
  231.    ExtSymbolsSummaries[i][BUY_LOTS]=0;
  232.    ExtSymbolsSummaries[i][BUY_PRICE]=0;
  233.    ExtSymbolsSummaries[i][SELL_LOTS]=0;
  234.    ExtSymbolsSummaries[i][SELL_PRICE]=0;
  235.    ExtSymbolsSummaries[i][NET_LOTS]=0;
  236.    ExtSymbolsSummaries[i][PROFIT]=0;
  237. //----
  238.    return(i);
  239.   }
  240. //+------------------------------------------------------------------+
复制代码




外汇智能交易,成就财富梦想!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


MT4编程培训|EA定制开发|QQ在线咨询|路路发智能交易 ( 沪ICP备13011711号-1 )

苏公网安备 32021102000151号

GMT+8, 2019-10-23 19:20 , Processed in 1.218750 second(s), 26 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表