初学者的问题 MQL4 MT4 MetaTrader 4 - 页 52

 
ilnur17021992:
价格标签(OBJ_ARROW_LEFT_PRICE)能否有自己的文字,而不是价格,如果是这样,怎么做?
ObjectCreate(Name,OBJ_TEXT,Window,aTime,aPrice);
 
日安!谁能解释一下为什么H4和M15图表上的价格不重合?在M15的截图中,价格已经越过了红线(在垂直线 的左边)。而一分钟后,有一张H4的截图,价格仍然离它很远(在线的右边)。
而在这个程序中,只有另一个DTZ有一个来自蜡烛的阴影(蜡烛在右边最外面)。
 
Equal:
日安!谁能解释一下为什么H4和M15图表上的价格不一致?在M15的截图中,价格已经越过了红线(在垂直线 的左边)。而一分钟后,有一张H4的截图,价格仍然离它很远(在线的右边)。
而这里是该程序的截图,但另一个DTZ有一个蜡烛的影子(蜡烛在右边最外面)。
你是否对不同经纪公司的报价不同的事实感到陌生?即使在同一家经纪公司中,演示和真实的情况也是不同的。真令人惊讶(。
 

尝试写一些类似的东西:IceFX DrawProfit

代码。

void start()
{
   for(int i=0;i<OrdersHistoryTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderType()<=1)
      History();
   }
}
  
void History()
{
   string Ticket=IntegerToString(OrderTicket());
   color col=Red;
   if(OrderType()==0)col=Blue;
   datetime a=OrderOpenTime();
   double b=OrderOpenPrice();
   datetime c=OrderCloseTime();
   double d=OrderClosePrice();
   double profit=OrderProfit();
  
   ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
   ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
   ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
      
   ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+"Profit",OBJPROP_WIDTH,2);
   ObjectSetText(Ticket+"Profit",DoubleToString(profit,2),10,"Arial",White);
   ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d+Point*5);
   ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+10000);      
}

一切正常,但我正在使用一个网格顾问,目前覆盖了一堆订单,结果利润是相互重叠的,我希望这个封闭的一堆利润被合计,只显示金额(如IceFX DrawProfit 指标实现),而不是像现在这样为每个订单分别显示。帮助我把它变成正确的 :)


附加的文件:
 
Vitalie Postolache:
不同经纪公司的报价是不同的,这对你来说是不是很新鲜?是的,即使是在同一家经纪公司的模拟交易和真实交易,它们也是不同的。真令人惊讶(。
惊喜是不同的。这是一个相同的真实账户,只是切换到不同的时间框架,价格就会发生变化(不一样)。
在另一家经纪公司的真实账户上,当改变图表时,一切都很好!不同价格的事实是清楚的,不清楚的是,一个人有好像同时有两个价格,一个在分钟上,一个在小时上是不同的(非常不同)。我明白它不应该是这样的,但我想知道问题可能出在哪里。顺便说一下,蜡烛图在开盘后约一小时内 "纠正 "了下。
 
ilnur17021992:

尝试写一些类似的东西:IceFX DrawProfit

代码。

void start()
{
   for(int i=0;i<OrdersHistoryTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && OrderSymbol()==Symbol() && OrderType()<=1)
      History();
   }
}
  
void History()
{
   string Ticket=IntegerToString(OrderTicket());
   color col=Red;
   if(OrderType()==0)col=Blue;
   datetime a=OrderOpenTime();
   double b=OrderOpenPrice();
   datetime c=OrderCloseTime();
   double d=OrderClosePrice();
   double profit=OrderProfit();
  
   ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
   ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
   ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
      
   ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+"Profit",OBJPROP_WIDTH,2);
   ObjectSetText(Ticket+"Profit",DoubleToString(profit,2),10,"Arial",White);
   ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d+Point*5);
   ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+10000);      
}

一切正常,但我正在使用一个网格顾问,目前覆盖了一堆订单,结果利润是相互重叠的,我希望这个封闭的一堆利润被合计,只显示金额(如IceFX DrawProfit 指标实现),而不是像现在这样为每个订单分别显示。帮助我把它变成正确的 :)


利润是在一个单独的周期内计算的
 
Alekseu Fedotov:
在一个单独的周期内计算利润
哪一个?我如何知道特定的订单是一个组,它们的利润应该被加总?
 
ilnur17021992:
是哪一个呢?我如何确定特定的订单是一个组,它们的利润应该被加总?
而关闭它们的方法是什么,是通过一个函数的组,还是其他方式?
 
Vitaly Muzichenko:
你如何关闭它们,它们是通过一个函数还是其他方式作为一个组来关闭?
订单由机器人造网者打开,为整个集团计算并设置一个共同的TP,然后通过它关闭。


我在此附上一张截图。
附加的文件:
 
ilnur17021992:
订单由机器人造网者打开,为整个集团计算并设置一个共同的TP,然后将其关闭。

附上屏幕截图。

它是这样的。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int TotalPos=-1;
void OnTick()
{
 // остальной код

//--
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();

      ...
     }
  }}} TotalPos=OrdersTotal(); // запомним количество

//--
}

//+------------------------------------------------------------------+
//| Create Object istory                                             |
//+------------------------------------------------------------------+
void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+"Open",OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+"Open",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Open",OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+"Line",OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+"Line",OBJPROP_COLOR,col);
   ObjectSet(Ticket+"Line",OBJPROP_WIDTH,1);
   ObjectSet(Ticket+"Line",OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+"Line",OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+"Close",OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+"Close",OBJPROP_COLOR,Green);
   ObjectSet(Ticket+"Close",OBJPROP_ARROWCODE,3);
  
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+"Profit",OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+"Profit",OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+"Profit",DoubleToString(prAll,2),10,"Arial",/*White*/clrBlack);
   ObjectSet(Ticket+"Profit",OBJPROP_PRICE1,d);
   ObjectSet(Ticket+"Profit",OBJPROP_TIME1,c+Period()*60*2);
}