Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 434

 
WinProject:

Bitte sagen Sie mir, wie ich ein grafisches Objekt löschen kann. Es gibt vertikale Linien, deren Namen aus Variablenwerten gebildet werden.

string name=="test1"; string Vertline="line_"+name; ObjectCreate(0,VertLine,OBJ_VLINE,0,time,cena); Wie kann ich nur vertikale Linien mit dem Namen test1 löschen?


Diese Funktion könnte für Sie nützlich sein:

Löscht alle Objekte des angegebenen Typs mit dem Namenspräfix in einem Unterfenster.

intObjectsDeleteAll(
longchart_id,// Diagramm-ID
const stringprefix,// Präfix des Objektnamens
intsub_window=EMPTY,// Index des Fensters
intobject_type=EMPTY//Typ des zu löschenden Objekts
);

 
Vladislav Andruschenko:


finden Sie diese Funktion vielleicht nützlich:

Löscht alle Objekte des angegebenen Typs mit dem Namenspräfix im Teilfenster "Diagramm".

intObjectsDeleteAll(
longchart_id,//Tabellenbezeichner
const stringprefix,// PräfixObjektname
intsub_window=EMPTY,// Fensterindex
intobject_type=EMPTY// Objekttyp zum Entfernen
);


Danke, soweit ich verstehe, versteht diese Funktion das Präfix als die erste Teilzeichenkette im Objektnamen, aber wie man durch die zweite Teilzeichenkette im Objektnamen zu löschen? Gibt es eine Möglichkeit, StringSubstr und StringFind, um den Objektnamen für diesen Zweck zu verwenden?

 
WinProject:

Danke, soweit ich verstehe, durch Präfix diese Funktion versteht die erste Teilzeichenkette im Objektnamen, aber wie man durch die zweite Teilzeichenkette im Objektnamen zu löschen? Gibt es eine Möglichkeit, StringSubstr und StringFind, um den Objektnamen für diesen Zweck zu verwenden?


warten,

Sie haben den Code angegeben:

string Vertline="линия_"+name; 


Wo Sie das Präfix haben.

Das macht jeder.

Deshalb habe ich Ihnen die Funktion zum Löschen von Objekten nach Präfix vorgeschlagen.


"линия_"

Wenn Sie eine Zeile nach Suffix löschen müssen, können Siemit StringFind nach allen Objekten suchen

zum Beispiel:

void ObjectsDelete()
  {
string NameEA="суффикс";
   for(int i=ObjectsTotal();i>=0;i--)
     {
      if(StringFind(ObjectName(i),NameEA)!=-1)ObjectDelete(ObjectName(i));
     }
  }
 

Danke Vladislav, alles funktioniert, mit solcher Hilfe von Forumsmitgliedern, MQL ist viel interessanter. Interessante Seite, vielen Dank!

 

Hallo. Bitte helfen Sie mir, herauszufinden, warum das Trawling nach dem Erscheinen von Positionen aufhört.

Der Punkt ist folgender: Öffnen Sie zwei Positionen 1, 2. zu einem Preis wird die erste durch Schleppnetz geschlossen, die zweite Schleppnetz wird unter der Bedingung aktiviert, dass zum Eröffnungskurs der Position die Position eins ist.

Alles funktioniert gut, Position 1 ist geschlossen, Position 2 wird mit dem Schleppnetz bedient, aber wenn zwei weitere Positionen 3 und 4 zu unterschiedlichen Preisen geöffnet werden, geht das Schleppnetz nicht zu Position 2 über.

Warum wird die Schleppnetzfischerei eingestellt?

void Tral_SL_one(int _TrailingStop=0,int _TrailingStep=0)
  {
   if(_TrailingStop<=0)
      return;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)))
         continue;
      if(OrderSymbol()!=Symbol())
         continue;
      if(OrderMagicNumber()!=_MagicNumber)
         continue;
      if(OrderType()==OP_BUY)
        {
         if(NumPosByPrice(Symbol(),OP_BUY,OrderOpenPrice(),_MagicNumber)==1)
           {
            if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(_TrailingStop *Point,Digits))
              {
               if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid -(_TrailingStop+_TrailingStep-1)*Point,Digits) || OrderStopLoss()==0)
                 {
                  if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-_TrailingStop*Point,Digits),OrderTakeProfit(),OrderExpiration()));
                   
                 }
              }
           }
        }

      if(OrderType()==OP_SELL)
        {

         if(NumPosByPrice(Symbol(),OP_SELL,OrderOpenPrice(),_MagicNumber)==1)
           {
            if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(_TrailingStop *Point,Digits))
              {
               if(NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(_TrailingStop+_TrailingStep-1)*Point,Digits) || OrderStopLoss()==0)
                 {
                  if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+_TrailingStop*Point,Digits),OrderTakeProfit(),OrderExpiration()));
                    
                 }
              }
           }
        }
     }
  }
