Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 52

 
ilnur17021992:
A etiqueta de preço(OBJ_ARROW_LEFT_PRICE) pode ter seu próprio texto em vez do preço, se sim, como?
ObjectCreate(Name,OBJ_TEXT,Window,aTime,aPrice);
 
Bom dia! Alguém pode explicar por que os preços nos gráficos H4 e M15 não correspondem? Na captura de tela na M15, o preço cruzou a linha vermelha (à esquerda da linha vertical). E um minuto depois há uma captura de tela do H4 onde o preço ainda está muito longe (à direita da linha).
E aqui nesse programa apenas outra dtz tem uma sombra da vela (a vela está no extremo direito)
 
Equal:
Bom dia! Alguém pode explicar por que os preços nos gráficos H4 e M15 não correspondem? Na captura de tela na M15, o preço cruzou a linha vermelha (à esquerda da linha vertical). E um minuto depois há uma captura de tela do H4 onde o preço ainda está muito longe (à direita da linha).
E aqui está a imagem desse programa, mas outra dtz tem uma sombra da vela (a vela está mais à direita)
Você é novo no fato de que as cotações diferem em diferentes empresas de corretagem? Eles são diferentes mesmo para demonstração e reais em uma mesma empresa de corretagem! Que surpresa (:
 

Tentando escrever algo semelhante:IceFX DrawProfit

Código:

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);      
}

Tudo funciona, mas estou usando um consultor de grade, que no momento cobre um monte de pedidos e como resultado o lucro está se sobrepondo, eu gostaria que o lucro desse monte fechado fosse totalizado e apenas a quantidade exibida (como implementado no indicadorIceFX DrawProfit), em vez de separadamente para cada pedido como eu tenho agora. Ajude-me a fazer a coisa certa :)


Arquivos anexados:
 
Vitalie Postolache:
É novo para você que as cotações em diferentes empresas de corretagem são diferentes? Sim, eles são diferentes mesmo para demonstração e comércio real em uma mesma empresa de corretagem! Que surpresa (:
A surpresa é diferente. Esta é uma e a mesma conta real e o preço muda (não o mesmo) apenas mudando para um período de tempo diferente.
Em outra empresa de corretagem também em uma conta real quando se muda o gráfico tudo está bem! O fato de que preços diferentes são diferentes é claro, não é claro que se tenha como se dois preços ao mesmo tempo, um sobre os minutos, um sobre as horas fosse diferente (muito diferente). Entendo que não deveria ser assim, mas me pergunto onde o problema pode estar. A propósito, o castiçal "corrigido" em cerca de uma hora após a abertura do próximo.
 
ilnur17021992:

Tentando escrever algo semelhante:IceFX DrawProfit

Código:

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);      
}

Tudo funciona, mas estou usando um consultor de grade, que no momento cobre um monte de pedidos e como resultado o lucro está se sobrepondo, eu gostaria que o lucro desse monte fechado fosse totalizado e apenas a quantidade exibida (como implementado no indicadorIceFX DrawProfit), em vez de separadamente para cada pedido como eu tenho agora. Ajude-me a fazer a coisa certa :)


O lucro é calculado em um ciclo separado
 
Alekseu Fedotov:
O lucro conta em um ciclo separado
Qual deles? Como sei que ordens específicas são um grupo e que seus lucros precisam ser somados?
 
ilnur17021992:
O que é isso? Como posso determinar que ordens específicas são um grupo e seu lucro deve ser somado?
E qual é o método de fechá-los, um grupo através de uma função, ou de alguma outra forma?
 
Vitaly Muzichenko:
Como fechá-los, eles são fechados como um grupo através de uma função ou de alguma outra forma?
As ordens são abertas por robô fabricante de redes, para todo o grupo ele calcula e coloca um TP comum, pelo qual são então fechadas.


Estou anexando uma captura de tela:
Arquivos anexados:
 
ilnur17021992:
As ordens são abertas pelo fabricante da rede de robôs, para todo o grupo ele calcula e coloca um TP comum, no qual elas são então fechadas.

Foto da tela anexada:

É assim:

//+------------------------------------------------------------------+
//| 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);
}
Razão: