3评论

1收藏

交易历史复盘源码

avatar 陈先森 | 1404 人阅读 | 3 人评论 | 2023-10-29

大家自行复制修改使用
//+------------------------------------------------------------------+
//|                                                 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

""
还没有人打赏,支持一下

评论|共 3 个

小飞鱼20123

发表于 2023-10-29 07:54:06 | 显示全部楼层

不错,感谢分享!

cch90

发表于 2023-10-29 21:24:10 | 显示全部楼层

怎么用?

宁静致远

发表于 2024-8-16 14:20:52 | 显示全部楼层

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则