交易筑基吧 关注:9贴子:30
  • 0回复贴,共1

【mt4源码】显示历史交易记录指标

取消只看楼主收藏回复

mt4是没有显示历史记录选项的,只能自己写一个。
现在mt4的函数原型修改得太厉害,网上查的用法基本不能用,反而用mt5的说明书能套出不少mt4语法,看来mt4的语句习惯在使劲往mt5靠。
ObjectFind(obj_name)如果找到对象返回是chart_id,主图表id是0,所以用 if(Objectfind()) 总是找不到操作对象,这是在mt5说明书里找到的用法。而网上都是旧版的说明,找到对象则返回非零值,这块调试搞了蛮久,服了。

#property indicator_chart_window
#define COLOR_BUY clrDodgerBlue
#define COLOR_SELL clrCrimson
int OnInit()
{
return(INIT_SUCCEEDED);
}
int start()
{
int ordersCount = OrdersHistoryTotal();
for(int i=0; i<ordersCount; ++i)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if(OrderCloseTime())
{
string obj_name = "OrderLine_" + OrderTicket();
ObjectDelete(0,obj_name);
ObjectCreate(0,obj_name,OBJ_TREND,0,OrderOpenTime(),OrderOpenPrice(),OrderCloseTime(),OrderClosePrice());
ObjectSetInteger(0,obj_name, OBJPROP_COLOR, OrderType()==OP_BUY ? COLOR_BUY : COLOR_SELL);
ObjectSetInteger(0,obj_name, OBJPROP_STYLE, STYLE_DOT);
ObjectSetInteger(0,obj_name, OBJPROP_RAY_RIGHT,false);
ObjectSetInteger(0,obj_name, OBJPROP_HIDDEN,true);
ObjectSetInteger(0,obj_name, OBJPROP_SELECTABLE,false);
string orderType = OrderType()==OP_BUY ? "Buy_" : "Sell_";
string obj_openArrow = orderType + OrderLots() + "_" + OrderTicket();
ObjectDelete(0,obj_openArrow);
ObjectCreate(0,obj_openArrow,OBJ_ARROW,0,OrderOpenTime(),OrderOpenPrice());
ObjectSetInteger(0,obj_openArrow, OBJPROP_ARROWCODE,1);
ObjectSetInteger(0,obj_openArrow, OBJPROP_COLOR, OrderType()==OP_BUY ? COLOR_BUY : COLOR_SELL);
ObjectSetInteger(0,obj_openArrow, OBJPROP_HIDDEN,true);
ObjectSetInteger(0,obj_openArrow, OBJPROP_SELECTABLE,false);
string obj_closeArrow = "Close_" + OrderLots() + ", $" + OrderProfit() + ", " + OrderTicket() ;
ObjectDelete(0,obj_closeArrow);
ObjectCreate(0,obj_closeArrow,OBJ_ARROW_RIGHT_PRICE,0,OrderCloseTime(),OrderClosePrice());
ObjectSetInteger(0,obj_closeArrow, OBJPROP_ARROWCODE,3);
ObjectSetInteger(0,obj_closeArrow, OBJPROP_COLOR, OrderType()==OP_BUY ? COLOR_BUY : COLOR_SELL);
ObjectSetInteger(0,obj_closeArrow, OBJPROP_HIDDEN,true);
ObjectSetInteger(0,obj_closeArrow, OBJPROP_SELECTABLE,false);
}
}
}
return(0);
}
void deinit()
{
int ordersCount = OrdersHistoryTotal();
Print("number: ",ordersCount);
for(int i=0; i<ordersCount; ++i)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
string obj_name = "OrderLine_" + OrderTicket();
if(ObjectFind(0,obj_name) == 0) ObjectDelete(0,obj_name);
string orderType = OrderType()==OP_BUY ? "Buy_" : "Sell_";
string obj_openArrow = orderType + OrderLots() + "_" + OrderTicket();
if(ObjectFind(0,obj_openArrow) == 0) ObjectDelete(0,obj_openArrow);
string obj_closeArrow = "Close_" + OrderLots() + ", $" + OrderProfit() + ", " + OrderTicket();
if(ObjectFind(0,obj_closeArrow) == 0) ObjectDelete(0,obj_closeArrow);
}
}
}


1楼2024-07-23 16:59回复