欢迎访问

部分平仓源码

author emer | 30 人阅读 | 0 人评论 |

部分平仓源码 简介: “专家顾问(EA)”会监控所有或指定工具 “专家顾问(EA)”会监控所有或指定工具的未平仓头寸, 并在达到预设利润时执行部分平仓。您可指定特定的“魔法数字”(Magic Number), 或设为“-1”以覆盖所有头寸。 EA支持设置4个平仓级别,例如: 利润达50点时,平仓50%; 利润达100点时,再平仓30%; 利润达150点时,平仓10%; 利润达250点时,平仓剩余10%。 首次部分平仓后,EA会将仓位调整为“盈亏平衡”状态,并附加“NoLoss”盈利保护点。 例如,若“NoLoss”设为10点,当利润达到100点时,EA平仓50%,并将止损(SL)设为开仓价上方10点(适用于买入单)。 cpp //+------------------------------------------------------------------+ //| 交易面板系统.mq4 | //| 版权 © 2023-2025, AI编程zblog | //| http://www.eawalk.com | //+------------------------------------------------------------------+ #property copyright"Copyright © 2024, AI编程zblog" #propertylink "www.eawalk.com" #property version "1.0" #property strict #propertydescription "1. 专家顾问会跟踪所有或指定工具的未平仓头寸。" #propertydescription "2. 当达到指定利润时,平掉部分仓位。" #propertydescription "3. 在首次部分平仓时,将仓位转为盈亏平衡并附加 NoLoss 盈利点。" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ enum tt { tr2=0,// 当前货币对 tr1=1,// 所有货币对 }; input tt 交易范围 = 1; // 交易范围选择:0为当前货币对,1为所有货币对 extern int 魔法数字 = -1; // 魔法数字:-1 表示监控所有订单 extern int 平仓级别1 = 50; // 平仓级别1(单位:点) extern int 平仓级别2 = 100; // 平仓级别2(单位:点) extern int 平仓级别3 = 150; // 平仓级别3(单位:点) extern int 平仓级别4 = 250; // 平仓级别4(单位:点) extern int 平仓百分比1 = 50; // 平仓百分比1(基于初始仓位) extern int 平仓百分比2 = 30; // 平仓百分比2(基于初始仓位) extern int 平仓百分比3 = 10; // 平仓百分比3(基于初始仓位) extern int 平仓百分比4 = 10; // 平仓百分比4(基于初始仓位) extern int 无损利润点 = 0; // 无损利润点:在首次平仓后转为盈亏平衡时的附加盈利点 extern int 滑点容差 = 3; //滑点容差(单位:点) sinput double 界面缩放比例 = 1.2; // 界面缩放比例 input bool 截图保存 = true; // 是否保存截图 input color 颜色1 = clrWhite; // 颜色1 input color 颜色2 = clrAqua; // 颜色2 input color 颜色3 = clrMagenta; // 颜色3 input color 颜色4 = clrDarkOrange; // 颜色4 //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string AC,GVp; int 无损利润,Magic,LevelClose[4]; intPercentClose[4]; boolShowOrder=true,SymbolAll=false,LANGUAGE; color ColorN[4]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { Comment(""); AC=AccountCurrency(); GVp="cm partial closing position "; if(IsTesting())GVp=GVp+" Testing"; if(IsDemo()) GVp=GVp+" Demo"; if(IsTesting()) GlobalVariablesDeleteAll(GVp); ColorN[0]=颜色1; ColorN[1]=颜色2; ColorN[2]=颜色3; ColorN[3]=颜色4; LevelClose[0]=平仓级别1; LevelClose[1]=平仓级别2; LevelClose[2]=平仓级别3; LevelClose[3]=平仓级别4; PercentClose[0]=平仓百分比1; PercentClose[1]=平仓百分比2; PercentClose[2]=平仓百分比3; PercentClose[3]=平仓百分比4; LANGUAGE=TerminalInfoString(TERMINAL_LANGUAGE)=="Russian"; intY=20; SymbolAll=交易范围==1; Magic=魔法数字; 无损利润=无损利润点; ButtonCreate(0,"cm PCP Symbol" ,0,205,Y,200,20,CORNER_RIGHT_UPPER,SymbolAll?"所有货币对":Symbol(),"Arial",12,clrBlack,clrLightGray,clrNONE,SymbolAll,false,false,true,0,LANGUAGE?"选择对所有货币对操作还是仅对当前货币对操作":"The choice to work for all currencies or only for theone on which the Expert Advisor is installed");Y+=19; EditCreate(0,"cm PCP Magic_" ,0,205,Y,101,20,"魔法数字" ,"Arial",12,ALIGN_CENTER,true,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"魔法数字(设为-1时监控所有订单)":"Magic (When settingthe value -1, the Expert Advisor sees all the magics)");Y+=19; EditCreate(0,"cm PCP CloseLevel_" ,0,205,Y,101,20,"平仓级别" ,"Arial",12,ALIGN_CENTER,true,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"平仓级别":"Closing Levels");Y+=19; EditCreate(0,"cm PCP Percents_" ,0,205,Y,101,20,"平仓百分比" ,"Arial",12,ALIGN_CENTER,true,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"平仓百分比":"Closing percentage");Y+=19; EditCreate(0,"cm PCP NoLoss_" ,0,205,Y,101,20,"无损利润点" ,"Arial",12,ALIGN_CENTER,true,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"转为盈亏平衡时的最小盈利点":"minimum profit when transferring to breakeven");Y=39; EditCreate(0,"cm PCP Magic" ,0,105,Y,100,20,IntegerToString(Magic),"Arial",12,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"魔法数字(设为-1时监控所有订单)":"Magic (When setting the value -1, the Expert Advisorsees all the magics)");Y+=19; EditCreate(0,"cm PCPCloseLevel1",0,105,Y,26,20,IntegerToString(平仓级别1),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"平仓级别(多个级别用/分隔)":"Closing Levels (Separate multiplelevels with /)"); EditCreate(0,"cm PCP CloseLevel2",0,80,Y,26,20,IntegerToString(平仓级别2),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"平仓级别(多个级别用/分隔)":"Closing Levels (Separatemultiple levels with /)"); EditCreate(0,"cm PCP CloseLevel3",0,55,Y,26,20,IntegerToString(平仓级别3),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"平仓级别(多个级别用/分隔)":"Closing Levels (Separatemultiple levels with /)"); EditCreate(0,"cm PCP CloseLevel4",0,30,Y,25,20,IntegerToString(平仓级别4),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"平仓级别(多个级别用/分隔)":"Closing Levels (Separatemultiple levels with /)");Y+=19; EditCreate(0,"cm PCP Percents1" ,0,105,Y,26,20,IntegerToString(平仓百分比1),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"平仓百分比(多个级别用/分隔)":"Closing percentage(Separate multiple levels with /)"); EditCreate(0,"cm PCP Percents2" ,0,80,Y,26,20,IntegerToString(平仓百分比2),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"平仓百分比(多个级别用/分隔)":"Closing percentage(Separate multiple levels with /)"); EditCreate(0,"cm PCP Percents3" ,0,55,Y,26,20,IntegerToString(平仓百分比3),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"平仓百分比(多个级别用/分隔)":"Closing percentage(Separate multiple levels with /)"); EditCreate(0,"cmPCP Percents4" ,0, 30,Y,25,20,IntegerToString(平仓百分比4),"Arial",11,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"平仓百分比(多个级别用/分隔)":"Closing percentage(Separate multiple levels with /)");Y+=19; EditCreate(0,"cm PCP NoLoss" ,0,105,Y,100,20,IntegerToString(无损利润) ,"Arial",12,ALIGN_CENTER,false,CORNER_RIGHT_UPPER,clrBlack,clrWhite,clrGray,false,false,true,0,LANGUAGE?"转为盈亏平衡时的最小盈利点":"minimum profit when transferring tobreakeven");Y+=19; ButtonCreate(0,"cm PCPShowOrder",0,205,Y,200,20,CORNER_RIGHT_UPPER,"显示订单","Arial",12,clrBlack,clrLightGray,clrNONE,SymbolAll,false,false,true,0,LANGUAGE?"显示/隐藏订单表格":"Show/hide the ordertable"); OnTick(); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(constint r) { if(IsTesting()) GlobalVariablesDeleteAll(GVp); ObjectsDeleteAll(0,"cm PCP"); return; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ stringOrders[100][10]; string txt=NULL; int N=0; void OnTick() { if (无损利润!=(int)StringToInteger(ObjectGetString(0,"cmPCP NoLoss",OBJPROP_TEXT))) { 无损利润=(int)StringToInteger(ObjectGetString(0,"cm PCP NoLoss",OBJPROP_TEXT)); txt=StringConcatenate(txt,LANGUAGE?"已修改":"Changed"," 无损利润 = ",无损利润,"n"); } if(Magic!=(int)StringToInteger(ObjectGetString(0,"cm PCPMagic",OBJPROP_TEXT))) { Magic=(int)StringToInteger(ObjectGetString(0,"cm PCPMagic",OBJPROP_TEXT)); txt=StringConcatenate(txt,LANGUAGE?"已修改":"Changed"," 魔法数字 = ",Magic,"n"); } if(LevelClose[0]!=(int)StringToInteger(ObjectGetString(0,"cm PCPCloseLevel1",OBJPROP_TEXT))) { LevelClose[0]=(int)StringToInteger(ObjectGetString(0,"cm PCPCloseLevel1",OBJPROP_TEXT)); txt=StringConcatenate(txt,LANGUAGE?"已修改":"Changed"," 平仓级别 1 = ",LevelClose[0],"点n"); } if(LevelClose[1]!=(int)StringToInteger(ObjectGetString(0,"cm PCPCloseLevel2",OBJPROP_TEXT))) { LevelClose[1]=(int)StringToInteger(ObjectGetString(0,"cm PCPCloseLevel2",OBJPROP_TEXT)); txt=StringConcatenate(txt,LANGUAGE?"已修改":"Changed"," 平仓级别 2 = ",LevelClose[1],"点n"); } if(LevelClose[2]!=(int)StringToInteger(ObjectGetString(0,"cm PCPCloseLevel3",OBJPROP_TEXT))) { LevelClose[2]=(int)StringToInteger(ObjectGetString(0,"cm PCPCloseLevel3",OBJPROP_TEXT)); txt=StringConcatenate(txt,LANGUAGE?"已修改":"Changed"," 平仓级别 3 = ",LevelClose[2],"点n"); } if(LevelClose[3]!=(int)StringToInteger(ObjectGetString(0,"cm PCPCloseLevel4",OBJPROP_TEXT))) { LevelClose[3]=(int)StringToInteger(ObjectGetString(0,"cm PCPCloseLevel4",OBJPROP_TEXT)); txt=StringConcatenate(txt,LANGUAGE?"已修改":"Changed"," 平仓级别 4 = ",LevelClose[3],"点n"); } //--- if(PercentClose[0]!=(int)StringToInteger(ObjectGetString(0,"cm PCPPercents1",OBJPROP_TEXT))) { PercentClose[0]=(int)StringToInteger(ObjectGetString(0,"cm PCPPercents1",OBJPROP_TEXT)); txt=StringConcatenate(txt,LANGUAGE?"已修改":"Changed"," 平仓百分比 1 = ",PercentClose[0],"%n"); } if(PercentClose[1]!=(int)StringToInteger(ObjectGetString(0,"cm PCPPercents2",OBJPROP_TEXT))) { PercentClose[1]=(int)StringToInteger(ObjectGetString(0,"cm PCPPercents2",OBJPROP_TEXT)); txt=StringConcatenate(txt,LANGUAGE?"已修改":"Changed"," 平仓百分比 2 = ",PercentClose[1],"%n"); } if(PercentClose[2]!=(int)StringToInteger(ObjectGetString(0,"cm PCPPercents3",OBJPROP_TEXT))) { PercentClose[2]=(int)StringToInteger(ObjectGetString(0,"cm PCPPercents3",OBJPROP_TEXT)); txt=StringConcatenate(txt,LANGUAGE?"已修改":"Changed"," 平仓百分比 3 = ",PercentClose[2],"%n"); } if(PercentClose[3]!=(int)StringToInteger(ObjectGetString(0,"cm PCPPercents4",OBJPROP_TEXT))) { PercentClose[3]=(int)StringToInteger(ObjectGetString(0,"cm PCPPercents4",OBJPROP_TEXT)); txt=StringConcatenate(txt,LANGUAGE?"已修改":"Changed"," 平仓百分比 4 = ",PercentClose[3],"%n"); } //--- if(ShowOrder != ObjectGetInteger(0,"cm PCP ShowOrder",OBJPROP_STATE)) { ShowOrder = ObjectGetInteger(0,"cm PCPShowOrder",OBJPROP_STATE); if(!ShowOrder) ObjectsDeleteAll(0,"cm PCP srt"); } if(SymbolAll != ObjectGetInteger(0,"cm PCP Symbol",OBJPROP_STATE)) { SymbolAll = ObjectGetInteger(0,"cm PCP Symbol",OBJPROP_STATE); ObjectSetString(0,"cm PCPSymbol",OBJPROP_TEXT,SymbolAll?"所有货币对":Symbol()); } doublePOINT,BID,ASK,Profit,OOP,OSL,SL,LotsClose; inti,DIGITS,ParentTicket=0; intNO=0; doubleOL; boolSS=false; intn=0; for(i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderMagicNumber()==Magic || Magic==-1) { string OrdSym=OrderSymbol(); if(OrdSym==Symbol() || SymbolAll) { double TekLot=OrderLots(); OL=TekLot; double STOPLEVEL=MarketInfo(OrdSym,MODE_STOPLEVEL); DIGITS=(int)MarketInfo(OrdSym,MODE_DIGITS); POINT=MarketInfo(OrdSym,MODE_POINT); BID=NormalizeDouble(MarketInfo(OrdSym,MODE_BID),DIGITS); ASK=NormalizeDouble(MarketInfo(OrdSym,MODE_ASK),DIGITS); OOP =NormalizeDouble(OrderOpenPrice(),DIGITS); OSL =NormalizeDouble(OrderStopLoss(),DIGITS); Profit =OrderProfit()+OrderCommission()+OrderSwap(); int Ticket=OrderTicket(); ParentTicket=LastPositionTicket(OrderComment()); NO=0; if(ParentTicket!=0) { if(GlobalVariableCheck(StringConcatenate(GVp,ParentTicket,OrdSym,"Num"))) { NO=((int)GlobalVariableGet(StringConcatenate(GVp,ParentTicket,OrdSym,"Num")))+1; } if(GlobalVariableCheck(StringConcatenate(GVp,ParentTicket,OrdSym,"Lots"))) { OL=GlobalVariableGet(StringConcatenate(GVp,ParentTicket,OrdSym,"Lots")); } } GlobalVariableSet(StringConcatenate(GVp,Ticket,OrdSym,"Num"),NO); GlobalVariableSet(StringConcatenate(GVp,Ticket,OrdSym,"Lots"),OL); if(NO=ArraySize(LevelClose))NO=ArraySize(LevelClose)-1; RefreshRates(); if(OrderType()=OOP)Orders[n][2]=Orders[n][2]+" 无损"; Orders[n][4]=StringConcatenate(NO," - ",DoubleToString(PercentClose[NO],0),"%"); Orders[n][5]=StringConcatenate(DoubleToString((BID-OOP)/POINT,0)," 点(",IntegerToString(LevelClose[NO]),")"); n++; if(NormalizeDouble(BID-OOP,DIGITS)>=NormalizeDouble(POINT*LevelClose[0],DIGITS)) { SL=NormalizeDouble(OOP+无损利润*POINT,DIGITS); if (OSL!=SL&& BID>SL+STOPLEVEL*POINT) { if(!OrderModify(Ticket,OOP,SL,OrderTakeProfit(),0,clrNONE)) Print("订单修改错误",(GetLastError())); elsetxt=StringConcatenate(txt,"无损保护 ",Ticket," ",OrdSym," 买入 ",DoubleToString(OSL,DIGITS)," ->",DoubleToString(SL,DIGITS),"n"); } } if(NormalizeDouble(BID-OOP,DIGITS)>=NormalizeDouble(POINT*LevelClose[NO],DIGITS)) { LotsClose=CheckVolumeValue(PercentClose[NO]/100.0*OL,OrdSym); if(LotsClose>0) { LotsClose=MathMin(LotsClose,TekLot); if(!OrderClose(Ticket,LotsClose,NormalizeDouble(BID,DIGITS),滑点容差,CLR_NONE)) { Print("平仓错误 ",GetLastError()); } else { SS=true; txt=StringConcatenate(txt,"平仓 ",Ticket,"",OrdSym," 买入",DoubleToString(LotsClose,2)," (",DoubleToString(OL,2),")",NO," 级别=",IntegerToString(LevelClose[NO]),"n"); } } } } if(OrderType()==OP_SELL) { Orders[n][2]="卖出"; if (OSL!=0 &&OSL<=OOP) Orders[n][2]=Orders[n][2]+" 无损"; Orders[n][4]=StringConcatenate(NO," -",DoubleToString(PercentClose[NO],0),"%"); Orders[n][5]=StringConcatenate(DoubleToString((OOP-ASK)/POINT,0)," 点 (",IntegerToString(LevelClose[NO]),")"); n++; if(NormalizeDouble(OOP-ASK,DIGITS)>=NormalizeDouble(POINT*LevelClose[0],DIGITS)) { SL=NormalizeDouble(OOP-无损利润*POINT,DIGITS); if (OSL!=SL&& ASK=NormalizeDouble(POINT*LevelClose[NO],DIGITS)) { LotsClose=CheckVolumeValue(PercentClose[NO]/100.0*OL,OrdSym); if(LotsClose>0) { LotsClose=MathMin(LotsClose,TekLot); if(!OrderClose(Ticket,LotsClose,NormalizeDouble(ASK,DIGITS),滑点容差,CLR_NONE)) { Print("平仓错误 ",GetLastError()); } else { SS=true; txt=StringConcatenate(txt,"平仓 ",Ticket,"",OrdSym," 卖出",DoubleToString(LotsClose,2)," (",DoubleToString(OL,2),")",NO," 级别=",IntegerToString(LevelClose[NO]),"n"); } } } } } } } } if(IsTesting() && n==0) { if(OrderSend(Symbol(),OP_BUY,CheckVolumeValue(1.0),NormalizeDouble(Ask,Digits),0,0,0,NULL,0,0)==-1)Print("错误",GetLastError()); if (OrderSend(Symbol(),OP_SELL,CheckVolumeValue(1.0),NormalizeDouble(Bid,Digits),0,0,0,NULL,0,0)==-1)Print("错误",GetLastError()); } if(ShowOrder) { int X=0,Y=20; for(i=0; i=n) { ObjectDelete(0,StringConcatenate("cm PCP srt",i,"",j)); } else { int y=100; color colort=clrWhite; switch(j) { case 0: y=100;break; case 1: y=80;break; case 2: y=50; if(StringFind(Orders[i][2],"无损")!=-1) colort=clrLime; break; case 3: y=100; if(Orders[i][8]!="") colort=ColorN[StrToInteger(Orders[i][8])];break; case 4: y=50;break; case 5: y=100; if(StringFind(Orders[i][5],"-")==-1)colort=clrLime; break; case 6: y=100; if(StringFind(Orders[i][6],"-")==-1)colort=clrLime; break; case 7: y=120;break; case 8: y=25;break; case 9: y=25;break; } EditCreate(0,StringConcatenate("cm PCP srt",i,"",j),0,X,Y,y,15,Orders[i][j],"Arial",10,ALIGN_CENTER,true,CORNER_LEFT_UPPER, clrBlack,colort,clrGray,false,false,true,0); X+=y-1; } } Y+=14; } N=n; Comment(txt); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ if (截图保存 &&SS) { #ifdef __MQL4__ int TekHour = Hour(); int Minute = Minute(); int Seconds = Seconds(); #endif #ifdef __MQL5__ MqlDateTime tm; TimeCurrent(tm); int TekHour = tm.hour; int Minute = tm.min; int Seconds = tm.sec; #endif string ScreenShotName=StringConcatenate("cmPCP","//",TimeToString(TimeCurrent(),TIME_DATE)," "); ScreenShotName=StringConcatenate(ScreenShotName,TekHour<10?"0":"",IntegerToString(TekHour),"-",Minute<10?"0":"",IntegerToString(Minute),"-",Seconds=0) { int tPos2=StringFind(aComment,"#"); if(tPos2>tPos1) { return(StrToInteger(StringSubstr(aComment,tPos2+1,StringLen(aComment)-tPos2-1))); } } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ doubleCheckVolumeValue(double volume, string Sim=NULL) { doublemin_volume=SymbolInfoDouble(Sim,SYMBOL_VOLUME_MIN); if(volumemax_volume) return(max_volume); doublevolume_step=SymbolInfoDouble(Sim,SYMBOL_VOLUME_STEP); intratio=(int)MathRound(volume/volume_step); if(MathAbs(ratio*volume_step-volume)>0.0000001)return(ratio*volume_step); return(volume); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ boolEditCreate(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=10, // 字体大小 const ENUM_ALIGN_MODE align=ALIGN_CENTER, // 对齐方式 const bool read_only=false, // 是否可编辑 const ENUM_BASE_CORNERcorner=CORNER_LEFT_UPPER, // 图表角落绑定 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,// 鼠标点击优先级 const string podskazka="") { if(ObjectFind(chart_ID,name)==0) { ObjectSetString(chart_ID,name,OBJPROP_TEXT,text); ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr); } else { if(!ObjectCreate(chart_ID,name,OBJ_EDIT,sub_window,0,0))return(false); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(x*界面缩放比例)); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(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); ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,podskazka); } return(true); } //+------------------------------------------------------------------+ boolButtonCreate(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 ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // 图表角落绑定 const string text="按钮", // 文本 const string font="Arial", // 字体 const int font_size=10, // 字体大小 const color clr=clrBlack, // 文字颜色 const color back_clr=C'236,233,216', // 背景颜色 const color border_clr=clrNONE, // 边框颜色 const bool state=false, // 是否按下 const bool back=false, // 是否在后台 const bool selection=false, // 是否可选中移动 const bool hidden=true, // 是否隐藏在对象列表中 const long z_order=0,// 鼠标点击优先级 const string podskazka="") { if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))return(false); ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,(int)(x*界面缩放比例)); ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,(int)(y*界面缩放比例)); ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,(int)(width*界面缩放比例)); ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,(int)(height*界面缩放比例)); 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); 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_STATE,state); 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); ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,podskazka); return(true); } //+------------------------------------------------------------------+ SHAPE MERGEFORMAT SHAPE MERGEFORMAT 222.png

还没有人打赏,支持一下