2评论

2收藏

求助快速下单按键EA获取输入框的值报警怎么解决

avatar 易术加 | 987 人阅读 | 2 人评论 | 2020-02-07

快速下单按键EA在获取输入框的值的时候出错,求大神帮忙解决,报错如图
  1. //+------------------------------------------------------------------+
  2. //|                                                       快速下单模块.mq4 |
  3. //|                                                              易术加 |
  4. //|                                             https://www.mql5.com |
  5. //+------------------------------------------------------------------+
  6. #property copyright "易术加"
  7. #property link      "https://www.mql5.com"
  8. #property version   "1.00"
  9. #property strict
  10. double 下单量;
  11. string 货币对;
  12. double 最大下单量;
  13. double 止损点数,止损价格,止损价格1;
  14. double 止盈点数,止盈价格,止盈价格1;
  15. int MAGIC=100;int ticket;int 滑点;
  16. bool 启动警报=false;
  17. double BUYSTOP点数距离=500;
  18. double BUYLIMIT点数距离=500;
  19. double SELLSTOP点数距离=500;
  20. double SELLLIMIT点数距离=500;

  21. double 历史总下单=0,历史总盈=0,历史下单量=0,历史盈亏=0;



  22. int     指定货币已平买单数;//   mbbo指定货币对已平仓买单的数量
  23. double  指定货币已平买单总盈亏; //mbbprofito;指定货币对已平仓的买单的盈亏之和
  24. int     指定货币已平卖单数;//  msso;指定货币对已平仓卖单的数量
  25. double  指定货币已平卖单总盈亏;// mssprofito;      //指定货币对已平仓的卖单的盈亏之和
  26. int     指定M已开买单总和;   //bb;//指定MAGIC数值已开仓的买单数量之和(不区分货币对)
  27. double  指定M已开买单总盈亏;//bbprofit ;      // 指定MAGIC数值已开仓的买单盈亏之和(不区分货币对)
  28. int     指定M已开卖单总和;  //ss;             //指定MAGIC数值已开仓的卖单数量之和(不区分货币对)
  29. double  指定M已开卖单总盈亏;//ssprofit;       // 指定MAGIC数值已开仓的卖单盈亏之和(不区分货币对)
  30. int     已开买单总数;       //bbl;//已开仓的买单数量之和(不区分货币对)
  31. double     已开买单总盈亏;       //bbprofitl;//已开仓的买单盈亏之和(不区分货币对)
  32. int     已开卖单总数;//ssl;             //已开仓的卖单数量之和(不区分货币对)
  33. double  已开卖单总盈亏; //ssprofitl;       //已开仓的卖单盈亏之和(不区分货币对)
  34. int     未删SS挂单总数;//ossa;            //所有未删除的SELLSTOP挂单的数量(不区分货币对)
  35. int     未删SL挂单总数;//osla;            //所有未删除的SELLLIMIT挂单的数量(不区分货币对)
  36. int     未删BS挂单总数;//obsa;             //所有未删除的BUYSTOP挂单的数量(不区分货币对)
  37. int     未删BL挂单总数;//obla;             //所有未删除的BUYLIMIT挂单的数量(不区分货币对)
  38. int     未平盈单数总和;//Twbs;             //所有未平的单子中盈利单子的数量之和(不区分货币对)
  39. double  未平盈单总盈亏;//Twin;            // 所有未平的单子中盈利单子的盈利之和,(不区分货币对)
  40. int     未平亏单数总和;//Tlbs;            //所有未平的单子中亏损单子的数量之和(不区分货币对)
  41. double  未平亏单总盈亏;// Tloss;           //所有未平的单子中亏损单子的亏损之和(不区分货币对)
  42. double  指定货币未平卖单总手数;//SLOTS;           //指定货币对所有未平的卖单下单量之和
  43. int     指定货币未平买单总和;// mbb;              //指定货币对所有未平的买单数量之和
  44. double  指定货币未平买单总盈;//mbbprofit;        //指定货币对所有未平的买单盈亏之和
  45. double  指定货币未平买单总手数;// BLOTS;            //指定货币对所有未平的买单下单量之和
  46. int     指定货币未平卖总和;//mss;              //指定货币对所有未平的卖单数量之和
  47. double  指定货币未平卖单总盈亏;//  mssprofit;        //指定货币对所有未平的卖单的盈亏之和////////////////////////
  48. int     指定货币SS挂单总和;//moss;             //指定货币对SELLSTOP挂单数量之和
  49. int     指定货币SL挂总和;//mosl;              //指定货币对SELLLIMIT挂单数量之和
  50. int     指定货币BS挂单总和;//mobs;              //指定货币对的BUYSTOP挂单数量之和
  51. int     指定货币BL挂单总和;//mobl;              //指定货币对的BUYLIMIT挂单数量之和
  52. double  指定货币总盈亏; //profitmm;          //指定货币对的总的盈亏
  53. double  未平订单总手数; //TOTALLOTS;         //所有未平的订单下单量之和
  54. double  定币定M未平卖单总手数;//TLOTSS;            //指定货币对指定MAGIC数值未平仓的卖单下单量之和
  55. int     定币定M未平卖总和;//s;                  //指定货币对指定MAGIC数值未平仓的卖单数量之和
  56. double  定币定M未平卖总盈亏;// sprofit;            //指定货币对指定MAGIC数值未平仓的卖单盈亏之和
  57. double  定币定M最近未平买单开盘价;//LastPricebuy;       //指定货币对指定MAGIC数值未平仓的最近买单的开盘价格
  58. double  定币定M最近未平卖单开盘价;//LastPricesell;      //指定货币对指定MAGIC数值未平仓的最近卖单的开盘价格
  59. double  定币定M未平买单总手数;// TLOTSB;             //指定货币对指定MAGIC数值未平仓的买单下单量之和
  60. int     定币定M未平买单总和;//b;                   //指定货币对指定MAGIC数值未平仓的买单数量之和
  61. double  定币定M最近未平卖单手数;//SLASTLOTS;            //指定货币对指定MAGIC数值未平仓的最近卖单下单量
  62. double  定币定M未平买总盈亏;//bprofit;           //指定货币对指定MAGIC数值未平仓的买单盈亏之和
  63. double  定币定M未平总手数;// TLOTS;             //指定货币对指定MAGIC数值未平仓的订单的下单量之和
  64. int     定币定M未删SS挂单总和;//oss;               //指定货币对指定MAGIC数值未删除的SELLSTOP挂单数量之和
  65. int     定币定M未删SL挂单总和;//osl;               //指定货币对指定MAGIC数值未删除的SELLLIMIT挂单数量之和
  66. int     定币定M未删BS挂单总和;//obs;                 //指定货币对指定MAGIC数值未删除的BUYSTOP挂单数量之和
  67. int     定币定M未删BL挂单总和;//obl;                 //指定货币对指定MAGIC数值未删除的BUYLIMIT挂单数量之和


  68. string 下买单;






  69. double BUYSTOP线条;


  70. double BUYLIMIT线条;

  71. double SELLSTOP线条;

  72. double SELLLIMIT线条;
  73. int 账户杠杆=AccountLeverage();
  74. double 账户余额=AccountBalance();
  75. double 账户净值=AccountEquity();
  76. double 账户可用保证金=AccountFreeMargin();
  77. double 账户已用保证金=AccountMargin();
  78. double 账户利润=AccountProfit();
  79. double 开盘价格=Open[0];//当前货币对当前周期第0根k线的开盘价,iOpen("EURUSD",PERIOD_H4,0)欧元兑美元4小时当前k线的开盘价.
  80. double 收盘价格=Close[0];
  81. double 最高价格=High[0];
  82. double 最低价格=Low[0];
  83. datetime 一根k线交易一单=0;

  84. //+------------------------------------------------------------------+
  85. //| Expert initialization function                                   |
  86. //+------------------------------------------------------------------+
  87. int OnInit()
  88.   {

  89.   
  90. 面板("背景",10,28,clrGainsboro,205,120);
  91. 输入框("下单量2",Black,20,72,"0.01",60,30,White);
  92. 输入框("止损2",Black,83,72,"100",60,30,White);
  93. 输入框("止盈2",Black,146,72,"200",60,30,White);

  94.    
  95. //---
  96.    return(INIT_SUCCEEDED);
  97.   }
  98. //+------------------------------------------------------------------+
  99. //| Expert deinitialization function                                 |
  100. //+------------------------------------------------------------------+
  101. void OnDeinit(const int reason)
  102.   {
  103. //--- destroy timer
  104.    EventKillTimer();
  105.    
  106.   }
  107. //+------------------------------------------------------------------+
  108. //| Expert tick function                                             |
  109. //+------------------------------------------------------------------+
  110. void OnTick()
  111.   {
  112.    按键("下单量1","单量","单量",20,40,60,30,0,Lime,Black,10);
  113.    按键("止损1","止损","止损",83,40,60,30,0,Lime,Black,10);
  114.    按键("止盈1","止盈","止盈",146,40,60,30,0,Lime,Black,10);
  115.    按键("BUY","BUY","BUY",20,104,80,30,0,Yellow,Black,10)
  116.    按键("SELL","SELL","SELL",126,104,80,30,0,Yellow,Black,10);
  117.      //如果按键BUY被按下
  118.       if(ObjectGetInteger(0,"BUY",OBJPROP_STATE)==1)
  119.        {
  120.         //获取输入框的值
  121.         
  122.          下单量=获取输入框的值("下单量2");
  123.          止盈点数=获取输入框的值("止盈2");
  124.          止损点数=获取输入框的值("止损2");
  125.          买上();
  126.          //完成卖单动作之后将按键弹起
  127.           ObjectGetInteger(0,"BUY",OBJPROP_STATE,false);
  128.        }
  129.          if(ObjectGetInteger(0,"SELL",OBJPROP_STATE)==1)
  130.            {
  131.             //获取输入框的值
  132.              下单量=获取输入框的值("下单量2");
  133.              止盈点数=获取输入框的值("止盈2");
  134.              止损点数=获取输入框的值("止损2");
  135.              卖下();
  136.               //完成卖单动作之后将按键弹起
  137.                ObjectSetInteger(0,"SELL",OBJPROP_STATE,false);
  138.            }
  139.   }
  140. //+------------------------------------------------------------------+
  141. //| Timer function                                                   |
  142. //+------------------------------------------------------------------+
  143. void OnTimer()
  144.   {
  145. //---
  146.    
  147.   }
  148. //+------------------------------------------------------------------+
  149. //| Tester function                                                  |
  150. //+------------------------------------------------------------------+
  151. double OnTester()
  152.   {
  153. //---
  154.    double ret=0.0;
  155. //---

  156. //---
  157.    return(ret);
  158.   }
  159. //+------------------------------------------------------------------+
  160. //| ChartEvent function                                              |
  161. //+------------------------------------------------------------------+
  162. void OnChartEvent(const int id,
  163.                   const long &lparam,
  164.                   const double &dparam,
  165.                   const string &sparam)
  166.   {
  167. //---
  168.    
  169.   }
  170. //+------------------------------------------------------------------+
  171. void 面板(string 面板名称,int X位置,int Y位置,color 背景颜色,int 面板长度,int 面板宽度)
  172.   {
  173. //如果没有面板,创建一个面版并设置以下内容
  174.    if(ObjectFind(0,面板名称)==-1)
  175.       ObjectCreate(0,面板名称,OBJ_EDIT,0,0,0);
  176. //设置面板的X坐标
  177.    ObjectSetInteger(0,面板名称,OBJPROP_XDISTANCE,X位置);
  178. //设置面板的Y坐标
  179.    ObjectSetInteger(0,面板名称,OBJPROP_YDISTANCE,Y位置);
  180. //设置面板的背景颜色
  181.    ObjectSetInteger(0,面板名称,OBJPROP_BGCOLOR,背景颜色);
  182.    ObjectSetInteger(0,面板名称,OBJPROP_SELECTED,   true);
  183. //设置面板背景显示与否

  184.    ObjectSetInteger(0,面板名称,OBJPROP_BACK,false);
  185. //设置面板长度
  186.    ObjectSetInteger(0,面板名称,OBJPROP_XSIZE,面板长度);
  187. //设置面板宽度
  188.    ObjectSetInteger(0,面板名称,OBJPROP_YSIZE,面板宽度);
  189.    ObjectSetString(0,面板名称,OBJPROP_FONT,"Arial");
  190.    ObjectSetString(0,面板名称,OBJPROP_TEXT,"0");
  191.    ObjectSetInteger(0,面板名称,OBJPROP_FONTSIZE,10);
  192.    ObjectSetInteger(0,面板名称,OBJPROP_COLOR,背景颜色);
  193.    ObjectSetInteger(0,面板名称,OBJPROP_BORDER_COLOR,clrKhaki);
  194.    ObjectSetInteger(0,面板名称,OBJPROP_ALIGN,ALIGN_LEFT);

  195.   }
  196.   
  197.   //---------------------------------------------------------------------
  198.   void 输入框(string 输入框名字,color 颜色,int X位置,int Y位置,string 初始内容,int 长度,int 宽度,color 背景颜色)
  199.   {
  200. //如果没有输入框,创建一个并设置以下内容
  201.    if(ObjectFind(0,输入框名字)==-1)
  202.       //创建输入框,类型为OBJ_EDIT""
  203.       ObjectCreate(0,输入框名字,OBJ_EDIT,0,0,0);
  204. //设置输入框的X坐标
  205.    ObjectSetInteger(0,输入框名字,OBJPROP_XDISTANCE,X位置);
  206. //设置输入框的Y坐标
  207.    ObjectSetInteger(0,输入框名字,OBJPROP_YDISTANCE,Y位置);
  208. //设置输入框的长度
  209.    ObjectSetInteger(0,输入框名字,OBJPROP_XSIZE,长度);
  210. //设置输入框的宽度
  211.    ObjectSetInteger(0,输入框名字,OBJPROP_YSIZE,宽度);
  212. //设置输入文字大小
  213.    ObjectSetInteger(0,输入框名字,OBJPROP_FONTSIZE,10);
  214. //设置输入框的输入文字的对齐方式
  215.    ObjectSetInteger(0,输入框名字,OBJPROP_ALIGN,ALIGN_CENTER);
  216. //设置输入框的只读方式
  217.    ObjectSetInteger(0,输入框名字,OBJPROP_READONLY,false);
  218. //设置输入框的字体颜色
  219.    ObjectSetInteger(0,输入框名字,OBJPROP_COLOR,颜色);
  220. //设置输入框的背景颜色
  221.    ObjectSetInteger(0,输入框名字,OBJPROP_BGCOLOR,背景颜色);
  222. //设置输入框的边框颜色
  223.    ObjectSetInteger(0,输入框名字,OBJPROP_BORDER_COLOR,White);
  224. //设置输入框是否显示背景
  225.    ObjectSetInteger(0,输入框名字,OBJPROP_BACK,false);
  226. //设置输入框初始的显示文本
  227.    ObjectSetString(0,输入框名字,OBJPROP_TEXT,初始内容);

  228.   }
  229.   
  230.   //-----------------------------------------------------------------
  231.   
  232.   void 按键(string 按键名字,string txt1,string txt2,int X位置,int Y位置,int 长度,int 宽度,int 角落位置,color 颜色1,color 颜色2,int 字号)
  233.   {
  234. //如果没有按键,则创建一个并设置以下内容
  235.    if(ObjectFind(0,按键名字)==-1)
  236.       //创建一个"OBJ_BUTTON"类型的按键
  237.       ObjectCreate(0,按键名字,OBJ_BUTTON,0,0,0);
  238. //设置按键的X坐标
  239.    ObjectSetInteger(0,按键名字,OBJPROP_XDISTANCE,X位置);
  240. //设置按键的Y坐标
  241.    ObjectSetInteger(0,按键名字,OBJPROP_YDISTANCE,Y位置);
  242. //设置按键的长度
  243.    ObjectSetInteger(0,按键名字,OBJPROP_XSIZE,长度);
  244. //设置按键的宽度
  245.    ObjectSetInteger(0,按键名字,OBJPROP_YSIZE,宽度);
  246. //设置按键上面的字体
  247.    ObjectSetString(0,按键名字,OBJPROP_FONT,"微软雅黑");
  248. //设置按键上文字的大小
  249.    ObjectSetInteger(0,按键名字,OBJPROP_FONTSIZE,字号);
  250. //设置按键的角落位置
  251.    ObjectSetInteger(0,按键名字,OBJPROP_CORNER,角落位置);
  252. //设置在图表中优先接收鼠标点击事件
  253.    ObjectSetInteger(0,按键名字,OBJPROP_ZORDER,0);
  254. //如果按键被按下,则设置以下内容
  255.    if(ObjectGetInteger(0,按键名字,OBJPROP_STATE)==1)//如果按键被按下
  256.      {
  257.       //如果按键被按下,则设置按键上文字颜色
  258.       ObjectSetInteger(0,按键名字,OBJPROP_COLOR,颜色1);
  259.       //如果按键被按下,则设置按键的背景颜色
  260.       ObjectSetInteger(0,按键名字,OBJPROP_BGCOLOR,颜色2);
  261.       //如果按键被按下,则设置按键上的文字内容
  262.       ObjectSetString(0,按键名字,OBJPROP_TEXT,txt1);
  263.      }
  264. //如果按键没有被按下,则设置以下内容
  265.    ObjectSetInteger(0,按键名字,OBJPROP_COLOR,颜色2);
  266. //如果按键没有被按下,则设置以下内容
  267.    ObjectSetInteger(0,按键名字,OBJPROP_BGCOLOR,颜色1);
  268. //如果按键没有被按下,则设置按键上的文字内容
  269.    ObjectSetString(0,按键名字,OBJPROP_TEXT,txt2);
  270.   }
  271.   
  272.   ///---------------------------------------------------
  273.   
  274.   void 买上()
  275.   {
  276. 下单量=账户余额*0.02/止损点数/10;
  277. //------------------------------------------------------------------以上是下单量的设置

  278. //计算订单的止盈价格
  279.    if(止盈点数==0)
  280.      {
  281.       止盈价格=0;
  282.      }
  283.    if(止盈点数>0)
  284.      { 止盈价格=(MarketInfo(货币对,MODE_ASK))+(止盈点数*MarketInfo(货币对,MODE_POINT));}

  285. //计算止损价格
  286.    if(止损点数==0)
  287.      {
  288.       止损价格=0;
  289.      }
  290.    if(止损点数>0)
  291.      { 止损价格=MarketInfo(货币对,MODE_ASK)-(止损点数*MarketInfo(货币对,MODE_POINT));}

  292. //完成下买单动作
  293.    ticket=OrderSend(货币对,OP_BUY,下单量,MarketInfo(货币对,MODE_ASK),滑点,止损价格,止盈价格,"下买单",MAGIC,0,Violet);
  294.    if(ticket<0)
  295.      {
  296.       if(启动警报)
  297.         {
  298.          Alert("下买单没有成功!",GetLastError());
  299.         }
  300.      }

  301.    else
  302.      {
  303.       if(启动警报)
  304.         {Alert("已经成功下了买单!");}
  305.      }
  306.   }



  307. //+------------------------------------------------------------------+



  308. //+------------------------------------------------------------------+
  309. //|                                                                  |
  310. //+------------------------------------------------------------------+
  311. void 卖下()
  312.   {
  313. 下单量=账户余额*0.02/止损点数/10;

  314. //计算止盈价格
  315.    if(止盈点数==0)
  316.      {
  317.       止盈价格=0;
  318.      }
  319.    if(止盈点数>0)
  320.      {
  321.       止盈价格=MarketInfo(货币对,MODE_BID)-(止盈点数*MarketInfo(货币对,MODE_POINT));
  322.      }

  323. //计算止损价格
  324.    if(止损点数==0)
  325.      {
  326.       止损价格=0;
  327.      }
  328.    if(止损点数>0)
  329.      {
  330.       止损价格=MarketInfo(货币对,MODE_BID)+(止损点数*MarketInfo(货币对,MODE_POINT));
  331.      }

  332. //完成下卖单动作
  333.    ticket=OrderSend(货币对,OP_SELL,下单量,MarketInfo(货币对,MODE_BID),滑点,止损价格,止盈价格,"下卖单",MAGIC,0,GreenYellow);
  334.    if(ticket<0)
  335.      {
  336.       if(启动警报)
  337.         {
  338.          Alert("下卖单没有成功!",GetLastError());
  339.         }
  340.      }
  341.    else
  342.      {
  343.       if(启动警报)
  344.         {
  345.          Alert("已经成功下了卖单");
  346.         }
  347.      }
  348.   }
  349.   
  350.   //------------------------------------------------------------
  351.   void 获取输入框的值()
  352.    {string 输入框名字;
  353.     double 获取输入框的值;
  354.    
  355.    
  356.     string 内容=ObjectGetString(0,输入框名字,OBJPROP_TEXT);
  357.     double 输入框数值=StringToDouble(内容);
  358.     return(输入框数值);
  359.    }
  360.    
复制代码


微信图片_20200207112529.png
""
还没有人打赏,支持一下

评论|共 2 个

jamiran

发表于 2020-2-19 12:55:18 | 显示全部楼层

易术加

发表于 2020-3-25 08:32:27 | 显示全部楼层


哈哈,谢谢,这个问题已经解决

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则