搜了一晚上,找到两个解决方案 1.直接把历史成交拖拽到图表上,就可以。 优点,方便,而且实时切换到发生交易的那个时间段 缺点,麻烦,成交多的话,比如有个几百条,那很幸苦的 2.有人在外汇群论坛上发过“复盘工具”http://bbs.waihuiqun.com/viewthread.php?tid=1899&highlight=%B8%B4%C5%CC 优点,一次批量倒入,还有成交价格显示 缺点,麻烦,需要先导出历史记录,存成cvs格式,再导入 期待有更好的解决方案
Code: //+------------------------------------------------------------------+ //| ShowTradeHis.mq4 | //| ST小散 liangdawen | //+------------------------------------------------------------------+ #property copyright "liangdawen" #property link "ldawen@126.com" #property indicator_chart_window string indNames = ""; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { return(0); } int deinit() { DelTradesHis(); ObjectDelete("Show Trade History "); ObjectDelete("copyright"); return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { /* LabelCreate("ldw1",10,10,"abckmklsjfls"); ArrowCreate("ldwdsf",D'2010.10.01 22:10',1.3675,"safs",Red,3); ArrowCreate("ld1wdsf",D'2010.10.01 20:10',1.3625,"sasfs",Blue,1); ArrowCreate("ld1sf",D'2010.10.01 10:10',1.3615,"sasfs",Blue,4); TrendLineCreate("kslsflksfsl",D'2010.10.01 22:10',1.3675,D'2010.10.01 20:10',1.3625); */ static datetime BarTime = 0; if(BarTime != Time[0]) { BarTime = Time[0]; LabelCreate("Show Trade History ",10,10,"Show Trade History"); LabelCreate("copyright",25,25,"(liangdawen)"); ShowTrades(); } return(0); } //+------------------------------------------------------------------+ void LabelCreate(string name,int x,int y,string text="-",int size=10,string font="Arial",color colour=Red,int window = 0) { if (ObjectFind(indNames+name) == -1) { ObjectCreate(indNames+name,OBJ_LABEL,window,0,0); ObjectSet(indNames+name,OBJPROP_CORNER,1); ObjectSet(indNames+name,OBJPROP_XDISTANCE,x); ObjectSet(indNames+name,OBJPROP_YDISTANCE,y); } ObjectSetText(indNames+name,text,size,font,colour); } void ArrowCreate(string name,datetime dt,double price,string text = "-",color colour=Red,int ArrowType = 1,int window = 0) { if (ObjectFind(indNames+name) == -1) { ObjectCreate(indNames+name,OBJ_ARROW,window,dt,price); ObjectSet(indNames+name,OBJPROP_ARROWCODE,ArrowType); ObjectSet(indNames+name,OBJPROP_COLOR,colour); } } void TrendLineCreate(string name,datetime dt1,double price1,datetime dt2,double price2,color colour=Red,int window = 0) { if (ObjectFind(indNames+name) == -1) { ObjectCreate(indNames+name,OBJ_TREND,window,dt1,price1,dt2,price2); ObjectSet(indNames+name,OBJPROP_COLOR,colour); ObjectSet(indNames+name,OBJPROP_RAY,false); ObjectSet(indNames+name,OBJPROP_STYLE,STYLE_DOT); } } void ShowTrades() { int cnt; color OpenArrowColor; color CloseArrowColor; color StopLossColor; color LineColor; string SType = " "; string text; int oc = OrdersHistoryTotal(); for(cnt=0;cnt<oc;cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY) ==false) continue; if(OrderSymbol() != Symbol()) continue; if( OrderType()==OP_SELL ) { OpenArrowColor = Red; CloseArrowColor = Violet; StopLossColor = Red; LineColor = Red; } if( OrderType()==OP_BUY ) { OpenArrowColor = Blue; CloseArrowColor = Goldenrod; StopLossColor = Blue; LineColor = Blue; } if(OrderType() == OP_SELL) SType = "SELL"; if(OrderType() == OP_BUY) SType = "BUY"; string ticket = DoubleToStr(OrderTicket(),0); double lots = NormalizeDouble(OrderLots(),2); double op= NormalizeDouble(OrderOpenPrice(),Digits); double cp = NormalizeDouble(OrderClosePrice(),Digits); text = StringConcatenate("# ",OrderTicket()," ",SType," ",lots," ",OrderSymbol()," at ",op," ",cp); ArrowCreate("o "+text,OrderOpenTime(),OrderOpenPrice()," ",OpenArrowColor,1); // --Open arrow ArrowCreate("c "+text,OrderCloseTime(),OrderClosePrice()," ",CloseArrowColor,3); // --close arrow ArrowCreate("s "+text,OrderOpenTime(),OrderStopLoss()," ",OpenArrowColor,4); // --stop arrow TrendLineCreate("l " + text ,OrderOpenTime(),OrderOpenPrice(),OrderCloseTime(),OrderClosePrice(),LineColor); // trendline } // end for } //end ShowTrades void DelTradesHis() { int cnt; string SType = " "; string text; int obj_id ; string obj_name; int oc = OrdersHistoryTotal(); for(cnt=0;cnt<oc;cnt++) { if(OrderSelect(cnt,SELECT_BY_POS,MODE_HISTORY) ==false) continue; if(OrderSymbol() != Symbol()) continue; if(OrderType() == OP_SELL) SType = "SELL"; if(OrderType() == OP_BUY) SType = "BUY"; string ticket = DoubleToStr(OrderTicket(),0); double lots = NormalizeDouble(OrderLots(),2); double op= NormalizeDouble(OrderOpenPrice(),Digits); double cp = NormalizeDouble(OrderClosePrice(),Digits); text = StringConcatenate("# ",OrderTicket()," ",SType," ",lots," ",OrderSymbol()," at ",op," ",cp); obj_name = "o "+text; obj_id = ObjectFind(obj_name); if(obj_id!=-1) ObjectDelete(obj_name); // --Open arrow obj_name = "c "+text; obj_id = ObjectFind(obj_name); if(obj_id!=-1) ObjectDelete(obj_name); // --close arrow obj_name = "s "+text; obj_id = ObjectFind(obj_name); if(obj_id!=-1) ObjectDelete(obj_name); // --stop arrow obj_name = "l "+text; obj_id = ObjectFind(obj_name); if(obj_id!=-1) ObjectDelete(obj_name); // --trendline } // end for } //end ShowTrades