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

    MT5当前品种持仓统计指标源码

    m1800 LV9
    2024-07-22 · 2927 阅读
    本帖最后由 m1800 于 2024-7-22 18:45 编辑
    1. <font _mstmutation="1" _msttexthash="3642565182945" _msthash="240">#property 版权所有“https://fx8910.com
    2. ”#property 版本“2.2”
    3. #property 说明“
    4. #property 说明”QQ:14060258“
    5. #property 说明”“
    6. #property 说明”2023/09/06“
    7. #property indicator_separate_window
    8. #include < Trade\PositionInfo.mqh>
    9. CPositionInfo m_position;交易头寸对象
    10. datetime new_k=-1;
    11. int cnt,mt=10;
    12. int OnInit()
    13. {
    14. if(_Digits==3 || _Digits==5)
    15. {
    16. mt=10;

    17. 否则
    18. {
    19. mt=1;

    20. int myWindowsHandle = WindowFindxt(MQLInfoString(MQL_PROGRAM_NAME));获取当前指标名称所在窗口序号
    21. ObjectsDeleteAll(0,myWindowsHandle, OBJ_LABEL);
    22. new_k=-1;
    23. 返回(0);
    24. }
    25. +------------------------------------------------------------------+
    26. | |
    27. +------------------------------------------------------------------+
    28. int deinit()
    29. {
    30. int myWindowsHandle = WindowFindxt(MQLInfoString(MQL_PROGRAM_NAME)); //获取当前指标名称所在窗口序号
    31. ObjectsDeleteAll(0,myWindowsHandle, OBJ_LABEL);
    32. return(0);
    33. }

    34. +------------------------------------------------------------------+
    35. | |
    36. +------------------------------------------------------------------+
    37. int WindowFindxt(string name)
    38. {
    39. if((ENUM_PROGRAM_TYPE)MQLInfoInteger(MQL_PROGRAM_TYPE) == PROGRAM_INDICATOR)
    40. {
    41. return(ChartWindowFind());

    42. else
    43. {
    44. return(ChartWindowFind(0, name));


    45. 返回(-1);
    46. }


    47. /*
    48. 函 数:显示订单状态
    49. 输入参数:
    50. 输出参数:
    51. */
    52. void iOrdersStatus()
    53. {
    54. 清除标签
    55. int myWindowsHandle = WindowFindxt(MQLInfoString(MQL_PROGRAM_NAME)); //获取当前指标名称所在窗口序号
    56. int myBuyOrder_y = 40;
    57. int mySellOrder_y = 40;
    58. double myBuyLots=0, mySellLots=0, myBuyProfit=0, mySellProfit=0,myBuyPoint=0,mySellPoint=0;
    59. 双倍 myBuyLossRate=0, mySellLossRate=0, myTotalLossRate=0;亏损率
    60. int myBuyOrders=0, mySellOrders=0;
    61. 显示持仓单信息:单号 盈亏
    62. if(PositionsTotal() > 0)
    63. {
    64. for(cnt = 0; cnt <=PositionsTotal()-1; cnt++)
    65. {
    66. if(m_position.SelectByIndex(cnt) &&m_position。符号() == _Symbol)
    67. {
    68. if(m_position.PositionType() ==POSITION_TYPE_BUY/*||OrderType() == OP_BUYLIMIT*/)
    69. {
    70. string tp=DoubleToString(fabs(m_position.PriceOpen()- m_position。止盈())/_Point/吨,0);
    71. string sl=DoubleToString(fabs(m_position.PriceOpen()- m_position。止损())/_Point/mt,0);
    72. iDisplayInfo(m_position.Ticket()、m_position。Ticket()+“ ”+DoubleToString(m_position.Volume(), 2)+“ ”+DoubleToString(m_position.profit(), 2)+“ TP:”+tp+“ SL:”+sl, 1, 20, myBuyOrder_y, 10, “Arial”, iObjectColor(m_position.利润()));
    73. myBuyOrder_y = myBuyOrder_y + 15;
    74. myBuyLots = myBuyLots + m_position。音量();
    75. myBuyProfit = myBuyProfit + m_position。利润();
    76. 我的买盘 = 我的买盘 + 1;
    77. 我的购买点 = myBuyPoint+NormalizeDouble((SymbolInfoDouble(NULL,SYMBOL_BID)-m_position。PriceOpen())/_Point/mt,1);
    78. }
    79. if(m_position.PositionType() == POSITION_TYPE_SELL/*||OrderType() == OP_SELLLIMIT*/)
    80. {
    81. string tpx=DoubleToString(fabs(m_position.PriceOpen()- m_position。止盈())/_Point/吨,0);
    82. string slx=DoubleToString(fabs(m_position.PriceOpen()- m_position。止损())/_Point/mt,0);
    83. iDisplayInfo(m_position.Ticket()、m_position。Ticket()+“ ”+DoubleToString(m_position.Volume(), 2)+“ ”+DoubleToString(m_position.Profit(), 2)+“ TP:”+tpx+“ SL:”+slx, 1, 280, mySellOrder_y, 10, “Arial”, iObjectColor(m_position.利润()));
    84. mySellOrder_y = mySellOrder_y + 15;
    85. mySellLots = mySellLots + m_position。音量();
    86. mySellProfit = mySellProfit + m_position。利润();
    87. 我的卖出订单 = 我的卖出订单 + 1;
    88. mySellPoint = mySellPoint+NormalizeDouble((m_position.PriceOpen()-SymbolInfoDouble(NULL,SYMBOL_ASK))/_Point/mt,1);
    89. }
    90. }

    91. }
    92. //AccountBalance()
    93. double myTotalLots = myBuyLots + mySellLots;
    94. 双倍 myTotalProfit = myBuyProfit + mySellProfit;
    95. double myTotalPoint=mySellPoint+myBuyPoint;
    96. int myTotalOrders = myBuyOrders + mySellOrders;
    97. if(myBuyLots != 0)
    98. myBuyLossRate = 100*(myBuyProfit/AccountInfoDouble(ACCOUNT_BALANCE));
    99. if(mySellLots != 0)
    100. mySellLossRate = 100*(mySellProfit/AccountInfoDouble(ACCOUNT_BALANCE));
    101. if(myTotalLots != 0)
    102. myTotalLossRate = 100*(myTotalProfit/AccountInfoDouble(ACCOUNT_BALANCE));
    103. if(myBuyOrders+mySellOrders>0)
    104. iDisplayInfo(“INDSymbol”, _Symbol+“ ”+myTotalOrders+“ ”+DoubleToString(myTotalLots, 2)+“ 手, $”+DoubleToString(myTotalProfit, 2)+“, ”+DoubleToString(myTotalPoint/(myBuyOrders+mySellOrders),1)+“点,”+“ ”+DoubleToString(myTotalLossRate, 2)+“%”, 1, 50, 1, 12, “Arial Bold”, DodgerBlue);
    105. //按买卖单显示持仓量、盈亏
    106. if (myBuyOrders>0) iDisplayInfo(_Symbol+“BUY”, myBuyOrders+“ ”+DoubleToString(myBuyLots, 2)+“ ”+DoubleToString(myBuyProfit, 2)+“ ”+DoubleToString(myBuyLossRate, 2)+“%”, 1, 20, 20, 10, “Arial”, iObjectColor(myBuyProfit));
    107. if (mySellOrders>0) iDisplayInfo(_Symbol+“SELL”, mySellOrders+“ ”+DoubleToString(mySellLots, 2)+“ ”+DoubleToString(mySellProfit, 2)+“ ”+DoubleToString(mySellLossRate, 2)+“%”, 1, 280, 20, 10, “Arial”, iObjectColor(mySellProfit));
    108. }
    109. 返回;
    110. }
    111. /*
    112. 函 数:在屏幕上显示文字标签
    113. 输入参数:string LableName 标签名称,如果显示多个文本,名称不能相同
    114. string LableDoc 文本内容
    115. int Corner 文本显示角
    116. int LableX 标签X位置坐标
    117. int LableY 标签Y位置坐标
    118. int DocSize 文本字号
    119. string DocStyle 文本字体
    120. color DocColor 文本颜色
    121. 输出参数:在指定的位置(X,Y)按照指定的字号、字体及颜色显示指定的文本
    122. 算法说明:
    123. */
    124. void iDisplayInfo(string LableName,string LableDoc,int Corner,int LableX,int LableY,int DocSize,string DocStyle,color DocColor)
    125. {
    126. int myWindowsHandle= WindowFindxt(MQLInfoString(MQL_PROGRAM_NAME));
    127. if (ObjectFind(myWindowsHandle,LableName)<0)
    128. {
    129. ObjectCreate(0,LableName, OBJ_LABEL, myWindowsHandle, 0, 0);<b1137> }
    130. ObjectSetTextxt(LableName, LableDoc, DocSize, DocStyle,DocColor);

    131. --- 设置相对于定义点坐标的图表的角
    132. //ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
    133. ObjectSetInteger(0,LableName, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
    134. --- 设置定位类型
    135. ObjectSetInteger(0,LableName,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
    136. ObjectSetInteger(0,LableName, OBJPROP_XDISTANCE, LableX);
    137. ObjectSetInteger(0,LableName, OBJPROP_YDISTANCE, LableY);
    138. 返回;
    139. }

    140. /*
    141. 函 数:物件颜色
    142. 输入参数:数值
    143. 输出参数:颜色
    144. 算 法:负数为红色,正数为绿色,0为灰色
    145. */
    146. color iObjectColor(double myInput)
    147. {
    148. color myColor=clrGreen;
    149. if(myInput > 0)
    150. myColor = Green; //正数颜色为绿色
    151. if(myInput < 0)
    152. myColor = Red; //负数颜色为红色
    153. if(myInput == 0)
    154. myColor = 深灰色;0颜色为灰色
    155. return(myColor);
    156. }
    157. +------------------------------------------------------------------+
    158. | |
    159. +------------------------------------------------------------------+
    160. int OnCalculate(const int rates_total, // 当前分时时的历史柱数
    161. const int prev_calculated,// 上一个分时时的历史柱线数量
    162. const datetime &time[],
    163. const double &open[],
    164. const double &high[],
    165. const double &low[],
    166. const double &close[],
    167. const long &tick_volume[],
    168. const long &volume[],
    169. const int &spread[])
    170. {
    171. if (new_k!=iTime(NULL,0,0))
    172. {
    173. int myWindowsHandle = WindowFindxt(MQLInfoString(MQL_PROGRAM_NAME)); //获取当前指标名称所在窗口序号
    174. ObjectsDeleteAll(0,myWindowsHandle, OBJ_LABEL);
    175. // Print(“aaaa”);
    176. new_k=iTime(NULL,0,0);
    177. }
    178. iOrdersStatus();
    179. 返回(rates_total);
    180. }
    181. +------------------------------------------------------------------+
    182. | |
    183. +------------------------------------------------------------------+
    184. bool ObjectSetxt(string object_name, int index, double value)
    185. {
    186. switch(index)
    187. {
    188. case 0: // OBJPROP_TIME1
    189. return(ObjectSetInteger(0, object_name, OBJPROP_TIME, (int)value));
    190. case 1: // OBJPROP_PRICE1
    191. return(ObjectSetDouble(0, object_name, OBJPROP_PRICE, value));
    192. case 2: // OBJPROP_TIME2
    193. return(ObjectSetInteger(0, object_name, OBJPROP_TIME, 1, (int)value));
    194. case 3: // OBJPROP_PRICE2
    195. return(ObjectSetDouble(0, object_name, OBJPROP_PRICE, 1, value));
    196. 案例 4: // OBJPROP_TIME3
    197. return(ObjectSetInteger(0, object_name, OBJPROP_TIME, 2, (int)value));
    198. case 5: // OBJPROP_PRICE3
    199. return(ObjectSetDouble(0, object_name, OBJPROP_PRICE, 2, value));
    200. case 6: // OBJPROP_COLOR
    201. return(ObjectSetInteger(0, object_name, OBJPROP_COLOR, (int)value));
    202. 案例 7: // OBJPROP_STYLE
    203. return(ObjectSetInteger(0, object_name, OBJPROP_STYLE, (int)value));
    204. case 8: // OBJPROP_WIDTH
    205. return(ObjectSetInteger(0, object_name, OBJPROP_WIDTH, (int)value));
    206. case 9: // OBJPROP_BACK
    207. return(ObjectSetInteger(0, object_name, OBJPROP_BACK, (int)value));
    208. case 10: // OBJPROP_RAY
    209. return(ObjectSetInteger(0, object_name, OBJPROP_RAY_RIGHT, (int)value));
    210. case 11: // OBJPROP_ELLIPSE
    211. return(ObjectSetInteger(0, object_name, OBJPROP_ELLIPSE, (int)value));
    212. case 12: // OBJPROP_SCALE
    213. return(ObjectSetDouble(0, object_name, OBJPROP_SCALE, value));
    214. case 13: // OBJPROP_ANGLE
    215. return(ObjectSetDouble(0, object_name, OBJPROP_ANGLE, value));
    216. case 14: // OBJPROP_ARROWCODE
    217. return(ObjectSetInteger(0, object_name, OBJPROP_ARROWCODE, (int)value));
    218. case 15: // OBJPROP_TIMEFRAMES
    219. return(ObjectSetInteger(0, object_name, OBJPROP_TIMEFRAMES, (int)value));
    220. case 16: // OBJPROP_DEVIATION
    221. return(ObjectSetDouble(0, object_name, OBJPROP_DEVIATION, value));
    222. case 100: // OBJPROP_FONTSIZE
    223. return(ObjectSetInteger(0, object_name, OBJPROP_FONTSIZE, (int)value));
    224. case 101: // OBJPROP_CORNER
    225. return(ObjectSetInteger(0, object_name, OBJPROP_CORNER, (int)value));
    226. case 102: // OBJPROP_XDISTANCE
    227. return(ObjectSetInteger(0, object_name, OBJPROP_XDISTANCE, (int)value));
    228. case 103: // OBJPROP_YDISTANCE
    229. return(ObjectSetInteger(0, object_name, OBJPROP_YDISTANCE, (int)value));
    230. case 200: // OBJPROP_FIBOLEVELS
    231. return(ObjectSetInteger(0, object_name, OBJPROP_LEVELS, (int)value));
    232. case 201: // OBJPROP_LEVELCOLOR
    233. return(ObjectSetInteger(0, object_name, OBJPROP_LEVELCOLOR, (int)value));
    234. case 202: // OBJPROP_LEVELSTYLE
    235. return(ObjectSetInteger(0, object_name, OBJPROP_LEVELSTYLE, (int)value));
    236. case 203: // OBJPROP_LEVELWIDTH
    237. return(ObjectSetInteger(0, object_name, OBJPROP_LEVELWIDTH, (int)value));
    238. }
    239. 返回(false);
    240. }
    241. +------------------------------------------------------------------+
    242. | |
    243. +------------------------------------------------------------------+
    244. bool ObjectSetTextxt(string object_name, string text, int font_size=0, string font_name=NULL, color text_color=clrNONE)
    245. {
    246. int type = (int)ObjectGetInteger(0, object_name, OBJPROP_TYPE);

    247. if(type != OBJ_LABEL &&; type != OBJ_TEXT)
    248. {
    249. return(false);


    250. if(StringLen(text) > 0 && font_size > 0)
    251. {
    252. if(!ObjectSetString(0, object_name, OBJPROP_TEXT, text))
    253. {
    254. return(false);

    255. 如果(!ObjectSetInteger(0, object_name, OBJPROP_FONTSIZE, font_size))
    256. {
    257. return(false);

    258. }
    259. if(font_name != NULL)
    260. {
    261. if(!ObjectSetString(0, object_name, OBJPROP_FONT, font_name))
    262. {
    263. return(false);

    264. }

    265. if(text_color != clrNONE)
    266. {
    267. if(!ObjectSetInteger(0, object_name, OBJPROP_COLOR, text_color))
    268. {
    269. return(false);


    270. }
    271. return(true);</font>
    272.   }
    273. //+------------------------------------------------------------------+
    复制代码

    MT5当前品种持仓统计指标,可与面板或其它副图指标叠加使用.


    ""
    还没有人打赏,支持一下
    回复

    举报

     

    回答|共 5 个

    博汇投资 LV2

    发表于 2025-3-11 23:52:46 | 显示全部楼层

    谢谢

    雨量 LV1

    发表于 2025-4-5 16:01:12 | 显示全部楼层

    谢谢

    刘兴 LV1

    发表于 2025-4-11 18:11:38 | 显示全部楼层

    支持下

    zixuanyu7 LV3

    发表于 2025-12-23 16:50:03 | 显示全部楼层

    楼主,能分一下多单、空单分别统计吗
    您需要登录后才可以回帖 登录 | 注册

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

    微信二维码

    有问题联系客服