面板分享DiggerGo_Two源代码
面板分享DiggerGo_Two源代码 简介: ① 小编建议:→ 免责声明:本EA未经测 ①小编建议: → 免责声明:本EA未经测试,请自行通过回测或实盘测试验证其效果。 本网站不对因使用本EA造成的任何损失承担责任,据此入市,风险自担! → EA测试流程建议: 1. 历史回测:通过历史数据简单验证EA策略的可行性, 初步确定适用的交易品种和时间周期,筛选出1-2款符合需求的EA及其参数。 2. 模拟盘测试:在模拟账户上运行一段时间,观察实际表现。 3. 实盘应用:确认稳定盈利后,再投入真实账户交易。 ②小编说说: → EA的本质:EA是将交易策略程序化,由电脑自动执行的工具。 它并非洪水猛兽,也不是躺赚的神器,而是一种辅助手段。从博弈论角度看, 市场是零和游戏,你的盈利来自他人的亏损,反之亦然。 如果存在一种“人人皆赚”的策略,谁来承担亏损?若无人亏损,你的利润又从何而来? → 个性化选择:不同性格的人使用同一款EA,因参数设置不同, 效果也会有差异。建议根据自身性格,挑选合适的EA或EA组合,并调整参数与之磨合。找到契合点后,盈利自然水到渠成。 → 使用建议: 根据个人交易风格选择EA,适合自己的才是最好的。 可以尝试组合多款策略不同的EA,根据交易理念和经验设置参数。 让每款EA交易多个品种,并在每个品种上控制微小风险,以分散风险、提升收益,实现长期稳定盈利。 ```cpp //+------------------------------------------------------------------+ //| 交易面板系统.mq4 | //| 版权 © 2023-2025, AI编程zblog | //| http://www.eawalk.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2024,eawalk.com" #property link "http://www.eawalk.com" string ver = "篮子 1.1"; // 交易面板系统.mq4 #property version "1.1" #property strict #property description "账户管理顾问。显示当前账户正在交易的工具对。" #property description "显示每个工具对在特定时间内的盈利情况。帮助在多个打开的窗口之间切换。" #property description "账户管理顾问。显示当前账户正在交易的工具对。" #ifdef MQL5 MqlTick tick; MqlTradeRequest request; MqlTradeResult result; MqlTradeCheckResult check; ENUM_ORDER_TYPE_FILLINGFillingMode=ORDER_FILLING_RETURN; #endif //+------------------------------------------------------------------+ input color 背景颜色 = clrIvory; // 背景颜色 input double 窗口宽度比例 = 1.2; // 窗口宽度比例 input double 窗口高度比例 = 1.0; // 窗口高度比例 input color 盈利颜色 = clrLime; // 盈利颜色 input color 亏损颜色 = clrPink; // 亏损颜色 input bool 发送邮件通知 = true; // 发送邮件通知 input int 重新开启 = false; // 重新开启 input double 自动平仓 = 0.0; // 自动平仓 int orders=0,AN,Y=0,X=0,dY=0,dX=0,n=0; bool LANGUAGE=false; double tOrders[100][3]; double History[100][6]; string NameAccount,Symbl[100]; double ProfitAll[7]; //+------------------------------------------------------------------+ void OnTimer(){ OnTick();} void OnTick() { //-----------------------------------------------------------------------// // // // // // 仓位控制 // // // // // //-----------------------------------------------------------------------// ArrayInitialize(tOrders,0); double Profit=0,ProfitALL=0; int OT=0,i,j; string Symb; #ifdef MQL4//---------------------------- MT4--------------------------------------------------- for (i=OrdersTotal()-1; i>=0;i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue; Symb = OrderSymbol(); Profit=OrderProfit()+OrderSwap()+OrderCommission(); if (OrderType()==OP_BUY)OT=1; else OT=-1; #endif #ifdef MQL5//--------------------------- MT5--------------------------------------------------- for(i=PositionsTotal()-1;i>=0; i--) { Symb=PositionGetSymbol(i); Profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)+GetPositionCommission()2; if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) OT=1; else OT=-1; #endif //------------------------------------------------------------------- ProfitALL+=Profit; j=Insrt(Symb); if (n0)tOrders[j][1]++;// [1] 买入订单数 if (OT=自动平仓) { if (发送邮件通知) SendMail(IntegerToString(AN)," 篮子关闭所有仓位"); CloseAll(); } //----------------------------------------------------------------------------------// // // // 显示各工具的盈利表格 // // // //----------------------------------------------------------------------------------// string name,SN; Y=25; int DY=19; for(j=0;j<=n;j++)//所有有开仓的工具 { SN=IntegerToString(j); name=StrCon("cmInsrt",SN);X=0; EditCreate(0,name,0,X,Y+DYj,100,20,Symbl[j],"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,clrWhite);//工具名称 name=StrCon(name,"Profit");X+=105; EditCreate(0,name,0,X,Y+DYj,70,20,DoubleToString(tOrders[j][0],2),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrBlack,//工具盈利 tOrders[j][0]>0?盈利颜色:tOrders[j][0]0?盈利颜色:History[j][i]0?盈利颜色:ProfitALL0?盈利颜色:ProfitAll[i]99) j=99; Symbl[j]=Sym; return(j); } //+------------------------------------------------------------------+ bool EditCreate(const long chart_ID=0, // 图表ID const string name="编辑框", // 对象名称 const int sub_window=0, // 子窗口编号 const int x=0, // X轴坐标 const int y=0, // Y轴坐标 const int width=50, // 宽度 const int height=18, // 高度 const string text="文本", // 文本 const string font="Arial", //字体 const int font_size=8, // 字体大小 const ENUM_ALIGN_MODE align=ALIGN_RIGHT, // 对齐方式 const bool read_only=true, // 是否只读 const ENUM_BASE_CORNER corner=CORNER_RIGHT_LOWER, // 图表角落绑定 const color clr=clrBlack, // 文字颜色 const color back_clr=clrWhite, // 背景颜色 const color border_clr=clrNONE, // 边框颜色 const bool back=false, // 是否在后台 const bool selection=false, // 是否可选中移动 const bool hidden=true, // 是否隐藏在对象列表中 const long z_order=0) // 鼠标点击优先级 { ResetLastError(); if(ObjectFind(chart_ID,name)!=-1) ObjectDelete(chart_ID,name); if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0)) { Print(FUNCTION, ": 无法创建对象 ",name,"! 错误代码 = ",GetLastError()); return(false); } ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(dX+x窗口宽度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(dY+y窗口高度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,(int)(width窗口宽度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,(int)(height窗口高度比例)); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetInteger(chart_ID,name,OBJPROP_ALIGN,align); ObjectSetInteger(chart_ID,name,OBJPROP_READONLY,read_only); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); return(true); } //+------------------------------------------------------------------+ bool ButtonCreate(const long chart_ID=0, // 图表ID const string name="按钮", // 按钮名称 const int sub_window=0, // 子窗口编号 const long x=0, // X轴坐标 const long y=0, // Y轴坐标 const int width=50, //按钮宽度 const int height=18, // 按钮高度 const string text="按钮", // 文本 const string font="Arial", // 字体 const int font_size=10, // 字体大小 const color clr=clrRed, // 文字颜色 const color clrfon=clrBlack, // 背景颜色 const color border_clr=clrNONE, // 边框颜色 const bool state=false, const ENUM_BASE_CORNER CORNER=CORNER_RIGHT_LOWER) { if(ObjectFind(chart_ID,name)==-1) { ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,(int)(height窗口高度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,0); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,0); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,0); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,1); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1); } ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,(int)(width窗口宽度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr); ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,clrfon); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(dX+x窗口宽度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(dY+y窗口高度比例)); return(true); } //---------------------- bool RectLabelCreate(const long chart_ID=0, // 图表ID const string name="矩形标签", // 标签名称 const int sub_window=0, // 子窗口编号 const long x=0, // X轴坐标 const long y=0, // Y轴坐标 const int width=50, // 宽度 const int height=18, // 高度 const color back_clr=clrNONE, // 背景颜色 const color clr=clrNONE, // 平面边框颜色 const ENUM_LINE_STYLE style=STYLE_SOLID, // 平面边框样式 const int line_width=1, // 平面边框粗细 const bool back=false, // 是否在后台 const bool selection=false, // 是否可选中移动 const bool hidden=true, // 是否隐藏在对象列表中 const long z_order=0, const int CORNER=CORNER_LEFT_LOWER) { ResetLastError(); if(ObjectFind(chart_ID,name)==-1) { ObjectCreate(chart_ID,name,OBJ_RECTANGLE_LABEL,sub_window,0,0); } ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_TYPE,BORDER_FLAT); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,CORNER); ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,(int)(width窗口宽度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,(int)(height窗口高度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(dX+x窗口宽度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(dY+y窗口高度比例)); return(true); } //-------------------------------------------------------------------- bool LabelCreate(const long chart_ID=0, // 图表ID const string name="标签", // 标签名称 const int sub_window=0, // 子窗口编号 const int x=0, // X轴坐标 const int y=0, // Y轴坐标 const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // 图表角落绑定 const string text="标签", // 文本 const string font="Arial", // 字体 const int font_size=10, // 字体大小 const color clr=clrBlack, // 颜色 const double angle=0.0, // 文本倾斜角度 const ENUM_ANCHOR_POINT anchor=ANCHOR_RIGHT_UPPER,// 锚点方式 const bool back=false, // 是否在后台 const bool selection=false, // 是否可选中移动 const bool hidden=true, // 是否隐藏在对象列表中 const long z_order=0) // 鼠标点击优先级 { ResetLastError(); if(ObjectFind(chart_ID,name)==-1) { if(!ObjectCreate(chart_ID,name,OBJ_LABEL,sub_window,0,0)) { return(false); } } ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(dX+x窗口宽度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(dY+y窗口高度比例)); ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner); ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetString(chart_ID,name,OBJPROP_FONT,font); ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size); ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle); ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); return(true); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectsDeleteAll(0); EventKillTimer(); } //------------------------------------------------------------------- bool Liz() { if(AccountInfoInteger(ACCOUNT_TRADE_MODE)!=ACCOUNT_TRADE_MODE_REAL)return(true); if (AN==0) return(true); if (StringFind(NameAccount,"Хлыстов ВладимирСтепанович")!=-1) return(true); if (StringFind(NameAccount,"Владимир СтепановичХлыстов")!=-1) return(true); return(false); } //+------------------------------------------------------------------+ void History() { double Profit=0; datetime OCT; ulong Ticket; int i,j; string Symb; ArrayInitialize(ProfitAll,0); ArrayInitialize(History,0); #ifdef MQL4 //----------------------------MT4 --------------------------------------------------- for (i=OrdersHistoryTotal()-1;i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue; if (OrderType()!=OP_BUY&& OrderType()!=OP_SELL) continue; Ticket = OrderTicket(); Symb =OrderSymbol(); Profit=OrderProfit()+OrderSwap()+OrderCommission(); OCT = OrderCloseTime(); Profit =OrderProfit()+OrderSwap()+OrderCommission(); #endif #ifdef MQL5//--------------------------- MT5--------------------------------------------------- ulong order_ticket; // 订单票号,由其产生的交易 long deal_type ; // 交易操作类型 long position_ID; // 仓位标识符 datetime from_date=0; // 从一开始 datetime to_date=TimeCurrent();//到当前时刻 HistorySelect(from_date,to_date); intdeals=HistoryDealsTotal(); for(i=0;i=iTime(NULL,PERIOD_D1,0)) {History[j][0]+=Profit;ProfitAll[0]+=Profit;}//今天 else { if(OCT>=iTime(NULL,PERIOD_D1,1)) {History[j][1]+=Profit;ProfitAll[1]+=Profit;}//昨天 else { if (OCT>=iTime(NULL,PERIOD_D1,2)) {History[j][2]+=Profit;ProfitAll[2]+=Profit;}//前天 } } if(OCT>=iTime(NULL,PERIOD_W1,0)) {History[j][3]+=Profit;ProfitAll[3]+=Profit;}//本周 if(OCT>=iTime(NULL,PERIOD_MN1,0)) {History[j][4]+=Profit;ProfitAll[4]+=Profit;}//本月 History[j][5]+=Profit;ProfitAll[5]+=Profit; // [5] 该工具累计盈利 } } //+------------------------------------------------------------------+ #ifdef MQL5 double GetPositionCommission(void) { doubleCommission=::PositionGetDouble(POSITION_COMMISSION); if(Commission==0) { ulongTicket=GetPositionDealIn(); if(Ticket>0) { const doubleLotsIn=::HistoryDealGetDouble(Ticket,DEAL_VOLUME); if(LotsIn>0) Commission=::HistoryDealGetDouble(Ticket,DEAL_COMMISSION)::PositionGetDouble(POSITION_VOLUME)/LotsIn; } } return(Commission); } //-------------------------------------------------------------------- ulong GetPositionDealIn(const ulongHistoryTicket=0) { ulong Ticket=0; if((HistoryTicket==0) ? ::HistorySelectByPosition(::PositionGetInteger(POSITION_TICKET)): ::HistorySelectByPosition(HistoryTicket)) { const intTotal=::HistoryDealsTotal(); for(int i=0; i0) if((ENUM_DEAL_ENTRY)::HistoryDealGetInteger(TicketDeal,DEAL_ENTRY)==DEAL_ENTRY_IN) { Ticket=TicketDeal; break; } } } return(Ticket); } //+------------------------------------------------------------------+ #endif string StrCon(string t1=NULL,stringt2=NULL,string t3=NULL,string t4=NULL,string t5=NULL,string t6=NULL,stringt7=NULL,string t8=NULL,string t9=NULL,string t10=NULL,string t11=NULL) { string str; #ifdef MQL4str=StringConcatenate(#endif #ifdef MQL5StringConcatenate(str,#endif t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11); return(str); } //+------------------------------------------------------------------+ string AC; int OnInit() { AN=(int)AccountInfoInteger(ACCOUNT_LOGIN); NameAccount=AccountInfoString(ACCOUNT_NAME); AC = ""+AccountInfoString(ACCOUNT_CURRENCY); History(); EventSetTimer(1); LANGUAGE=TerminalInfoString(TERMINAL_LANGUAGE)=="Russian"; ChartSetInteger(0,CHART_COLOR_FOREGROUND,背景颜色);//轴、刻度和OHLC行的颜色 ChartSetInteger(0,CHART_COLOR_BACKGROUND,背景颜色); ChartSetInteger(0,CHART_FOREGROUND,false);//价格图表置于前台 ChartSetInteger(0,CHART_SHOW_GRID,false); ChartSetInteger(0,CHART_BRING_TO_TOP,true); ChartSetInteger(0,CHART_SHOW_ASK_LINE,false); ChartSetInteger(0,CHART_SHOW_BID_LINE,false); ChartSetInteger(0,CHART_SHOW_OHLC,false);//左上角显示OHLC值 ChartSetInteger(0,CHART_SHOW_LAST_LINE,false); ChartSetInteger(0,CHART_SHOW_GRID,false); ChartSetInteger(0,CHART_SHOW_VOLUMES,false); ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,false); ChartSetInteger(0,CHART_CONTEXT_MENU,false);//启用/禁用右键上下文菜单 ChartSetInteger(0,CHART_CROSSHAIR_TOOL,false);//十字线 ChartSetInteger(0,CHART_MOUSE_SCROLL,false);//鼠标左键水平滚动图表 ChartSetInteger(0,CHART_SHOW_ONE_CLICK,false); #ifdef MQL5 ChartSetInteger(0,CHART_SHOW,false);//价格图表绘制标志 FillingMode=ORDER_FILLING_RETURN;// 该模式用于市场订单 intFILLING_MODE=(int)SymbolInfoInteger(_Symbol, SYMBOL_FILLING_MODE); if ((SYMBOL_FILLING_IOC &FILLING_MODE)==SYMBOL_FILLING_IOC) FillingMode=ORDER_FILLING_IOC;// 全部或部分 if ((SYMBOL_FILLING_FOK &FILLING_MODE)==SYMBOL_FILLING_FOK) FillingMode=ORDER_FILLING_FOK;//必须完全按指定数量执行 #endif ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,背景颜色); ChartSetInteger(0,CHART_COLOR_CHART_DOWN,背景颜色); ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,背景颜色); ChartSetInteger(0,CHART_COLOR_CHART_UP,背景颜色); ChartSetInteger(0,CHART_COLOR_CHART_LINE,背景颜色); ChartSetInteger(0,CHART_COLOR_STOP_LEVEL,背景颜色); ChartSetInteger(0,CHART_COLOR_LAST,背景颜色); ChartSetInteger(0,CHART_SHOW_TRADE_LEVELS,背景颜色); ChartSetInteger(0,CHART_DRAG_TRADE_LEVELS,false); ChartSetInteger(0,CHART_SHOW_DATE_SCALE,false); ChartSetInteger(0,CHART_SHOW_PRICE_SCALE,false); ChartSetInteger(0,CHART_COLOR_VOLUME,背景颜色); ChartSetInteger(0,CHART_HEIGHT_IN_PIXELS,100); X=0;Y=0; EditCreate(0,"cm_1",0,X,Y,100,20,ver,"ARIALBLACK",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue); X+=105; EditCreate(0,"cm _2",0,X,Y,70,20,"盈利","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75; EditCreate(0,"cm_b",0,X,Y,30,20,"买入","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=29; EditCreate(0,"cm_s",0,X,Y,30,20,"卖出","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=35; EditCreate(0,"cm_3",0,X,Y,70,20,"今天","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75; EditCreate(0,"cm_4",0,X,Y,70,20,TimeToString(iTime(NULL,PERIOD_D1,1),TIME_DATE),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75; EditCreate(0,"cm_5",0,X,Y,70,20,TimeToString(iTime(NULL,PERIOD_D1,2),TIME_DATE),"Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75; EditCreate(0,"cm_6",0,X,Y,70,20,"本周","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75; EditCreate(0,"cm_7",0,X,Y,70,20,"本月","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue);X+=75; EditCreate(0,"cm_8",0,X,Y,70,20,"总计","Arial",8,ALIGN_CENTER,true,CORNER_LEFT_UPPER,clrWhite,clrBlue); ChartSetInteger(0,CHART_BRING_TO_TOP,true); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ int Slippage = 1000; #ifdef MQL4 bool CloseAll(string Symbol1="ALL") { bool error=true; int j,err,nn=0,OT; string Symb; double Profit=0,OOP; while(!IsStopped()) { for (j = OrdersTotal()-1;j >= 0; j--) { if(OrderSelect(j, SELECT_BY_POS)) { Symb= OrderSymbol(); if(Symb == Symbol1 || Symbol1=="ALL") { OT = OrderType(); OOP=OrderOpenPrice(); Profit=OrderProfit()+OrderSwap()+OrderCommission(); if (OT>1) { error=OrderDelete(OrderTicket()); } if (OT==OP_BUY) { error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symb,MODE_BID),(int)MarketInfo(Symb,MODE_DIGITS)),Slippage,Blue); } if (OT==OP_SELL) { error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(Symb,MODE_ASK),(int)MarketInfo(Symb,MODE_DIGITS)),Slippage,Red); } if (!error) { err = GetLastError(); if (err10){/ALERT(StringConcatenate(Symb,LANGUAGE?" 未能关闭所有交易,仍剩余 ":"未能关闭所有交易,仍剩余",k));/return(false);} Sleep(1000); RefreshRates(); } ObjectsDeleteAll(0,"cm"); OnInit(); return(true); } #endif //-------------------------------------------------------------------- #ifdef MQL5 bool CloseAll(string Symbol1="ALL") { bool error=true; int i,err,nn=0; long OT; string Symb; int k=0; double Profit=0; while(!IsStopped()) { k=0; for (i =PositionsTotal()-1; i >= 0; i--) { Symb=PositionGetSymbol(i); if (Symb !=Symbol1 && Symbol1!="ALL") continue; Profit=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)+GetPositionCommission()*2; OT =PositionGetInteger(POSITION_TYPE); ZeroMemory(request); ZeroMemory(result); request.deviation = Slippage; request.volume=PositionGetDouble(POSITION_VOLUME); request.position = PositionGetInteger(POSITION_TICKET); request.action=TRADE_ACTION_DEAL; request.comment=""; request.type_filling = FillingMode; request.symbol= Symb; request.magic = PositionGetInteger(POSITION_MAGIC); k++; if(OT==POSITION_TYPE_BUY) { request.price=SymbolInfoDouble(Symb,SYMBOL_BID); request.type=ORDER_TYPE_SELL; } if(OT==POSITION_TYPE_SELL) { request.price=SymbolInfoDouble(Symb,SYMBOL_ASK); request.type=ORDER_TYPE_BUY; } if(!OrderSend(request,result)) { err= GetLastError(); if(err10)return(false); Sleep(1000); } return(true); } #endif //-------------------------------------------------------------------- void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &name) { int i,j,ret=IDYES; long ch,prevChart=0; if(id==CHARTEVENT_OBJECT_CLICK) { string txt,Symb=NULL; if(StringFind(name,"cm Insrt")!=-1) { i=StringFind(name,"Profit"); if (i==-1)//点击了货币对名称按钮 { Symb=ObjectGetString(0,name,OBJPROP_TEXT); i=-1; while(i