易术加 发表于 2020-2-7 11:26:23

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

快速下单按键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根k线的开盘价,iOpen("EURUSD",PERIOD_H4,0)欧元兑美元4小时当前k线的开盘价.
double 收盘价格=Close;
double 最高价格=High;
double 最低价格=Low;
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(输入框数值);
   }
   

jamiran 发表于 2020-2-19 12:55:18

{:1_186:}{:1_186:}{:1_177:}{:1_177:}

易术加 发表于 2020-3-25 08:32:27

{:1_186:}{:1_186:}
哈哈,谢谢,这个问题已经解决
页: [1]
查看完整版本: 求助快速下单按键EA获取输入框的值报警怎么解决