520FX真是大大地进步了,老易回来,做点贡献。混迹论坛多年,首次被加精,感谢老大。增加源码附件,顺便赚金币。[ol]#property copyright "Copyright By Laoyee QQ:921795"#property link      "qq:921795"#include  
/*【程序名称及版本号】【开发记录】*///----程序预设参数extern string str1 = "====系统预设参数====";extern double 预设开仓量 = 0.1;double Lots;extern string 有效交易开始时间="00:00";string ValidStartTime;extern string 有效交易结束时间="00:00";string ValidEndTime;extern bool 是否采用服务器时间=true;bool ServerTime;//订单控制参数string 订单注释="";string MyOrderComment;int 订单特征码=0;int MyMagicNum;extern string str2 = "====技术指标参数====";//----程序控制参数int BuyGroupOrders, SellGroupOrders; //买入、卖出组成交持仓单数量总计int BuyGroupFirstTicket, SellGroupFirstTicket; //买入、卖出组第一单单号int BuyGroupLastTicket, SellGroupLastTicket; //买入、卖出组最后一单单号int BuyGroupMaxProfitTicket, SellGroupMaxProfitTicket; //买入、卖出组最大盈利单单号int BuyGroupMinProfitTicket, SellGroupMinProfitTicket; //买入、卖出组最小盈利单单号int BuyGroupMaxLossTicket, SellGroupMaxLossTicket; //买入、卖出组最大亏损单单号int BuyGroupMinLossTicket, SellGroupMinLossTicket; //买入、卖出组最小亏损单单号double BuyGroupLots, SellGroupLots; //买入、卖出组成交持仓单开仓量总计double BuyGroupProfit, SellGroupProfit; //买入、卖出组成交持仓单利润总计int BuyLimitOrders, SellLimitOrders; //买入限制挂单、卖出限制挂单数量总计int BuyStopOrders, SellStopOrders; //买入停止挂单、卖出停止挂单数量总计//持仓订单基本信息:0订单号,1开仓时间,2订单利润,3订单类型,4开仓量,5开仓价,//                 6止损价,7止赢价,8订单特征码,9订单佣金,10掉期,11挂单有效日期double OrdersArray[][12];//第1维:订单序号;第2维:订单信息double TempOrdersArray[][12];//临时数组int MyArrayRange; //数组记录数量int Corner = 1; //交易信息显示四个角位置int cnt, i, j; //计数器变量string TextBarString; //蜡烛位置显示文字变量string DotBarString; //蜡烛位置显示文字变量string HLineBarString; //蜡烛位置显示文字变量string VLineBarString; //蜡烛位置显示文字变量 
int start()   {      iMain();      return(0);   } 
/*函    数:主控程序输入参数:输出参数:算    法:*/void iMain()   {      ObjectDelete("myLine");      iTwoPointsLine("myLine",iTime(NULL,0,50),Open[50],Time[0],Bid,2,Blue);      iDrawSign("Text",3,Open[3],Yellow,0,Open[3],14);      iDrawSign("HLine",5,Close[5],Green,0,"",1);      iDrawSign("VLine",6,Close[6],Red,0,"",1);      iShowInfo();      int myTradingSignal=iTradingSignals();   }/*函    数:计算交易信号输入参数:输出参数:9-无信号          0-买入开仓信号          1-卖出开仓信号          2-BuyLimit信号          3-SellLimit信号          4-BuyStop信号          5-SellStop信号          6-买入单平仓信号          7-卖出单平仓信号算    法:*/int iTradingSignals()   {      int myReturn = 9;//预定义返回变量      iDrawSign("Dot", 0, Ask, Green, 241,"",0); //标注买入开仓信号      iDrawSign("Dot", 0, Bid, Red, 242,"",0); //标注卖出开仓信号      if (!iValidTime(ValidStartTime,ValidEndTime,ServerTime))//无效时间段内,不发送交易信号         {            myReturn = 9;         }      return(myReturn);   }   /*函    数:显示交易信息输入参数:输出参数:算    法:*/void iShowInfo()   {      //初始化变量      BuyGroupOrders=0; SellGroupOrders=0; //买入、卖出组成交持仓单数量总计      BuyGroupFirstTicket=0; SellGroupFirstTicket=0; //买入、卖出组第一张订单单号      BuyGroupLastTicket=0; SellGroupLastTicket=0; //买入、卖出组最后一张订单号      BuyGroupMaxProfitTicket=0; SellGroupMaxProfitTicket=0; //买入、卖出组最大盈利单单号      BuyGroupMinProfitTicket=0; SellGroupMinProfitTicket=0; //买入、卖出组最小盈利单单号      BuyGroupMaxLossTicket=0; SellGroupMaxLossTicket=0; //买入、卖出组最大亏损单单号      BuyGroupMinLossTicket=0; SellGroupMinLossTicket=0; //买入、卖出组最小亏损单单号      BuyGroupLots=0; SellGroupLots=0; //买入、卖出组成交单持仓量      BuyGroupProfit=0; SellGroupProfit=0; //买入、卖出组成交单利润      BuyLimitOrders=0; SellLimitOrders=0; //买入限制挂单、卖出限制挂单数量总计      BuyStopOrders=0; SellStopOrders=0; //买入停止挂单、卖出停止挂单数量总计      //初始化订单数组      MyArrayRange=OrdersTotal()+1;      ArrayResize(OrdersArray, MyArrayRange); //重新界定数组      ArrayInitialize(OrdersArray, 0.0); //初始化数组      if (OrdersTotal()>0)         {            //遍历持仓单,创建数组            for (cnt=0; cnt 
Comment("买入组持仓单总计:"+BuyGroupOrders+"  卖出组持仓单总计:"+SellGroupOrders+"\n"+        "买入组第1单单号:"+BuyGroupFirstTicket+"  卖出组第1单单号:"+SellGroupFirstTicket+"\n"+        "买入组最后1单单号:"+BuyGroupLastTicket+"  卖出组最后1单单号:"+SellGroupLastTicket+"\n"+"\n"+ 
        "买入组最小盈利单单号:"+BuyGroupMinProfitTicket+"  卖出组最小盈利单单号:"+SellGroupMinProfitTicket+"\n"+        "买入组最大盈利单单号:"+BuyGroupMaxProfitTicket+"  卖出组最大盈利单单号:"+SellGroupMaxProfitTicket+"\n"+        "买入组最小亏损单单号:"+BuyGroupMinLossTicket+"  卖出组最小亏损单单号:"+SellGroupMinLossTicket+"\n"+        "买入组最大亏损单单号:"+BuyGroupMaxLossTicket+"  卖出组最大亏损单单号:"+SellGroupMaxLossTicket+"\n"+"\n"+        "买入组开仓量总计:"+BuyGroupLots+"  卖出组开仓量总计:"+SellGroupLots+"\n"+        "买入组利润:"+BuyGroupProfit+"  卖出组利润:"+SellGroupProfit+"\n"+        "买入组限制挂单总计:"+BuyLimitOrders+"  卖出组限制挂单总计:"+SellLimitOrders+"\n"+"\n"+        "买入停止挂单总计:"+BuyStopOrders+"  卖出停止挂单总计:"+SellStopOrders+"\n"+                "买入组第1单盈利点数:"+iOrderProfitToPoint(BuyGroupFirstTicket)+"\n"+        "2%资金余额本货币对开仓量:"+iFundsToHands(Symbol(),AccountBalance()*2/100)+"\n"+        "资金余额20%作为保证金总量,本货币对最大开仓量:"+iLotsOptimized(AccountBalance(), 20)+"\n"+        "开仓量0.165整形:"+iLotsFormat(0.165)); 
      return(0);   } 
/*函    数:计算特定条件的订单输入参数:myOrderType:订单类型 0-Buy,1-Sell,2-BuyLimit,3-SellLimit,4-BuyStop,5-SellStop         myOrderSort:排序类型 0-按时间,1-按盈利,2-按亏损,3-按开仓价         myMaxMin:最值 0-最大,1-最小输出参数:返回订单号算    法:*/int iOrderSortTicket(int myOrderType,int myOrderSort,int myMaxMin)   {      int myTicket=0;      int myArraycnt=0; //时间序列      int myArraycnt1=0; //盈亏序列      int myArraycnt2=0; //开仓价序列      int myType;      //创建临时数组      double myTempArray[][12]; //定义临时数组      ArrayResize(myTempArray, MyArrayRange); //重新界定临时数组      ArrayInitialize(myTempArray, 0.0); //初始化临时数组      double myTempOrdersArray[][12]; //定义临时数组      myArraycnt=BuyGroupOrders+SellGroupOrders;      if (myArraycnt==0) return(0);      myArraycnt2=MyArrayRange;      myArraycnt1=myArraycnt;      myArraycnt=myArraycnt-1;      //将原始数组数据复制到myTempOrdersArray数组      ArrayResize(myTempOrdersArray, myArraycnt1); //重新界定临时数组      ArrayInitialize(myTempOrdersArray, 0.0); //初始化临时数组      for (cnt=0; cnti; j--)                     {                        if (OrdersArray[j][1]>OrdersArray[j-1][1])                           {                              myTempArray[0][0]=OrdersArray[j-1][0];                              myTempArray[0][1]=OrdersArray[j-1][1];                              myTempArray[0][2]=OrdersArray[j-1][2];                              myTempArray[0][3]=OrdersArray[j-1][3];                              myTempArray[0][4]=OrdersArray[j-1][4];                              myTempArray[0][5]=OrdersArray[j-1][5];                              myTempArray[0][6]=OrdersArray[j-1][6];                              myTempArray[0][7]=OrdersArray[j-1][7];                              myTempArray[0][8]=OrdersArray[j-1][8];                              myTempArray[0][9]=OrdersArray[j-1][9];                              myTempArray[0][10]=OrdersArray[j-1][10];                              myTempArray[0][11]=OrdersArray[j-1][11];                                                            OrdersArray[j-1][0]=OrdersArray[j][0];                              OrdersArray[j-1][1]=OrdersArray[j][1];                              OrdersArray[j-1][2]=OrdersArray[j][2];                              OrdersArray[j-1][3]=OrdersArray[j][3];                              OrdersArray[j-1][4]=OrdersArray[j][4];                              OrdersArray[j-1][5]=OrdersArray[j][5];                              OrdersArray[j-1][6]=OrdersArray[j][6];                              OrdersArray[j-1][7]=OrdersArray[j][7];                              OrdersArray[j-1][8]=OrdersArray[j][8];                              OrdersArray[j-1][9]=OrdersArray[j][9];                              OrdersArray[j-1][10]=OrdersArray[j][10];                              OrdersArray[j-1][11]=OrdersArray[j][11];                                                            OrdersArray[j][0]=myTempArray[0][0];                              OrdersArray[j][1]=myTempArray[0][1];                              OrdersArray[j][2]=myTempArray[0][2];                              OrdersArray[j][3]=myTempArray[0][3];                              OrdersArray[j][4]=myTempArray[0][4];                              OrdersArray[j][5]=myTempArray[0][5];                              OrdersArray[j][6]=myTempArray[0][6];                              OrdersArray[j][7]=myTempArray[0][7];                              OrdersArray[j][8]=myTempArray[0][8];                              OrdersArray[j][9]=myTempArray[0][9];                              OrdersArray[j][10]=myTempArray[0][10];                              OrdersArray[j][11]=myTempArray[0][11];                           }                     }               }         }      //按利润降序排列数组 myTempOrdersArray      if (myOrderSort==1 || myOrderSort==2)         {            double myTempArray1[][12]; //定义临时数组            ArrayResize(myTempArray1, myArraycnt1); //重新界定临时数组            ArrayInitialize(myTempArray1, 0.0); //初始化临时数组            for (i=0; ii; j--)                     {                        if (myTempOrdersArray[j][2]>myTempOrdersArray[j-1][2])                           {                              myTempArray1[0][0]=myTempOrdersArray[j-1][0];                              myTempArray1[0][1]=myTempOrdersArray[j-1][1];                              myTempArray1[0][2]=myTempOrdersArray[j-1][2];                              myTempArray1[0][3]=myTempOrdersArray[j-1][3];                              myTempArray1[0][4]=myTempOrdersArray[j-1][4];                              myTempArray1[0][5]=myTempOrdersArray[j-1][5];                              myTempArray1[0][6]=myTempOrdersArray[j-1][6];                              myTempArray1[0][7]=myTempOrdersArray[j-1][7];                              myTempArray1[0][8]=myTempOrdersArray[j-1][8];                              myTempArray1[0][9]=myTempOrdersArray[j-1][9];                              myTempArray1[0][10]=myTempOrdersArray[j-1][10];                              myTempArray1[0][11]=myTempOrdersArray[j-1][11];                                                            myTempOrdersArray[j-1][0]=myTempOrdersArray[j][0];                              myTempOrdersArray[j-1][1]=myTempOrdersArray[j][1];                              myTempOrdersArray[j-1][2]=myTempOrdersArray[j][2];                              myTempOrdersArray[j-1][3]=myTempOrdersArray[j][3];                              myTempOrdersArray[j-1][4]=myTempOrdersArray[j][4];                              myTempOrdersArray[j-1][5]=myTempOrdersArray[j][5];                              myTempOrdersArray[j-1][6]=myTempOrdersArray[j][6];                              myTempOrdersArray[j-1][7]=myTempOrdersArray[j][7];                              myTempOrdersArray[j-1][8]=myTempOrdersArray[j][8];                              myTempOrdersArray[j-1][9]=myTempOrdersArray[j][9];                              myTempOrdersArray[j-1][10]=myTempOrdersArray[j][10];                              myTempOrdersArray[j-1][11]=myTempOrdersArray[j][11];                                                            myTempOrdersArray[j][0]=myTempArray1[0][0];                              myTempOrdersArray[j][1]=myTempArray1[0][1];                              myTempOrdersArray[j][2]=myTempArray1[0][2];                              myTempOrdersArray[j][3]=myTempArray1[0][3];                              myTempOrdersArray[j][4]=myTempArray1[0][4];                              myTempOrdersArray[j][5]=myTempArray1[0][5];                              myTempOrdersArray[j][6]=myTempArray1[0][6];                              myTempOrdersArray[j][7]=myTempArray1[0][7];                              myTempOrdersArray[j][8]=myTempArray1[0][8];                              myTempOrdersArray[j][9]=myTempArray1[0][9];                              myTempOrdersArray[j][10]=myTempArray1[0][10];                              myTempOrdersArray[j][11]=myTempArray1[0][11];                           }                     }               }         } 
      //按订单开仓价降序排列数组      if (myOrderSort==3)         {            double myTempArray2[][12]; //定义临时数组            ArrayResize(myTempArray2, myArraycnt2); //重新界定临时数组            ArrayInitialize(myTempArray2, 0.0); //初始化临时数组            for (i=0; ii; j--)                     {                        if (OrdersArray[j][5]>OrdersArray[j-1][5])                           {                              myTempArray2[0][0]=OrdersArray[j-1][0];                              myTempArray2[0][1]=OrdersArray[j-1][1];                              myTempArray2[0][2]=OrdersArray[j-1][2];                              myTempArray2[0][3]=OrdersArray[j-1][3];                              myTempArray2[0][4]=OrdersArray[j-1][4];                              myTempArray2[0][5]=OrdersArray[j-1][5];                              myTempArray2[0][6]=OrdersArray[j-1][6];                              myTempArray2[0][7]=OrdersArray[j-1][7];                              myTempArray2[0][8]=OrdersArray[j-1][8];                              myTempArray2[0][9]=OrdersArray[j-1][9];                              myTempArray2[0][10]=OrdersArray[j-1][10];                              myTempArray2[0][11]=OrdersArray[j-1][11];                                                            OrdersArray[j-1][0]=OrdersArray[j][0];                              OrdersArray[j-1][1]=OrdersArray[j][1];                              OrdersArray[j-1][2]=OrdersArray[j][2];                              OrdersArray[j-1][3]=OrdersArray[j][3];                              OrdersArray[j-1][4]=OrdersArray[j][4];                              OrdersArray[j-1][5]=OrdersArray[j][5];                              OrdersArray[j-1][6]=OrdersArray[j][6];                              OrdersArray[j-1][7]=OrdersArray[j][7];                              OrdersArray[j-1][8]=OrdersArray[j][8];                              OrdersArray[j-1][9]=OrdersArray[j][9];                              OrdersArray[j-1][10]=OrdersArray[j][10];                              OrdersArray[j-1][11]=OrdersArray[j][11];                                                            OrdersArray[j][0]=myTempArray2[0][0];                              OrdersArray[j][1]=myTempArray2[0][1];                              OrdersArray[j][2]=myTempArray2[0][2];                              OrdersArray[j][3]=myTempArray2[0][3];                              OrdersArray[j][4]=myTempArray2[0][4];                              OrdersArray[j][5]=myTempArray2[0][5];                              OrdersArray[j][6]=myTempArray2[0][6];                              OrdersArray[j][7]=myTempArray2[0][7];                              OrdersArray[j][8]=myTempArray2[0][8];                              OrdersArray[j][9]=myTempArray2[0][9];                              OrdersArray[j][10]=myTempArray2[0][10];                              OrdersArray[j][11]=myTempArray2[0][11];                           }                     }               }         } 
      //X订单类型最低开仓价单      if (myOrderSort==3 && myMaxMin==0)         {            for (cnt=0; cnt 
      //X订单类型最高开仓价单      if (myOrderSort==3 && myMaxMin==1)         {            for (cnt=OrdersTotal(); cnt>=0; cnt--)               {                  myType=NormalizeDouble(OrdersArray[cnt][3],0);                  if (OrdersArray[cnt][5]!=0 && myType==myOrderType)                      {                        myTicket=NormalizeDouble(OrdersArray[cnt][0],0);                        break;                     }               }         }      //X订单类型最小亏损单      if (myOrderSort==2 && myMaxMin==1)         {            for (cnt=0; cnt=0; cnt--)               {                  myType=NormalizeDouble(myTempOrdersArray[cnt][3],0);                  if (myTempOrdersArray[cnt][2]0 && myType==myOrderType)                      {                        myTicket=NormalizeDouble(myTempOrdersArray[cnt][0],0);                        break;                     }               }         }      //X订单类型最小盈利单      if (myOrderSort==1 && myMaxMin==1)         {            for (cnt=myArraycnt1; cnt>=0; cnt--)               {                  myType=NormalizeDouble(myTempOrdersArray[cnt][3],0);                  if (myTempOrdersArray[cnt][2]>0 && myType==myOrderType)                      {                        myTicket=NormalizeDouble(myTempOrdersArray[cnt][0],0);                        break;                     }               }         } 
      //X订单类型第1开仓单      if (myOrderSort==0 && myMaxMin==1)         {            for (cnt=MyArrayRange; cnt>=0; cnt--)               {                  myType=NormalizeDouble(OrdersArray[cnt][3],0);                  if (OrdersArray[cnt][0]!=0 && myType==myOrderType)                      {                        myTicket=NormalizeDouble(OrdersArray[cnt][0],0);                        break;                     }               }         }      //X类型最后开仓单      if (myOrderSort==0 && myMaxMin==0)         {            for (cnt=0; cnt 
/*函    数:订单利润转换点数输入参数:myTicket:订单号输出参数:算    法:*/int iOrderProfitToPoint(int myTicket)   {      int myPoint=0;      if (OrderSelect(myTicket,SELECT_BY_TICKET,MODE_TRADES))         {            myPoint=NormalizeDouble(((OrderProfit()-OrderSwap())/MarketInfo(OrderSymbol(), MODE_TICKVALUE))/OrderLots(),0);         }      return(myPoint);   } 
/*函    数:金额转换手数输入参数:mySymbol:货币对            myFunds:资金基数输出参数:算    法:*/double iFundsToHands(string mySymbol,double myFunds)   {      double myLots=myFunds/MarketInfo(mySymbol, MODE_MARGINREQUIRED);//换算可开仓手数      myLots=MathRound(myLots/MarketInfo(mySymbol, MODE_MINLOT))*MarketInfo(Symbol(), MODE_MINLOT);//手数整形      return(myLots);   } 
/*函    数:资金风险管理输入参数:myFunds:资金基数,myCapitalRisk:风险比例输出参数:在指定的风险比例下,允许操作的最大的下单量算    法:*/double iLotsOptimized(double myFunds, double myCapitalRisk)   {      double myMargin=myFunds*myCapitalRisk/100-AccountMargin();//可用保证金额度      double myLots=myMargin/MarketInfo(Symbol(), MODE_MARGINREQUIRED);//换算可开仓手数      myLots=MathRound(myLots/MarketInfo(Symbol(), MODE_MINLOT))*MarketInfo(Symbol(), MODE_MINLOT);//开仓量整形      if (myLots 
/*函    数:开仓量整形输入参数:myLots:开仓量输出参数:按照平台规则计算开仓量算    法:调整不规范的开仓量数据,按照四舍五入原则及平台开仓量格式规范数据*/double iLotsFormat(double myLots)   {      myLots=MathRound(myLots/MarketInfo(Symbol(), MODE_MINLOT))*MarketInfo(Symbol(), MODE_MINLOT);//开仓量整形      if (myLots 
/*函    数:有效时间段输入参数:string myStartTime:开始时间,标准格式为hh:mm          string myEndTime:结束时间,标准格式为hh:mm          bool myServerTime:true为服务器时间, false为计算机时间输出参数:true:有效  false:无效算    法:*/bool  iValidTime(string myStartTime,string myEndTime,bool myServerTime)   {      bool myValue=false;      int myST=StrToTime(myStartTime);      int myET=StrToTime(myEndTime);      if (myST>myET) myET=myET+1440*60;      if (TimeCurrent()>myST && TimeCurrent()myST && TimeLocal() 
/*函    数:交易繁忙,程序等待,更新缓存数据输入参数:输出参数:算法说明:*/void iWait()    {      while (!IsTradeAllowed() || IsTradeContextBusy()) Sleep(100);      RefreshRates();      return(0);   } /*函    数:计算指标交叉信号输入参数:double myFast0:当前快线值         double mySlow0:当前慢线值         double myFast1:前一快线值         double mySlow1:前一慢线值输出参数:向上交叉为0,向下交叉为1,无效交叉为9算    法:*/int iCrossSignal(double myFast0,double mySlow0,double myFast1,double mySlow1)   {      int myReturn=9;      if (myFast0>mySlow0 && myFast1=mySlow1)         {            myReturn=1;         }      return(myReturn);   } 
/*函    数:两点间连线(主图)输入参数:string myLineName  线段名称          int myFirstTime  起点时间          int myFirstPrice  起点价格          int mySecondTime  终点时间          int mySecondPrice  终点价格          int myLineStyle  线型 0-实线 1-断线 2-点线 3-点划线 4-双点划线          color myLineColor 线色输出参数:在指定的两点间连线算法说明:*/void iTwoPointsLine(string myLineName,int myFirstTime,double myFirstPrice,int mySecondTime,double mySecondPrice,int myLineStyle,color myLineColor)   {      ObjectCreate(myLineName,OBJ_TREND,0,myFirstTime,myFirstPrice,mySecondTime,mySecondPrice);//确定两点坐标      ObjectSet(myLineName,OBJPROP_STYLE,myLineStyle); //线型      ObjectSet(myLineName,OBJPROP_COLOR,myLineColor); //线色      ObjectSet(myLineName,OBJPROP_WIDTH, 1); //线宽      ObjectSet(myLineName,OBJPROP_BACK,false);      ObjectSet(myLineName,OBJPROP_RAY,false);   } 
/*函    数:在屏幕上显示文字标签输入参数:string LableName 标签名称,如果显示多个文本,名称不能相同          string LableDoc 文本内容          int Corner 文本显示角          int LableX 标签X位置坐标          int LableY 标签Y位置坐标          int DocSize 文本字号          string DocStyle 文本字体          color DocColor 文本颜色输出参数:在指定的位置(X,Y)按照指定的字号、字体及颜色显示指定的文本算法说明:*/void iDisplayInfo(string LableName,string LableDoc,int Corner,int LableX,int LableY,int DocSize,string DocStyle,color DocColor)   {      if (Corner == -1) return(0);      ObjectCreate(LableName, OBJ_LABEL, 0, 0, 0);      ObjectSetText(LableName, LableDoc, DocSize, DocStyle,DocColor);      ObjectSet(LableName, OBJPROP_CORNER, Corner);      ObjectSet(LableName, OBJPROP_XDISTANCE, LableX);      ObjectSet(LableName, OBJPROP_YDISTANCE, LableY);   } 
/*函    数:标注符号和画线、文字参数说明:string myType 标注类型:Dot画点、HLine画水平线、VLine画垂直线、myString显示文字          int myBarPos 指定蜡烛坐标          double myPrice 指定价格坐标          color myColor 符号颜色          int mySymbol 符号代码,108为圆点          string myString 文字内容,在指定的蜡烛位置显示文字函数返回:在指定的蜡烛和价格位置标注符号或者画水平线、垂直线*/void iDrawSign(string myType,int myBarPos,double myPrice,color myColor,int mySymbol,string myString,int myDocSize)      {         if (myType=="Text")            {               ObjectDelete(TextBarString);               TextBarString=myType+Time[myBarPos];               ObjectCreate(TextBarString,OBJ_TEXT,"",Time[myBarPos],myPrice);               ObjectSet(TextBarString,OBJPROP_COLOR,myColor);//颜色               ObjectSet(TextBarString,OBJPROP_FONTSIZE,myDocSize);//大小               ObjectSetText(TextBarString,myString);//文字内容               ObjectSet(TextBarString,OBJPROP_BACK,true);            }         if (myType=="Dot")            {               ObjectDelete(DotBarString);               DotBarString=myType+Time[myBarPos];               ObjectCreate(DotBarString,OBJ_ARROW,0,Time[myBarPos],myPrice);               ObjectSet(DotBarString,OBJPROP_COLOR,myColor);               ObjectSet(DotBarString,OBJPROP_ARROWCODE,mySymbol);               ObjectSet(DotBarString,OBJPROP_BACK,false);            }         if (myType=="HLine")            {               ObjectDelete(HLineBarString);               HLineBarString=myType+Time[myBarPos];               ObjectCreate(HLineBarString,OBJ_HLINE,0,Time[myBarPos],myPrice);               ObjectSet(HLineBarString,OBJPROP_COLOR,myColor);               ObjectSet(HLineBarString,OBJPROP_BACK,false);            }         if (myType=="VLine")            {               ObjectDelete(VLineBarString);               VLineBarString=myType+Time[myBarPos];               ObjectCreate(VLineBarString,OBJ_VLINE,0,Time[myBarPos],myPrice);               ObjectSet(VLineBarString,OBJPROP_COLOR,myColor);               ObjectSet(VLineBarString,OBJPROP_BACK,false);            }     } 
/*函    数:物件颜色输入参数:数值输出参数:颜色算    法:负数为红色,正数为绿色,0为灰色*/color iObjectColor(double myInput)   {      color myColor;      if (myInput > 0)         myColor = Green; //正数颜色为绿色      if (myInput  
/*函    数:获取最后错误信息输入参数:数值输出参数:错误信息算    法:*/string iGetErrorInf0(){   int myLastErrorMub=GetLastError();   string myLastErrorStr;   if(myLastErrorMub!=0)      {         switch (myLastErrorMub)            {               case 0:myLastErrorStr="错误代码:"+0+"没有错误返回";break;               case 1:myLastErrorStr="错误代码:"+1+"没有错误返回但结果不明";break;               case 2:myLastErrorStr="错误代码:"+2+"一般错误";break;               case 3:myLastErrorStr="错误代码:"+3+"无效交易参量";break;               case 4:myLastErrorStr="错误代码:"+4+"交易服务器繁忙";break;               case 5:myLastErrorStr="错误代码:"+5+"客户终端旧版本";break;               case 6:myLastErrorStr="错误代码:"+6+"没有连接服务器";break;               case 7:myLastErrorStr="错误代码:"+7+"没有权限";break;               case 8:myLastErrorStr="错误代码:"+8+"请求过于频繁";break;               case 9:myLastErrorStr="错误代码:"+9+"交易运行故障";break;               case 64:myLastErrorStr="错误代码:"+64+"账户禁止";break;               case 65:myLastErrorStr="错误代码:"+65+"无效账户";break;               case 128:myLastErrorStr="错误代码:"+128+"交易超时";break;               case 129:myLastErrorStr="错误代码:"+129+"无效价格";break;               case 130:myLastErrorStr="错误代码:"+130+"无效停止";break;               case 131:myLastErrorStr="错误代码:"+131+"无效交易量";break;               case 132:myLastErrorStr="错误代码:"+132+"市场关闭";break;               case 133:myLastErrorStr="错误代码:"+133+"交易被禁止";break;               case 134:myLastErrorStr="错误代码:"+134+"资金不足";break;               case 135:myLastErrorStr="错误代码:"+135+"价格改变";break;               case 136:myLastErrorStr="错误代码:"+136+"开价";break;               case 137:myLastErrorStr="错误代码:"+137+"经纪繁忙";break;               case 138:myLastErrorStr="错误代码:"+138+"重新开价";break;               case 139:myLastErrorStr="错误代码:"+139+"定单被锁定";break;               case 140:myLastErrorStr="错误代码:"+140+"只允许看涨仓位";break;               case 141:myLastErrorStr="错误代码:"+141+"过多请求";break;               case 145:myLastErrorStr="错误代码:"+145+"因为过于接近市场,修改否定";break;               case 146:myLastErrorStr="错误代码:"+146+"交易文本已满";break;               case 147:myLastErrorStr="错误代码:"+147+"时间周期被经纪否定";break;               case 148:myLastErrorStr="错误代码:"+148+"开单和挂单总数已被经纪限定";break;               case 149:myLastErrorStr="错误代码:"+149+"当对冲备拒绝时,打开相对于现有的一个单置";break;               case 150:myLastErrorStr="错误代码:"+150+"把为反FIFO规定的单子平掉";break;               case 4000:myLastErrorStr="错误代码:"+4000+"没有错误";break;               case 4001:myLastErrorStr="错误代码:"+4001+"错误函数指示";break;               case 4002:myLastErrorStr="错误代码:"+4002+"数组索引超出范围";break;               case 4003:myLastErrorStr="错误代码:"+4003+"对于调用堆栈储存器函数没有足够内存";break;               case 4004:myLastErrorStr="错误代码:"+4004+"循环堆栈储存器溢出";break;               case 4005:myLastErrorStr="错误代码:"+4005+"对于堆栈储存器参量没有内存";break;               case 4006:myLastErrorStr="错误代码:"+4006+"对于字行参量没有足够内存";break;               case 4007:myLastErrorStr="错误代码:"+4007+"对于字行没有足够内存";break;               case 4008:myLastErrorStr="错误代码:"+4008+"没有初始字行";break;               case 4009:myLastErrorStr="错误代码:"+4009+"在数组中没有初始字串符";break;               case 4010:myLastErrorStr="错误代码:"+4010+"对于数组没有内存";break;               case 4011:myLastErrorStr="错误代码:"+4011+"字行过长";break;               case 4012:myLastErrorStr="错误代码:"+4012+"余数划分为零";break;               case 4013:myLastErrorStr="错误代码:"+4013+"零划分";break;               case 4014:myLastErrorStr="错误代码:"+4014+"不明命令";break;               case 4015:myLastErrorStr="错误代码:"+4015+"错误转换(没有常规错误)";break;               case 4016:myLastErrorStr="错误代码:"+4016+"没有初始数组";break;               case 4017:myLastErrorStr="错误代码:"+4017+"禁止调用DLL ";break;               case 4018:myLastErrorStr="错误代码:"+4018+"数据库不能下载";break;               case 4019:myLastErrorStr="错误代码:"+4019+"不能调用函数";break;               case 4020:myLastErrorStr="错误代码:"+4020+"禁止调用智能交易函数";break;               case 4021:myLastErrorStr="错误代码:"+4021+"对于来自函数的字行没有足够内存";break;               case 4022:myLastErrorStr="错误代码:"+4022+"系统繁忙 (没有常规错误)";break;               case 4050:myLastErrorStr="错误代码:"+4050+"无效计数参量函数";break;               case 4051:myLastErrorStr="错误代码:"+4051+"无效参量值函数";break;               case 4052:myLastErrorStr="错误代码:"+4052+"字行函数内部错误";break;               case 4053:myLastErrorStr="错误代码:"+4053+"一些数组错误";break;               case 4054:myLastErrorStr="错误代码:"+4054+"应用不正确数组";break;               case 4055:myLastErrorStr="错误代码:"+4055+"自定义指标错误";break;               case 4056:myLastErrorStr="错误代码:"+4056+"不协调数组";break;               case 4057:myLastErrorStr="错误代码:"+4057+"整体变量过程错误";break;               case 4058:myLastErrorStr="错误代码:"+4058+"整体变量未找到";break;               case 4059:myLastErrorStr="错误代码:"+4059+"测试模式函数禁止";break;               case 4060:myLastErrorStr="错误代码:"+4060+"没有确认函数";break;               case 4061:myLastErrorStr="错误代码:"+4061+"发送邮件错误";break;               case 4062:myLastErrorStr="错误代码:"+4062+"字行预计参量";break;               case 4063:myLastErrorStr="错误代码:"+4063+"整数预计参量";break;               case 4064:myLastErrorStr="错误代码:"+4064+"双预计参量";break;               case 4065:myLastErrorStr="错误代码:"+4065+"数组作为预计参量";break;               case 4066:myLastErrorStr="错误代码:"+4066+"刷新状态请求历史数据";break;               case 4067:myLastErrorStr="错误代码:"+4067+"交易函数错误";break;               case 4099:myLastErrorStr="错误代码:"+4099+"文件结束";break;               case 4100:myLastErrorStr="错误代码:"+4100+"一些文件错误";break;               case 4101:myLastErrorStr="错误代码:"+4101+"错误文件名称";break;               case 4102:myLastErrorStr="错误代码:"+4102+"打开文件过多";break;               case 4103:myLastErrorStr="错误代码:"+4103+"不能打开文件";break;               case 4104:myLastErrorStr="错误代码:"+4104+"不协调文件";break;               case 4105:myLastErrorStr="错误代码:"+4105+"没有选择定单";break;               case 4106:myLastErrorStr="错误代码:"+4106+"不明货币对";break;               case 4107:myLastErrorStr="错误代码:"+4107+"无效价格";break;               case 4108:myLastErrorStr="错误代码:"+4108+"无效定单编码";break;               case 4109:myLastErrorStr="错误代码:"+4109+"不允许交易";break;               case 4110:myLastErrorStr="错误代码:"+4110+"不允许长期";break;               case 4111:myLastErrorStr="错误代码:"+4111+"不允许短期";break;               case 4200:myLastErrorStr="错误代码:"+4200+"定单已经存在";break;               case 4201:myLastErrorStr="错误代码:"+4201+"不明定单属性";break;               case 4202:myLastErrorStr="错误代码:"+4202+"定单不存在";break;               case 4203:myLastErrorStr="错误代码:"+4203+"不明定单类型";break;               case 4204:myLastErrorStr="错误代码:"+4204+"没有定单名称";break;               case 4205:myLastErrorStr="错误代码:"+4205+"定单坐标错误";break;               case 4206:myLastErrorStr="错误代码:"+4206+"没有指定子窗口";break;               case 4207:myLastErrorStr="错误代码:"+4207+"定单一些函数错误";break;               case 4250:myLastErrorStr="错误代码:"+4250+"错误设定发送通知到队列中";break;               case 4251:myLastErrorStr="错误代码:"+4251+"无效参量- 空字符串传递到SendNotification()函数";break;               case 4252:myLastErrorStr="错误代码:"+4252+"无效设置发送通知(未指定ID或未启用通知)";break;               case 4253:myLastErrorStr="错误代码:"+4253+"通知发送过于频繁";break;            }      }   return(myLastErrorStr);}int init()   {      //显示基本信息      iDisplayInfo("Author", "作者:老易 QQ:921795", Corner, 18, 15, 8, "", SlateGray);      iDisplayInfo("Symbol", Symbol(), Corner, 25, 30, 14, "Arial Bold", DodgerBlue);      iDisplayInfo("TradeInfo", "欢迎使用!", Corner, 5, 50, 9, "", Olive);      iShowInfo();      //初始化预设变量      Lots=预设开仓量;      ValidStartTime=有效交易开始时间;      ValidEndTime=有效交易结束时间;      ServerTime=是否采用服务器时间;      MyOrderComment=订单注释;      MyMagicNum=订单特征码; 
      //      return(0);   } 
int deinit()   {      ObjectsDeleteAll();      Comment ("");      return(0);   }  
  
[/ol]复制代码 |