快速下单按键EA在获取输入框的值的时候出错,求大神帮忙解决,报错如图- //+------------------------------------------------------------------+
- //| 快速下单模块.mq4 |
- //| 易术加 |
- //| https://www.mql5.com |
- //+------------------------------------------------------------------+
- #property copyright "易术加"
- #property link "https://www.mql5.com"
- #property version "1.00"
- #property strict
- double 下单量;
- string 货币对;
- double 最大下单量;
- double 止损点数,止损价格,止损价格1;
- double 止盈点数,止盈价格,止盈价格1;
- int MAGIC=100;int ticket;int 滑点;
- bool 启动警报=false;
- double BUYSTOP点数距离=500;
- double BUYLIMIT点数距离=500;
- double SELLSTOP点数距离=500;
- double SELLLIMIT点数距离=500;
- double 历史总下单=0,历史总盈=0,历史下单量=0,历史盈亏=0;
- int 指定货币已平买单数;// mbbo指定货币对已平仓买单的数量
- double 指定货币已平买单总盈亏; //mbbprofito;指定货币对已平仓的买单的盈亏之和
- int 指定货币已平卖单数;// msso;指定货币对已平仓卖单的数量
- double 指定货币已平卖单总盈亏;// mssprofito; //指定货币对已平仓的卖单的盈亏之和
- int 指定M已开买单总和; //bb;//指定MAGIC数值已开仓的买单数量之和(不区分货币对)
- double 指定M已开买单总盈亏;//bbprofit ; // 指定MAGIC数值已开仓的买单盈亏之和(不区分货币对)
- int 指定M已开卖单总和; //ss; //指定MAGIC数值已开仓的卖单数量之和(不区分货币对)
- double 指定M已开卖单总盈亏;//ssprofit; // 指定MAGIC数值已开仓的卖单盈亏之和(不区分货币对)
- int 已开买单总数; //bbl;//已开仓的买单数量之和(不区分货币对)
- double 已开买单总盈亏; //bbprofitl;//已开仓的买单盈亏之和(不区分货币对)
- int 已开卖单总数;//ssl; //已开仓的卖单数量之和(不区分货币对)
- double 已开卖单总盈亏; //ssprofitl; //已开仓的卖单盈亏之和(不区分货币对)
- int 未删SS挂单总数;//ossa; //所有未删除的SELLSTOP挂单的数量(不区分货币对)
- int 未删SL挂单总数;//osla; //所有未删除的SELLLIMIT挂单的数量(不区分货币对)
- int 未删BS挂单总数;//obsa; //所有未删除的BUYSTOP挂单的数量(不区分货币对)
- int 未删BL挂单总数;//obla; //所有未删除的BUYLIMIT挂单的数量(不区分货币对)
- int 未平盈单数总和;//Twbs; //所有未平的单子中盈利单子的数量之和(不区分货币对)
- double 未平盈单总盈亏;//Twin; // 所有未平的单子中盈利单子的盈利之和,(不区分货币对)
- int 未平亏单数总和;//Tlbs; //所有未平的单子中亏损单子的数量之和(不区分货币对)
- double 未平亏单总盈亏;// Tloss; //所有未平的单子中亏损单子的亏损之和(不区分货币对)
- double 指定货币未平卖单总手数;//SLOTS; //指定货币对所有未平的卖单下单量之和
- int 指定货币未平买单总和;// mbb; //指定货币对所有未平的买单数量之和
- double 指定货币未平买单总盈;//mbbprofit; //指定货币对所有未平的买单盈亏之和
- double 指定货币未平买单总手数;// BLOTS; //指定货币对所有未平的买单下单量之和
- int 指定货币未平卖总和;//mss; //指定货币对所有未平的卖单数量之和
- double 指定货币未平卖单总盈亏;// mssprofit; //指定货币对所有未平的卖单的盈亏之和////////////////////////
- int 指定货币SS挂单总和;//moss; //指定货币对SELLSTOP挂单数量之和
- int 指定货币SL挂总和;//mosl; //指定货币对SELLLIMIT挂单数量之和
- int 指定货币BS挂单总和;//mobs; //指定货币对的BUYSTOP挂单数量之和
- int 指定货币BL挂单总和;//mobl; //指定货币对的BUYLIMIT挂单数量之和
- double 指定货币总盈亏; //profitmm; //指定货币对的总的盈亏
- double 未平订单总手数; //TOTALLOTS; //所有未平的订单下单量之和
- double 定币定M未平卖单总手数;//TLOTSS; //指定货币对指定MAGIC数值未平仓的卖单下单量之和
- int 定币定M未平卖总和;//s; //指定货币对指定MAGIC数值未平仓的卖单数量之和
- double 定币定M未平卖总盈亏;// sprofit; //指定货币对指定MAGIC数值未平仓的卖单盈亏之和
- double 定币定M最近未平买单开盘价;//LastPricebuy; //指定货币对指定MAGIC数值未平仓的最近买单的开盘价格
- double 定币定M最近未平卖单开盘价;//LastPricesell; //指定货币对指定MAGIC数值未平仓的最近卖单的开盘价格
- double 定币定M未平买单总手数;// TLOTSB; //指定货币对指定MAGIC数值未平仓的买单下单量之和
- int 定币定M未平买单总和;//b; //指定货币对指定MAGIC数值未平仓的买单数量之和
- double 定币定M最近未平卖单手数;//SLASTLOTS; //指定货币对指定MAGIC数值未平仓的最近卖单下单量
- double 定币定M未平买总盈亏;//bprofit; //指定货币对指定MAGIC数值未平仓的买单盈亏之和
- double 定币定M未平总手数;// TLOTS; //指定货币对指定MAGIC数值未平仓的订单的下单量之和
- int 定币定M未删SS挂单总和;//oss; //指定货币对指定MAGIC数值未删除的SELLSTOP挂单数量之和
- int 定币定M未删SL挂单总和;//osl; //指定货币对指定MAGIC数值未删除的SELLLIMIT挂单数量之和
- int 定币定M未删BS挂单总和;//obs; //指定货币对指定MAGIC数值未删除的BUYSTOP挂单数量之和
- int 定币定M未删BL挂单总和;//obl; //指定货币对指定MAGIC数值未删除的BUYLIMIT挂单数量之和
- string 下买单;
- double BUYSTOP线条;
- double BUYLIMIT线条;
- double SELLSTOP线条;
- double SELLLIMIT线条;
- int 账户杠杆=AccountLeverage();
- double 账户余额=AccountBalance();
- double 账户净值=AccountEquity();
- double 账户可用保证金=AccountFreeMargin();
- double 账户已用保证金=AccountMargin();
- double 账户利润=AccountProfit();
- double 开盘价格=Open[0];//当前货币对当前周期第0根k线的开盘价,iOpen("EURUSD",PERIOD_H4,0)欧元兑美元4小时当前k线的开盘价.
- double 收盘价格=Close[0];
- double 最高价格=High[0];
- double 最低价格=Low[0];
- datetime 一根k线交易一单=0;
- //+------------------------------------------------------------------+
- //| Expert initialization function |
- //+------------------------------------------------------------------+
- int OnInit()
- {
-
-
- 面板("背景",10,28,clrGainsboro,205,120);
- 输入框("下单量2",Black,20,72,"0.01",60,30,White);
- 输入框("止损2",Black,83,72,"100",60,30,White);
- 输入框("止盈2",Black,146,72,"200",60,30,White);
-
- //---
- return(INIT_SUCCEEDED);
- }
- //+------------------------------------------------------------------+
- //| Expert deinitialization function |
- //+------------------------------------------------------------------+
- void OnDeinit(const int reason)
- {
- //--- destroy timer
- EventKillTimer();
-
- }
- //+------------------------------------------------------------------+
- //| Expert tick function |
- //+------------------------------------------------------------------+
- void OnTick()
- {
- 按键("下单量1","单量","单量",20,40,60,30,0,Lime,Black,10);
- 按键("止损1","止损","止损",83,40,60,30,0,Lime,Black,10);
- 按键("止盈1","止盈","止盈",146,40,60,30,0,Lime,Black,10);
- 按键("BUY","BUY","BUY",20,104,80,30,0,Yellow,Black,10)
- 按键("SELL","SELL","SELL",126,104,80,30,0,Yellow,Black,10);
- //如果按键BUY被按下
- if(ObjectGetInteger(0,"BUY",OBJPROP_STATE)==1)
- {
- //获取输入框的值
-
- 下单量=获取输入框的值("下单量2");
- 止盈点数=获取输入框的值("止盈2");
- 止损点数=获取输入框的值("止损2");
- 买上();
- //完成卖单动作之后将按键弹起
- ObjectGetInteger(0,"BUY",OBJPROP_STATE,false);
- }
- if(ObjectGetInteger(0,"SELL",OBJPROP_STATE)==1)
- {
- //获取输入框的值
- 下单量=获取输入框的值("下单量2");
- 止盈点数=获取输入框的值("止盈2");
- 止损点数=获取输入框的值("止损2");
- 卖下();
- //完成卖单动作之后将按键弹起
- ObjectSetInteger(0,"SELL",OBJPROP_STATE,false);
- }
- }
- //+------------------------------------------------------------------+
- //| Timer function |
- //+------------------------------------------------------------------+
- void OnTimer()
- {
- //---
-
- }
- //+------------------------------------------------------------------+
- //| Tester function |
- //+------------------------------------------------------------------+
- double OnTester()
- {
- //---
- double ret=0.0;
- //---
- //---
- return(ret);
- }
- //+------------------------------------------------------------------+
- //| ChartEvent function |
- //+------------------------------------------------------------------+
- void OnChartEvent(const int id,
- const long &lparam,
- const double &dparam,
- const string &sparam)
- {
- //---
-
- }
- //+------------------------------------------------------------------+
- void 面板(string 面板名称,int X位置,int Y位置,color 背景颜色,int 面板长度,int 面板宽度)
- {
- //如果没有面板,创建一个面版并设置以下内容
- if(ObjectFind(0,面板名称)==-1)
- ObjectCreate(0,面板名称,OBJ_EDIT,0,0,0);
- //设置面板的X坐标
- ObjectSetInteger(0,面板名称,OBJPROP_XDISTANCE,X位置);
- //设置面板的Y坐标
- ObjectSetInteger(0,面板名称,OBJPROP_YDISTANCE,Y位置);
- //设置面板的背景颜色
- ObjectSetInteger(0,面板名称,OBJPROP_BGCOLOR,背景颜色);
- ObjectSetInteger(0,面板名称,OBJPROP_SELECTED, true);
- //设置面板背景显示与否
- ObjectSetInteger(0,面板名称,OBJPROP_BACK,false);
- //设置面板长度
- ObjectSetInteger(0,面板名称,OBJPROP_XSIZE,面板长度);
- //设置面板宽度
- ObjectSetInteger(0,面板名称,OBJPROP_YSIZE,面板宽度);
- ObjectSetString(0,面板名称,OBJPROP_FONT,"Arial");
- ObjectSetString(0,面板名称,OBJPROP_TEXT,"0");
- ObjectSetInteger(0,面板名称,OBJPROP_FONTSIZE,10);
- ObjectSetInteger(0,面板名称,OBJPROP_COLOR,背景颜色);
- ObjectSetInteger(0,面板名称,OBJPROP_BORDER_COLOR,clrKhaki);
- ObjectSetInteger(0,面板名称,OBJPROP_ALIGN,ALIGN_LEFT);
- }
-
- //---------------------------------------------------------------------
- void 输入框(string 输入框名字,color 颜色,int X位置,int Y位置,string 初始内容,int 长度,int 宽度,color 背景颜色)
- {
- //如果没有输入框,创建一个并设置以下内容
- if(ObjectFind(0,输入框名字)==-1)
- //创建输入框,类型为OBJ_EDIT""
- ObjectCreate(0,输入框名字,OBJ_EDIT,0,0,0);
- //设置输入框的X坐标
- ObjectSetInteger(0,输入框名字,OBJPROP_XDISTANCE,X位置);
- //设置输入框的Y坐标
- ObjectSetInteger(0,输入框名字,OBJPROP_YDISTANCE,Y位置);
- //设置输入框的长度
- ObjectSetInteger(0,输入框名字,OBJPROP_XSIZE,长度);
- //设置输入框的宽度
- ObjectSetInteger(0,输入框名字,OBJPROP_YSIZE,宽度);
- //设置输入文字大小
- ObjectSetInteger(0,输入框名字,OBJPROP_FONTSIZE,10);
- //设置输入框的输入文字的对齐方式
- ObjectSetInteger(0,输入框名字,OBJPROP_ALIGN,ALIGN_CENTER);
- //设置输入框的只读方式
- ObjectSetInteger(0,输入框名字,OBJPROP_READONLY,false);
- //设置输入框的字体颜色
- ObjectSetInteger(0,输入框名字,OBJPROP_COLOR,颜色);
- //设置输入框的背景颜色
- ObjectSetInteger(0,输入框名字,OBJPROP_BGCOLOR,背景颜色);
- //设置输入框的边框颜色
- ObjectSetInteger(0,输入框名字,OBJPROP_BORDER_COLOR,White);
- //设置输入框是否显示背景
- ObjectSetInteger(0,输入框名字,OBJPROP_BACK,false);
- //设置输入框初始的显示文本
- ObjectSetString(0,输入框名字,OBJPROP_TEXT,初始内容);
- }
-
- //-----------------------------------------------------------------
-
- void 按键(string 按键名字,string txt1,string txt2,int X位置,int Y位置,int 长度,int 宽度,int 角落位置,color 颜色1,color 颜色2,int 字号)
- {
- //如果没有按键,则创建一个并设置以下内容
- if(ObjectFind(0,按键名字)==-1)
- //创建一个"OBJ_BUTTON"类型的按键
- ObjectCreate(0,按键名字,OBJ_BUTTON,0,0,0);
- //设置按键的X坐标
- ObjectSetInteger(0,按键名字,OBJPROP_XDISTANCE,X位置);
- //设置按键的Y坐标
- ObjectSetInteger(0,按键名字,OBJPROP_YDISTANCE,Y位置);
- //设置按键的长度
- ObjectSetInteger(0,按键名字,OBJPROP_XSIZE,长度);
- //设置按键的宽度
- ObjectSetInteger(0,按键名字,OBJPROP_YSIZE,宽度);
- //设置按键上面的字体
- ObjectSetString(0,按键名字,OBJPROP_FONT,"微软雅黑");
- //设置按键上文字的大小
- ObjectSetInteger(0,按键名字,OBJPROP_FONTSIZE,字号);
- //设置按键的角落位置
- ObjectSetInteger(0,按键名字,OBJPROP_CORNER,角落位置);
- //设置在图表中优先接收鼠标点击事件
- ObjectSetInteger(0,按键名字,OBJPROP_ZORDER,0);
- //如果按键被按下,则设置以下内容
- if(ObjectGetInteger(0,按键名字,OBJPROP_STATE)==1)//如果按键被按下
- {
- //如果按键被按下,则设置按键上文字颜色
- ObjectSetInteger(0,按键名字,OBJPROP_COLOR,颜色1);
- //如果按键被按下,则设置按键的背景颜色
- ObjectSetInteger(0,按键名字,OBJPROP_BGCOLOR,颜色2);
- //如果按键被按下,则设置按键上的文字内容
- ObjectSetString(0,按键名字,OBJPROP_TEXT,txt1);
- }
- //如果按键没有被按下,则设置以下内容
- ObjectSetInteger(0,按键名字,OBJPROP_COLOR,颜色2);
- //如果按键没有被按下,则设置以下内容
- ObjectSetInteger(0,按键名字,OBJPROP_BGCOLOR,颜色1);
- //如果按键没有被按下,则设置按键上的文字内容
- ObjectSetString(0,按键名字,OBJPROP_TEXT,txt2);
- }
-
- ///---------------------------------------------------
-
- void 买上()
- {
- 下单量=账户余额*0.02/止损点数/10;
- //------------------------------------------------------------------以上是下单量的设置
- //计算订单的止盈价格
- if(止盈点数==0)
- {
- 止盈价格=0;
- }
- if(止盈点数>0)
- { 止盈价格=(MarketInfo(货币对,MODE_ASK))+(止盈点数*MarketInfo(货币对,MODE_POINT));}
- //计算止损价格
- if(止损点数==0)
- {
- 止损价格=0;
- }
- if(止损点数>0)
- { 止损价格=MarketInfo(货币对,MODE_ASK)-(止损点数*MarketInfo(货币对,MODE_POINT));}
- //完成下买单动作
- ticket=OrderSend(货币对,OP_BUY,下单量,MarketInfo(货币对,MODE_ASK),滑点,止损价格,止盈价格,"下买单",MAGIC,0,Violet);
- if(ticket<0)
- {
- if(启动警报)
- {
- Alert("下买单没有成功!",GetLastError());
- }
- }
- else
- {
- if(启动警报)
- {Alert("已经成功下了买单!");}
- }
- }
- //+------------------------------------------------------------------+
- //+------------------------------------------------------------------+
- //| |
- //+------------------------------------------------------------------+
- void 卖下()
- {
- 下单量=账户余额*0.02/止损点数/10;
- //计算止盈价格
- if(止盈点数==0)
- {
- 止盈价格=0;
- }
- if(止盈点数>0)
- {
- 止盈价格=MarketInfo(货币对,MODE_BID)-(止盈点数*MarketInfo(货币对,MODE_POINT));
- }
- //计算止损价格
- if(止损点数==0)
- {
- 止损价格=0;
- }
- if(止损点数>0)
- {
- 止损价格=MarketInfo(货币对,MODE_BID)+(止损点数*MarketInfo(货币对,MODE_POINT));
- }
- //完成下卖单动作
- ticket=OrderSend(货币对,OP_SELL,下单量,MarketInfo(货币对,MODE_BID),滑点,止损价格,止盈价格,"下卖单",MAGIC,0,GreenYellow);
- if(ticket<0)
- {
- if(启动警报)
- {
- Alert("下卖单没有成功!",GetLastError());
- }
- }
- else
- {
- if(启动警报)
- {
- Alert("已经成功下了卖单");
- }
- }
- }
-
- //------------------------------------------------------------
- void 获取输入框的值()
- {string 输入框名字;
- double 获取输入框的值;
-
-
- string 内容=ObjectGetString(0,输入框名字,OBJPROP_TEXT);
- double 输入框数值=StringToDouble(内容);
- return(输入框数值);
- }
-
复制代码
|