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

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

    2020-02-07 · 1634 阅读
    快速下单按键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 个

    易术加 LV1

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


    哈哈,谢谢,这个问题已经解决
    您需要登录后才可以回帖 登录 | 注册

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

    微信二维码

    有问题联系客服