//===
int NumPosByPrice(string sy="",int op=-1,double pp=0,int mn=-1) 
  {
   double px,py;
   int    d,i,k=OrdersTotal(),num=0;

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++) 
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 
        {
         if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) 
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
              {
               if(mn<0 || OrderMagicNumber()==mn) 
                 {
                  d=MarketInfo(OrderSymbol(),MODE_DIGITS);
                  px=NormalizeDouble(pp, d);
                  py=NormalizeDouble(OrderOpenPrice(), d);
                  if(pp<=0 || px==py) num++;
                 }
              }
           }
        }
     }
   return(num);
  }
 
mila.com:

Hallo. Bitte helfen Sie mir, herauszufinden, warum das Trawling nach dem Erscheinen von Positionen aufhört.

Der Punkt ist folgender: Öffnen Sie zwei Positionen 1, 2. zu einem Preis wird die erste durch Schleppnetz geschlossen, die zweite Schleppnetz wird unter der Bedingung aktiviert, dass zum Eröffnungskurs der Position die Position eins ist.

Alles funktioniert gut, Position 1 ist geschlossen, Position 2 wird mit dem Schleppnetz bedient, aber wenn zwei weitere Positionen 3 und 4 zu unterschiedlichen Preisen geöffnet werden, geht das Schleppnetz nicht zu Position 2 über.

Warum wird die Schleppnetzfischerei eingestellt?


Ich möchte nur auf einen groben Fehler hinweisen.

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)))
         continue;
      if(OrderSymbol()!=Symbol())
         continue;
      if(OrderMagicNumber()!=_MagicNumber)
         continue;
      if(OrderType()==OP_BUY)
        {
         if(NumPosByPrice(Symbol(),OP_BUY,OrderOpenPrice(),_MagicNumber)==1)


Sie gehen die Aufträge durch und führen dann die Funktion aus, die die Anzahl der Positionen zählt, wodurch eine weitere Position in der FunktionNumPosByPrice ausgewählt wird

so dass die weitere Konstruktion

 if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(_TrailingStop *Point,Digits))


nicht korrekt funktionieren.


Es gibt viele Möglichkeiten, dieses Problem zu lösen.

Zum Beispiel:

void Tral_SL_one(int _TrailingStop=0,int _TrailingStep=0)
  {
   if(_TrailingStop<=0)
      return;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)))
         continue;
      if(OrderSymbol()!=Symbol())
         continue;
      if(OrderMagicNumber()!=_MagicNumber)
         continue;
      if(OrderType()==OP_BUY)
        {
         if(NumPosByPrice(Symbol(),OP_BUY,OrderOpenPrice(),_MagicNumber)==1)
           {
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
            if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(_TrailingStop *Point,Digits))


Das ist zwar grundlegend falsch, aber für ein schnelles Verständnis reicht es.

nach:


if(NumPosByPrice(Symbol(),OP_BUY,OrderOpenPrice(),_MagicNumber)==1)

hinzufügen:

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
 
Vladislav Andruschenko:


Ich werde nur auf den groben Fehler hinweisen.

Es gibt viele Möglichkeiten, dieses Problem zu lösen.

Danke, ich verstehe, Schleppnetz)

 

Können Sie mir bitte sagen, wie ich das Alert-Fenster in mt4 wieder öffnen kann? Ich hatte früher ein Skript, das ein gefälschtes Signal erzeugte und das Alert-Fenster öffnete, jetzt, nach der Neuinstallation des Systems, kann ich es nicht mehr im Internet finden. Vielleicht hat jemand eine?

 
amenrazp:

Können Sie mir bitte sagen, wie ich das Alert-Fenster in mt4 wieder öffnen kann? Ich hatte früher ein Skript, das ein gefälschtes Signal erzeugte und das Alert-Fenster öffnete, jetzt, nach der Neuinstallation des Systems, kann ich es nicht mehr im Internet finden. Vielleicht hat jemand eine?

Alert(""); ein solches Skript?
 
Vladislav Andruschenko:
Alert(""); ein solches Skript?

Sieht so aus. Haben Sie eine Möglichkeit, sie hier anzuhängen?