Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1377

 
Fast235 #:

wie einer der Teilnehmer sagt, in die Fabrik.

aufgrund der Unfähigkeit, wahrzunehmen

Sie müssen dem Objekt eine eindeutige Nummer zuweisen, die Sie aus den Parametern ableiten müssen:

- Öffnungszeit des Objekts

- Objektzeitraum

- Zeitrahmen des Objekts

Zum Beispiel:

int Num= TimeOpen+Period*0.0001

Nun, ich bin mir nicht sicher, ob diese Zahl exklusiv sein wird, und der Datentyp unter int passt nicht, aber vorzugsweise int

 
Mikhail Toptunov #:

Dem Objekt muss eine eindeutige Nummer zugewiesen werden, die aus den Parametern entnommen werden muss:

- Öffnungszeitdes Objekts

- Objektzeitraum

- Zeitrahmen des Objekts

Zum Beispiel:

Nun, ich bin mir nicht sicher, dass diese Zahl exklusiv sein wird, und der Datentyp unter int passt nicht, aber es ist wünschenswert int

eindeutige Nummer wird automatisch zugewiesen - tr_Deal73772984

es ist nicht klar, was die Frage ist

 

Sehen Sie sich diesen einfachen Code an

   for(uint i=0; i<total; i++)
     {
      //--- try to get deals ticket
      if((ticket=HistoryDealGetTicket(i))>0)
        {
         symbol=HistoryDealGetString(ticket,DEAL_SYMBOL);
         if(symbol!=Symbol())
            continue;
         //--- get deals properties
         price =HistoryDealGetDouble(ticket,DEAL_PRICE);
         time  =(datetime)HistoryDealGetInteger(ticket,DEAL_TIME);
         type  =HistoryDealGetInteger(ticket,DEAL_TYPE);
         entry =HistoryDealGetInteger(ticket,DEAL_ENTRY);
         profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
         id    =HistoryDealGetInteger(ticket, DEAL_POSITION_ID);
         //---
         text  =DoubleToString(profit,2);
         //---
         //+------------------------------------------------------------------+
         //|                                                                  |
         //+------------------------------------------------------------------+
         if(price && time && symbol==Symbol())
           {
            //--- create price object
            name=prefix+"Deal"+string(ticket);
            name2=prefix+"Price"+string(ticket);
            if(entry==DEAL_ENTRY_IN)
              {
               ObjectCreate(0,name,OBJ_ARROW_LEFT_PRICE,0,time,price,0,0);
                 {
                  timeOpen=time;
                  priceOpen=price;
                 }
              }
            if(entry==DEAL_ENTRY_OUT)
              {
               // if(ShowRightTabTab)
               //---создадим метку на закрытии
               ObjectCreate(0,name,OBJ_ARROW_RIGHT_PRICE,0,time,price,0,0);
               //--- нарисуем линию  сделки
               ObjectCreate(0,name+"_trend",OBJ_TREND,0,timeOpen,priceOpen,time,price);
               //--- добавим на график результат сделки
               ObjectCreate(0,name2,OBJ_TEXT,0,time,price+offset*_Point);
               if(profit>0.0)
                  clr=inpColorTP;
               else
                  clr=inpColorSL;
              }
 

Hallo.

Wie mache ich Fibonacci-Ebenen sichtbar/unsichtbar? Im Allgemeinen müssen wir einige Ebenen entfernen. Wenn ich die Eigenschaft OBJPROP_LEVELS verwende, sind nur die ersten N Ebenen verfügbar. Wie kann man die Sichtbarkeitseigenschaft für jede der Ebenen einstellen oder ganz entfernen?

 
leonerd #:

Hallo.

Wie mache ich Fibonacci-Ebenen sichtbar/unsichtbar? Im Allgemeinen müssen wir einige Ebenen entfernen. Wenn ich die Eigenschaft OBJPROP_LEVELS verwende, sind nur die ersten N Ebenen verfügbar. Wie kann ich die Sichtbarkeitseigenschaft für jede Ebene einstellen oder ganz entfernen?

Das geht so.

double fiboLev[] = {0.0, 0.236, 0.382, 0.5, 0.618, 0.764, 0.882, 1.0, 1.236, 1.382, 1.618, 2.0, 2.236, 2.618, 3.236, 3.618, 4.236};
/************************fiboCreate function*************************/
void fiboCreate(datetime t0, double p0, datetime t1, double p1)
 {
  long chartID = ChartID();
  if(ObjectFind(chartID, fiboName) < 0)
   {
    ObjectCreate(chartID, fiboName, OBJ_FIBO, 0, t1, p1, t0, p0);
    ObjectSetInteger(chartID, fiboName, OBJPROP_WIDTH, 2);
    ObjectSetInteger(chartID, fiboName, OBJPROP_COLOR, clrFibo);
    ObjectSetInteger(chartID, fiboName, OBJPROP_LEVELS, 23);
    ObjectSetInteger(chartID, fiboName, OBJPROP_LEVELCOLOR, clrFibo);
    for(int i = 0; i < 17; i++)
     {
      ObjectSetDouble(chartID, fiboName, OBJPROP_LEVELVALUE, i, fiboLev[i]);
      ObjectSetString(chartID, fiboName, OBJPROP_LEVELTEXT, i, "%$ ("+DoubleToString(fiboLev[i]*100, 1)+")");
     }
   }
  else
    if(ObjectFind(chartID, fiboName) == 0)
     {
      ObjectSetInteger(chartID, fiboName, OBJPROP_TIME, 0, t0);
      ObjectSetDouble(chartID, fiboName, OBJPROP_PRICE, 0, p0);
      ObjectSetInteger(chartID, fiboName, OBJPROP_TIME, 1, t1);
      ObjectSetDouble(chartID, fiboName, OBJPROP_PRICE, 1, p1);
     }
  ChartRedraw();
 }/******************************************************************/

Dies ist ein Auszug aus dem EA, einige Variablen sind hier nicht definiert. Dieser Code wird nicht kompiliert.

 

Hallo, gibt es eine Möglichkeit, ein Array-Element mit einem Offset aus der Struktur mit Standardmitteln zu entfernen


struct OrderFib
  {
   double            id;
   double            Price[Umax];            
   int               type;
   int               PeriodUr50;  // № Периода
  } trade_buff[];

1) trade_buff[0]...
   trade_buff[1]... deleted
   trade_buff[2]...

2) trade_buff[0]...
   trade_buff[1]... 
 

Auf diese Weise könnte man es professioneller machen, oder?

//+----------Удаляем старый сигнал-----------------------------------+
void filterDeal_1(int tf)
  {
   for(int i= 0; i<CountTrade; i++)
      if(trade_buff[i].tf == tf)
        {
         ArrayRemove(trade_buff,i,1);
         CountTrade--;
         i= 0;
        }
  }
 
Mikhail Toptunov #:

Könnte man dies auf professionellere Weise tun?

Hallo, um Array-Elemente zu löschen, beginnen Sie am Ende des Arrays, dann brauchen Sie den Index nicht zu ändern. Sie geht von selbst in Ordnung.

for(int i=CountTrade-1; i>=0; i--)
   {
   if(trade_buff[i].tf == tf)
      {
      ArrayRemove(trade_buff,i,1);
      }
   }
 
Aleksei Stepanenko #:

Hallo, um Array-Elemente zu löschen, beginnen Sie am Ende des Arrays, dann brauchen Sie den Index nicht zu ändern. Sie geht von selbst in Ordnung.

Richtig, cool, danke!

 
Mikhail Toptunov #:

Dem Objekt muss eine eindeutige Nummer zugewiesen werden, die aus den Parametern zu entnehmen ist:

- Öffnungszeitdes Objekts

- Objektzeitraum

- Zeitrahmen des Objekts

Zum Beispiel:

Nun, ich bin nicht sicher, dass diese Zahl exklusiv sein wird, und Datentyp unter int passt nicht, aber vorzugsweise int

Wenn wir später entschlüsseln wollen, ist es besser, den Objektnamen statt der Nummer zu verschlüsseln. D.h. wir setzen den Namen aus den Ziffern und die Ziffern aus der Zeichenkette zusammen und dann die Zeichenkette aus den Ziffern zu int. Das einzige, was zu tun ist, ist entweder die Felder mit Trennzeichen zu unterteilen oder die Anzahl der Zeichen in jedem Feld zu berücksichtigen.

Grund der Beschwerde: