[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 386

 
splxgf писал(а) >>

Wahrscheinlich so etwas in der Art, weil Endlosschleifen auf moderner Hardware sehr lange dauern.

:)

 
Rita >>:

Добрый день.

В индикатоте есть ф-я IndicatorShortName("iC_C_mod, ..... ");

Мне, однако, нужно, кроме этой надписи, - чтобя я могла вставить коммент с динамично изменяющейся переменной в окно индикатора.

Типа ф-и Comment();

Но только, именно, в окно индикатора, а вовсе не на сам график.

Пож. подскажите ?


#property copyright "Copyright © 2009, :-)"
#property link      "----"

#property indicator_separate_window

int start()
{
   string info = "Bid= "+DoubleToStr(Bid,5);
   IndicatorShortName( info);
//----
   return(0);
}

so dass die Ausgabe in dem gewünschten Fenster erfolgt

 
Rita >>:

Добрый день.

В индикатоте есть ф-я IndicatorShortName("iC_C_mod, ..... ");

Мне, однако, нужно, кроме этой надписи, - чтобя я могла вставить коммент с динамично изменяющейся переменной в окно индикатора.

Типа ф-и Comment();

Но только, именно, в окно индикатора, а вовсе не на сам график.

Пож. подскажите ?


Sie können ein Etikett erstellen und den Text ändern


   string ID  = "MyLabelName";


   if(ObjectCreate( ID, OBJ_LABEL, 0, 20, 20))
     {
       ObjectSet( ID, OBJPROP_XDISTANCE, 35);
       ObjectSet( ID, OBJPROP_YDISTANCE, 35);
     }
 
   //отображение на экране значения переменной txt 
   string txt = "Belissimo";
   ObjectSetText( ID, txt , 18, "Arial Black", Green);
Der Code mag falsch sein, aber er funktioniert.
 
Lassen Sie es nicht unbeaufsichtigt
 
Vielen Dank, xeon und splxgf!
 
Meine Freunde, guten Tag.

Es wird interessant sein, Sie zu der folgenden Frage zu hören:

Es besteht die Auffassung, dass die Notierung eines Währungspaares von vielen anderen Finanzinstrumenten beeinflusst wird:
Bewegung der führenden Aktienindizes, Futures, Optionen usw.


1) Glauben Sie, dass es möglich ist, diesen Einfluss zu verfolgen?
(und somit konstruktiv in einer Handelsstrategie zu nutzen)...

2) Haben Sie dauerhafte Korrelationen zwischen den betreffenden Währungspaaren und den Kursen anderer Finanzinstrumente festgestellt?

3) Haben Sie Indikatoren verwendet, um solche Korrelationen nachzuweisen?


(Ich warte auf Ihre Kommentare in dem gleichnamigen thematischen Zweig dieses Forums: https://forum.mql4.com/ru/28930 )

 

splxgf писал

void CheckSell()
{
if((NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
Sell();
}

Wahrscheinlich etwas in der Art, denn Endlosschleifen dauern auf moderner Hardware sehr lange.


Das Programm prüft dann lediglich die Bedingung, und wenn sie erfüllt ist, wird es sie verkaufen. Und wenn nicht, was wird sie dann tun? Es soll darauf warten, dass die Bedingung in genau diesem Codefragment erfüllt wird.



Vinin schrieb


Warum haben Sie eine Schleife gemacht? Liegt keine Bedingung vor, sollte das Programm einfach beendet werden und nicht auf das Auftreten des Signals warten.

Aus diesem Grund habe ich die Schleife erstellt, denn in diesem Codefragment sollte das Programm auf das Eintreten der Bedingung warten. Sie können nicht an den Anfang der Schleife zurückkehren. Wie lässt sich das Warten auf eine Bedingung korrekt implementieren?


Und das ist mein Entwurf:

void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}


- Funktioniert es und bleibt der Tester einfach hängen? Oder funktioniert es überhaupt nicht? Ich möchte sehr gerne verstehen, wie man richtig auf die Erfüllung einer Bedingung wartet, ohne die gegebene Funktion zu verlassen.


Vielen Dank für die Antworten!

 
Jahspear >>:


Но ведь тогда программа просто проверит условие и если оно выполняется, продаст. А если не выполняется, что она будет делать? По задумке, должна ждать выполнения условия именно в этом месте кода.


Вот поэтому и сделал цикл, что именно в этом месте кода программа должна ждать выполнения условия. Выйти в начало нельзя. Как правильно реализовать цикл ожидания условия?


- она рабочая и просто тестер вешает? Или не работает в принципе? Очень хочется понять, как правильно ожидать выполнения условия, не выходя из заданной функции.

Das Programm wird höchstwahrscheinlich funktionieren, und es ist falsch, auf die Bedingung zu warten, ohne die Funktion zu beenden, zumindest wird der Tester kein neues Häkchen setzen, bis die Prozedur ausgeführt wurde.

Wenn die Bedingung nicht erfüllt ist, sollten Sie das Programm beenden und die Kontrolle an den Prüfer übergeben. Früher waren die Programme linear und haben sich daher in einer Schleife bewegt und auf Signale von oben gewartet. Jetzt ist das Programm ereignisgesteuert, wenn ein Ereignis eintritt, z. B. ein neuer Tick, und der Handler dieses Ereignisses ist der Aufruf von start(), nachdem alle notwendigen Arbeiten zur Verarbeitung eines neuen Ticks abgeschlossen sind, muss die Funktion beendet werden, anstatt ein Dispatcher zu sein.

Es ist richtig, die Bedingung in start() zu prüfen, ist die Bedingung eingetreten, erledigen Sie Ihre Arbeit, wenn nicht, beenden Sie Ihre Arbeit und warten Sie auf den nächsten Tick. Wir stellen unsere Logik bereits darauf ein.

 

Es stellt sich auch eine Frage.

Der Indikator zeigt die MA-Linien von zwei Währungspaaren in einem separaten Fenster an. Es funktioniert gut.

Aber wenn ich eine Bedingung in den Code einfüge:

"Wenn auf einem der Symbole ein Balken fehlt, dann wird auf dem zweiten Symbol dieser Balken übersprungen (nicht berücksichtigt)", etwa so:

int start()
  {
     int limit;
     int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if( counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if( counted_bars>0) counted_bars-=10;
     limit=Bars- counted_bars;
  //---- основной цикл
ВОТ Я СТАВЛЮ ЭТО УСЛОВИЕ  :
    for( k = 0; k < iBars( Symbol_1,Period()); k++)   {  
    int symb2Shift = iBarShift( Symbol_2,Period(),iTime( Symbol_1,Period(), k),true);
    if( symb2Shift != -1)                            { 
//---------------------------------
    for( k=0; k< limit; k++)
       {
       Symbol1[ k]=     (iMA( Symbol_1,..... k)  ;
       Symbol2[ k]=     (iMA( Symbol_2,..... k)  ;           
       } 
                        }
                       }
//----
    return(0);
  }

Dann bleibt mt4 für anderthalb bis zwei Minuten hängen. Dann beginnt der Indikator zu arbeiten, aber er verbraucht 35-45 % des RAM.

Woran kann das liegen, bitte um Rat?

 

Guten Tag!

Können Sie mir bitte sagen, wie ich einen einfachen Indikator schreiben kann, der einen bestimmten Balken (sollte in den Optionen eingestellt werden), z. B. um 12.30 Uhr mit einer vertikalen Linie hervorhebt und die Wochentage im Diagramm anzeigt (z. B. irgendwo über dem Heu eines jeden Tages)?

Ich danke Ihnen!

Grund der Beschwerde: