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

 

Guten Tag, liebe Kolleginnen und Kollegen.

Ich lerne gerade etwas über Arrays.

Können Sie mir bitte sagen, wie ich den benötigten Wert aus einem Array entfernen kann?

So wie ich es verstehe, wird nach dem Löschen eines Wertes die Größe des Arrays reduziert und wahrscheinlich

muss auch der neue Wert für die Array-Größe angegeben werden.

Ich habe im Referenzhandbuch keine Funktion gefunden, mit der man einen Array-Wert löschen kann. Können Sie mir bitte zeigen, wie das ganze Verfahren aussieht?

so dass das Array nach dem Löschen weiterhin funktioniert.

Ich danke Ihnen.

Hier ist ein konkretes Beispiel für das, was ich brauche.

int start()                                             
{

double mass[3]=
{
1.2414,
1.2438,
1.2874
};

double value =  Bid ;
int S = ArrayBsearch(mass,  value,  WHOLE_ARRAY,  0, MODE_ASCEND);

if ( Bid == mass[S]) //Bid = 1.2874
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
}
// после того как открылся ордер по цене элемента массива с индексом 2 (1.2874)
// КАК УДАЛИТЬ ИЗ МАССИВА ЗНАЧЕНИЕ 1.2874 так что бы массив продолжил функционировать дальше.
 
ANDREY:

Guten Tag, liebe Kolleginnen und Kollegen.

Ich lerne gerade etwas über Arrays.

Können Sie mir bitte sagen, wie ich den benötigten Wert aus einem Array entfernen kann?

So wie ich es verstehe, wird nach dem Löschen eines Wertes die Größe des Arrays reduziert und wahrscheinlich

Die neue Array-Größe muss ebenfalls angegeben werden.

Ich habe im Referenzhandbuch keine Funktion gefunden, mit der man einen Array-Wert löschen kann. Bitte zeigen Sie mir, wie die gesamte Prozedur aussieht, um einen Array-Wert zu löschen,

Damit das Array nach dem Löschen weiterhin funktioniert.

Ich danke Ihnen.

Hier ist ein konkretes Beispiel für das, was ich brauche.

Sie können ein Feld "in sich selbst" kopieren und dann die Größe des Feldes ändern, indem Sie es um 1 verkleinern. Ein Beispiel mit dem Löschen des Nullindexes des Arrays und dem Einfügen des letzten Elements, aber Sie können von jedem Index eine beliebige Anzahl von Elementen kopieren.

Die zweite Möglichkeit besteht darin, den letzten Wert im "freien" Bereich zu überschreiben und die Größe des Arrays zu verringern.

Подскажите про массивы
Подскажите про массивы
  • 2017.12.03
  • www.mql5.com
Я только учусь и на массивах попал в засаду: пытаюсь написать скрипт в котором массив данных будет перезаписываться...
 
Alexey Viktorov:

Sie können ein Array "auf sich selbst" kopieren und dann die Größe des Arrays ändern, indem Sie es um 1 verkleinern. Ein Beispiel ist das Löschen des Nullindexes des Arrays und das Auffüllen des letzten Indexes, aber das Kopieren kann von jedem Index mit einer beliebigen Anzahl von Elementen aus erfolgen.

Die zweite Möglichkeit besteht darin, den letzten Wert im "freien" Bereich zu überschreiben und die Größe des Arrays zu verringern.

Vielen Dank für den Tipp.
 

Hallo!!! Erklären Sie es mir, auch wenn ich kein Anfänger bin, aber ein einziges Problem macht mich furchtbar krank. Ich rufe den Indikator über den Indikator auf. Wenn ich einen neuen Balken mit einem Wert erhalte, erhalte ich völlig andere Werte, wenn ich ihn sofort neu kompiliere. Die Verzögerung bei der Berechnung des Indikators durch die Zeit führt zu nichts. Es gibt also überhaupt keine automatische Funktion. Die Frage. WHY???? Ich bin so erschöpft, ich bin erschöpft. Was ist diese unglaubliche Panne... Ich habe es satt...

 

Hallo! Ich kann das Problem der Verschiebung der Signalpegel nicht lösen, wenn der Preis über sie hinausgeht. Zum Zeitpunkt der Kompilierung ist alles in Ordnung, aber im Testprogramm ändert sich nichts, wenn die Bedingung "geeignet" eintritt. Bitte teilen Sie uns mit, was mit der Bedingung, dass der Preis über die Signalpegel hinausgeht, falsch ist?

//-------------------------выход цены за пределы сигнальных уровней-----------------------------------------------------------------------------------------------
 price=iHigh(Symbol(),PERIOD_M15,0);                                                               //Сигнальный уровень О(Сердцевина)
 ObjectCreate("UrO",OBJ_HLINE,0,0,price);
 ObjectSet("UrO",OBJPROP_COLOR,clrYellowGreen);                               
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 priceA=price+30*Point;                                                                            //Сигнальный уровень А(Максимум)
 ObjectCreate("UrA",OBJ_HLINE,0,0,priceA);
 ObjectSet("UrA",OBJPROP_COLOR,clrDarkSlateBlue); 
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 priceB=price-30*Point;                                                                            //Сигнальный уровень B(Минимум)
 ObjectCreate("UrB",OBJ_HLINE,0,0,priceB); 
 ObjectSet("UrB",OBJPROP_COLOR,clrOrangeRed); 
//--------------------------------------------------------------------------
if((Bid>=priceA) ||(Bid<=priceB)){                                                                 //если цена вышла за одну из ГРАНИЦ, сдвинуть уровни
  ObjectSet("UrO",OBJPROP_PRICE1,iHigh(Symbol(),PERIOD_M15,0));  
                                                                                             

Das"UrA"- oder"UrB"-Niveau sollte auf das Maximum der letzten Kerze am m15 verschoben werden, aber das geschieht nicht. Weiß jemand, warum?

 
vikzip:

Hallo! Ich kann das Problem der Verschiebung der Signalpegel nicht lösen, wenn der Preis über sie hinausgeht. Zum Zeitpunkt der Kompilierung ist alles in Ordnung, aber im Testprogramm ändert sich nichts, wenn die Bedingung "geeignet" eintritt. Bitte teilen Sie uns mit, was mit der Bedingung, dass der Preis über die Signalpegel hinausgeht, falsch ist?

Das"UrA"- oder"UrB"-Niveau sollte auf das Maximum der letzten Kerze am m15 verschoben werden, aber das geschieht nicht. Weiß jemand, warum?


Was ist falsch an ObjectMove()?

 
Vitalie Postolache:

Was ist falsch an ObjectMove()?


Danke!!!)

 
Vitalie Postolache:

Was ist falsch an ObjectMove()?


Die Funktion ist großartig! Aber die Bedingung ist aus irgendeinem Grund nicht erfüllt! Kennt jemand den Grund dafür?

  double price;                                                                                    //цена сердцевины
  double priceA;                                                                                   //цена верхнего сигнального уровня
  double priceB;                                                                                   //цена нижнего сигнального уровня
//+------------------------------------------------------------------------------------------------------------------------------------------------------------
int start(){
//-------------------------выход цены за пределы сигнальных уровней-----------------------------------------------------------------------------------------------

price=iHigh(Symbol(),PERIOD_M15,0);                                                               //Сигнальный уровень О(Сердцевина)
ObjectCreate("UrO",OBJ_HLINE,0,0,price);
ObjectSet("UrO",OBJPROP_COLOR,clrYellowGreen);                                                                                                                               
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 priceA=price+30*Point;                                                                            //Сигнальный уровень А(Максимум)
ObjectCreate("UrA",OBJ_HLINE,0,0,priceA);
ObjectSet("UrA",OBJPROP_COLOR,clrDarkSlateBlue); 
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 priceB=price-30*Point;                                                                            //Сигнальный уровень B(Минимум)
ObjectCreate("UrB",OBJ_HLINE,0,0,priceB); 
ObjectSet("UrB",OBJPROP_COLOR,clrOrangeRed); 
 //---------------------------------------------------------------------------------------------------------------------------------------------------------------
if((Bid<=priceB)||(Bid>=priceA)){                                                                 //если цена вышла за одну из ГРАНИЦ
  ObjectsDeleteAll();                                                                             //для примера удаляю все объекты, но этого не происходит!
  }                                                                                               //Почему ведь очевидно на тестере цена выходит за пределы, но ни чего не происходит???
return(0);
}
Kann mir bitte jemand erklären, wo der Fehler liegt?
 

Hallo!

Ich fange gerade erst an, MQL4 zu lernen. Ich kann nicht herausfinden, warum das Skript die Schaltfläche"Automatischen Handel zulassen" in MT4 (ver. 4.0 build 1090) ignoriert

Ich kann diese Art von Konstruktion nicht in den Griff bekommen:

int start()
{

     Alert("Привет!");

return;
}

Ich drücke die Taste nicht, aber es wird immer noch ein Fenster mit einer Warnung angezeigt. Wenn ich eine Order in einem Skript einstelle, wird sie bei jedem Tick ohne Unterbrechung ausgelöst, unabhängig davon, ob die Schaltfläche Autotrade gedrückt ist oder nicht.


Ich habe eine solche Konstruktion ausprobiert:


int start()
{

 while(!IsStopped())
    {
    
      Alert("Привет!");

     if(!IsExpertEnabled()) break;
    }


return;
}

Zunächst schien es zu funktionieren, aber im Laufe der Komplizierung des Skripts funktionierte es auch nicht mehr...

Ich weiß nicht, ob es so sein soll, aber ich spüre nicht, dass EA flüssig arbeitet: Wenn ich den EA wechsle, arbeitet der alte weiter, als ob er im Hintergrund arbeitet, aber vielleicht habe ich es noch nicht herausgefunden.

 
Dimitry-1983:

Hallo!

Ich fange gerade an, MQL4 zu lernen. Ich kann nicht herausfinden, warum das Skript die Schaltfläche"Automatischen Handel zulassen" in MT4 (ver. 4.0 build 1090) ignoriert

Ich kann diese Art von Konstruktion nicht in den Griff bekommen:

Ich drücke die Taste nicht, aber es wird immer noch ein Fenster mit einer Warnung angezeigt. Wenn ich eine Order in einem Skript einstelle, wird sie bei jedem Tick ohne Unterbrechung ausgelöst, unabhängig davon, ob die Schaltfläche Autotrade gedrückt ist oder nicht.


Ich habe eine solche Konstruktion ausprobiert:


Zunächst schien es zu funktionieren, aber im Laufe der Verkomplizierung des Skripts funktionierte es auch nicht mehr...

Ich weiß nicht, ob es so sein soll, aber ich spüre nicht, wie flüssig EA arbeitet: Wenn ich den EA wechsle, arbeitet der alte weiter, als ob er im Hintergrund läuft, aber vielleicht habe ich es noch nicht herausgefunden.

Diese Schaltfläche wirkt sich nur auf die Handelsfunktionen aus. Alles andere funktioniert so, wie es sollte.
Grund der Beschwerde: