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]复制代码 |