MetaTrader 4 Build 529 beta mit neuem Compiler veröffentlicht - Seite 125

 
stringo:

Sie können Eingabevariablen nicht ändern!

Verwenden Sie das Schlüsselwort input anstelle von extern, dann lässt der Compiler dies nicht zu

Wir werden sehen, was wir tun können, um die alte Vierfachfunktionalität zu erhalten.

PS: Vielen Dank, dass Sie es angesprochen haben.


Es gab also kein Ziel, sie zu ändern!

Sie werden nur für weitere Berechnungen verwendet. Mehr nicht!

Nun, im Prinzip sehe ich, dass wir dieses Problem durch die Einführung einer zusätzlichen Variable gelöst haben.

extern int TakeProfit_= 10;
int TakeProfit;
......  
   int dig = (int)MarketInfo(Symbol(), MODE_DIGITS);
   if (dig == 5 || dig == 3)
   {
      TakeProfit  = TakeProfit_* 10;
.....
 
Night63:


Es gab also keinen Grund, sie zu ändern!

Sie werden lediglich für weitere Berechnungen verwendet. Nicht mehr als das!

Nun, im Prinzip haben wir dieses Problem durch die Einführung einer zusätzlichen Variable gelöst.


Das ist wahr... Aber warum sollte man eine unveränderliche Konstante bei jedem Tick überprüfen? Es genügt, sie einmal in init() zu definieren
 
stringo:

Sie können die Eingabevariablen nicht ändern!

Ich verwende den Wert externer Variablen (für einige Variablen) als Standardwert und lese den Rest der Daten für denselben Parameter aus der Ini-Datei.

Expert Advisors arbeiten gleichzeitig mit mehreren Strategien, die ihre eigenen Eingabeparameter haben. Beispiel:

extern int TF = 15;
int gia_TF[5];
void start()
{
    for (int li_TF = 0; li_TF < ArraySize (gia_TF); li_TF++)
    {
        TF = gia_TF[li_TF];
    }
}

Ja - das Problem kann durch die Eingabe zusätzlicher Variablen gelöst werden, aber warum? Wird diese Funktionalität mit dem neuen MT wegfallen?

 
TarasBY:
Ich verwende den Wert externer Variablen (für einige Variablen) als Standardwert, und ich lese andere Daten für denselben Parameter aus der Ini-Datei.

Die Berater arbeiten gleichzeitig mit mehreren Strategien, die ihre eigenen Eingabeparameter haben. Beispiel:

Ja - die Frage kann durch die Eingabe zusätzlicher Variablen gelöst werden, aber warum? Wird diese Funktionalität mit dem neuen MT wegfallen?

Ich hab's ja gesagt. :-))

Dies ist überflüssig. Dies bedeutet, dass eine Inline mit externen Variablen als externe Variablen unnötig ist. Sie können extern entfernen. Sie werden den Unterschied gar nicht bemerken. Die Initialisierung erfolgt ohnehin über die INI-Datei.

 
TarasBY:
Ich verwende den Wert der externen Variablen (für einige Variablen) als Standardwert und lese die anderen Daten für denselben Parameter aus der Ini-Datei.

Die Berater arbeiten gleichzeitig mit mehreren Strategien, die ihre eigenen Eingabeparameter haben. Beispiel:

Ja - das Problem kann durch die Einführung zusätzlicher Variablen gelöst werden, aber warum?! Wird diese Funktionalität mit dem neuen MT wegfallen?


Nein, sie wird nicht entzogen.

Alles wird so sein wie bei den alten vier. Lange geschriebene Codes (auch mit dem neuen Compiler neu kompiliert) funktionieren wie bisher.

 
Zhunko:

Hab's dir ja gesagt... :-))

Das ist überflüssig. Das bedeutet, dass die Einbeziehung von externen Variablen als externe Variablen nicht notwendig ist. Sie können extern weglassen. Sie werden den Unterschied gar nicht bemerken. Die Initialisierung erfolgt ohnehin über die INI-Datei.

Vadim! Wer ist ein Kämpfer für Universalität und Multivarianz?! :)
 
stringo:

Nein, das wird es nicht.

Alles wird so sein wie im alten Quad. Lange geschriebener Code (auch mit dem neuen Compiler neu kompiliert) wird wie bisher funktionieren.

Ich danke Ihnen. GUT.
 
avtomat:

Das ist wahr... Aber warum sollte man eine unveränderliche Konstante bei jedem Tick überprüfen? Es genügt, sie einmal in init() zu definieren


Sie haben Recht, so war es anfangs auch, wir haben in der Phase der Problemlösung einfach alles Mögliche ausprobiert.

Nun zurück zu init, danke für den Hinweis auf den Fehler!

 
stringo:

Können Sie die physikalische Bedeutung Ihres Codes erklären?

Das Symbol, auf dem dieser Expert Advisor arbeitet, ist bereits ausgewählt, wenn sein Chart geöffnet ist.

Das bereits ausgewählte Symbol kann nicht erneut ausgewählt werden. Ein Symbol, dessen Diagramm geöffnet ist, kann nicht ausgeblendet werden.


Der physikalische Punkt ist zu überprüfen, ob das Symbol, dessen Name als String in den EA-Eingabeparametern eingegeben wird, für den Handel verfügbar ist. Der gleiche Code funktioniert in MT5.

Der von mir zitierte Code ist nur ein Beispiel. Dort ist es ein bisschen anders, aber die Bedeutung bleibt dieselbe.

P.S. Was ist mit dem Fehler 138 im Prüfgerät?

Code:

void OnTick()
  {
   if(OrdersTotal()==0)
     {
      string SYMBOL=Symbol();
      int digits=(int)SymbolInfoInteger(SYMBOL,SYMBOL_DIGITS);
      MqlTick lasttick={0};
      if(!SymbolInfoTick(SYMBOL,lasttick))
         return;
      double ask=lasttick.ask;
      double bid=lasttick.bid;

      OrderSend(SYMBOL,OP_BUY,0.1,NormalizeDouble(ask,digits),1000,0,0,"Test",0,0,CLR_NONE);
     }
  }

Ergebnis:

 
Einige Trivialitäten mit grafischen Objekten.

Diesmal OBJ_EDIT.

1) Es ist unmöglich, Daten einzugeben, wenn man in OBJ_EDIT klickt, passiert nichts, die Daten im Feld werden nicht hervorgehoben (vorher war es unmöglich, das Feld zu verlassen, außer mit der Taste "ENTER", jetzt ist es unmöglich, Daten einzugeben);

2) OBJPROP_ANCHOR funktioniert nicht;

3) Wenn OBJ_EDIT ausgewählt wird, erscheint ein Punkt zum Verschieben des Objekts in der oberen linken Ecke, allerdings mit einem gewissen, wenn auch sehr kleinen Versatz, je nachdem, von welcher Ecke des Diagramms (OBJPROP_CORNER) die Koordinaten gezählt werden.

Keine weiteren Probleme mit dem Rendering oder der Bewegung von grafischen Objekten. Danke für die Korrektur.