Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 52

 
ilnur17021992:
L'etichetta del prezzo(OBJ_ARROW_LEFT_PRICE) può avere il proprio testo al posto del prezzo, se sì come?
ObjectCreate(Name,OBJ_TEXT,Window,aTime,aPrice);
 
Qualcuno può spiegare perché i prezzi sui grafici H4 e M15 non corrispondono? Nella schermata su M15 il prezzo ha attraversato la linea rossa (a sinistra della linea verticale). E un minuto dopo c'è uno screenshot di H4 dove il prezzo è ancora molto lontano da esso (a destra della linea).
E qui in quel programma solo un altro dtz ha un'ombra dalla candela (la candela è più esterna a destra)
 
Equal:
Qualcuno può spiegare perché i prezzi sui grafici H4 e M15 non corrispondono? Nella schermata su M15 il prezzo ha attraversato la linea rossa (a sinistra della linea verticale). E un minuto dopo c'è uno screenshot di H4 dove il prezzo è ancora molto lontano da esso (a destra della linea).
Ed ecco lo screenshot di quel programma, ma un altro dtz ha un'ombra della candela (la candela è più esterna a destra)
Vi è nuovo che le quotazioni in diverse società di intermediazione sono diverse? Sono diversi anche per demo e reale in una stessa società di intermediazione! Che sorpresa (:
 

Cercando di scrivere qualcosa di simile:IceFX DrawProfit

Codice:

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

Tutto funziona, ma sto usando un advisor a griglia, che al momento copre un gruppo di ordini e come risultato il profitto si sovrappone l'uno all'altro, vorrei che il profitto di questo gruppo chiuso fosse totalizzato e solo l'importo visualizzato (come implementato nell'indicatoreIceFX DrawProfit), piuttosto che separatamente per ogni ordine come ho ora. Aiutami a farlo bene :)


File:
 
Vitalie Postolache:
Vi è nuovo che le quotazioni in diverse società di intermediazione sono diverse? Sì, sono diversi anche per il commercio demo e reale in una stessa società di intermediazione! Che sorpresa (:
La sorpresa è diversa. Questo è uno stesso conto reale e il prezzo cambia (non è lo stesso) solo passando a un timeframe diverso.
In un'altra società di brokeraggio anche su un conto reale quando si cambia il grafico tutto è OK! Il fatto che i prezzi siano diversi è chiaro, non è chiaro che si ha come se due prezzi contemporaneamente, uno sui minuti, uno sulle ore sia diverso (molto diverso). Capisco che non dovrebbe essere così, ma mi chiedo dove possa essere il problema. A proposito, la candela ha "corretto" in circa un'ora dopo l'apertura del prossimo.
 
ilnur17021992:

Cercando di scrivere qualcosa di simile:IceFX DrawProfit

Codice:

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

Tutto funziona, ma sto usando un advisor a griglia, che al momento copre un gruppo di ordini e come risultato il profitto si sovrappone l'uno all'altro, vorrei che il profitto di questo gruppo chiuso fosse totalizzato e solo l'importo visualizzato (come implementato nell'indicatoreIceFX DrawProfit), piuttosto che separatamente per ogni ordine come ho ora. Aiutami a farlo bene :)


Il profitto è calcolato in un ciclo separato
 
Alekseu Fedotov:
Il profitto conta in un ciclo separato
Quale? Come faccio a sapere che gli ordini specifici sono un gruppo e i loro profitti devono essere sommati?
 
ilnur17021992:
Qual è? Come faccio a determinare che gli ordini specifici sono un gruppo e il loro profitto deve essere sommato?
E qual è il metodo per chiuderli, un gruppo attraverso una funzione, o qualche altro modo?
 
Vitaly Muzichenko:
Come li chiudete, sono chiusi come gruppo attraverso una funzione o in qualche altro modo?
Gli ordini vengono aperti dal robot netmaker, per tutto il gruppo calcola e mette un TP comune, con il quale vengono poi chiusi.


Sto allegando uno screenshot:
 
ilnur17021992:
Gli ordini vengono aperti dal robot netmaker, per tutto il gruppo calcola e mette un TP comune, al quale poi vengono chiusi.

Schermata allegata:

Funziona così:

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