[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 205

 
alsu:
Es heißt nicht "sollte vom Typ double sein", sondern "wird in einer globalen Variablen als double gespeichert". Gefühl

Guten Tag. Ich habe versucht, den Unterschied zu "erfühlen", und das ist dabei herausgekommen... D.h. man kann (mit etwas Dehnung) eine GV-Variable WIRKLICH wie folgt definieren. Eine GV-Variable ist sozusagen eine "Box", in der man eine Variable beliebigen Typs speichern kann (außer String, denn eine GV-Variable ist nur vom Typ Double, während die Typecasting-Regel keine Typreduktion erlaubt, d.h. man kann aus einem String keinen Double machen). Und diese Variable, die wir in eine GV-Variable einfügen werden, "wird die Form dieser Box annehmen" (d.h. sie wird vom Quelltyp in den Doppeltyp umgewandelt)... Jedenfalls ist es so, nicht wahr?

Ich danke Ihnen im Voraus für Ihre Antwort.
 

Guten Tag. Die Frage lautet wie folgt. ImMQL4-Buch vonS.K . gibtes imAbschnitt "Trading Operations" ein Beispiel für ein einfaches Skript, das einen schwebenden Auftrag, dessen angegebener Preis höher ist als der anderer schwebender Aufträge (modifyorderprice.mq4), wiefolgt ändert :

//--------------------------------------------------------------------
// modifyorderprice.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                                     // Спец.функция start
  {
   int Tral=10;                                 // Дист. приближения
   string Symb=Symbol();                        // Финанс. инструмент
   double Dist=1000000.0;                       // Предустановка
   double Win_Price=WindowPriceOnDropped();     // Здесь брошен скрипт
//--------------------------------------------------------------- 2 --
   for(int i=1; i<=OrdersTotal(); i++)          // Цикл перебора ордер
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // Если есть следующий
        {                                       // Анализ ордеров:
         //------------------------------------------------------ 3 --
         if (OrderSymbol()!= Symb) continue;    // Не наш фин.инструм.
         if (OrderType()<2) continue;           // Рыночный ордер  
         //------------------------------------------------------ 4 --
         if(NormalizeDouble(MathAbs(OrderOpenPrice()-Win_Price),Digits)
            < NormalizeDouble(Dist,Digits))     // Выбираем ближайший
           {
            Dist=MathAbs(OrderOpenPrice()-Win_Price);// Новое значение
            int    Tip   =OrderType();          // Тип выбранного орд.
            int    Ticket=OrderTicket();        // Номер выбранн. орд.
            double Price =OrderOpenPrice();     // Цена выбранн. орд.
            double SL    =OrderStopLoss();      // SL выбранного орд.
            double TP    =OrderTakeProfit();    // TP выбранного орд.
           }                                    // Конец if
        }                                       // Конец анализа ордера
     }                                          // Конец перебора орд.
//--------------------------------------------------------------- 5 --
   if (Tip==0)                                  // Если отложенных нет
     {
      Alert("По ",Symb," отложенных ордеров нет");
      return;                                   // Выход из программы
     }
//--------------------------------------------------------------- 6 --
   while(true)                                  // Цикл закрытия орд.
     {
Oder es gibt einen Fehler in diesem Skript in Block 5-6, weil (wie ich es sehe) die Zeile
if (Tip==0)                                  // Если отложенных нет
sollte in der Form
if (Tip<2)                                  // Если отложенных нет
da alle Arten von nicht anhängigen (Markt-)Aufträgen den Typ 0 oder 1 haben, d.h. weniger als 2.

Oder habe ich etwas missverstanden?

Frage: Könnten Sie bitte klarstellen: Wenn ich etwas missverstanden habe, was ist es dann?

Ich danke Ihnen im Voraus für Ihre Antwort.

 
7777877:

Guten Tag. Ich habe die folgende Frage. ImMQL4-Buchvon S.K. gibt es imAbschnitt "Trading Operations" ein Beispiel für ein einfaches Skript, das einen schwebenden Auftrag ändert, dessen erklärter Preis näher an dem Punkt liegt, an dem das Skript angehängt ist, als die Preise anderer schwebender Aufträge(

Oder es gibt einen Fehler in diesem Skript in Block 5-6, weil (wie ich es sehe) die Zeile

so aussehen sollte

, weil alle Arten von nicht ausstehenden (Markt-)Aufträgen den Typ 0 oder 1 haben, d.h. weniger als 2.

Oder ich habe etwas falsch verstanden.

Frage: Könnten Sie mich bitte aufklären: wenn ich etwas falsch verstanden habe, was

genau?

Vielen Dank im Voraus für die Antwort

Lieber... Schreiben Sie hier nicht so große Buchstaben... Sie könnten sich die Augen brechen :-)

und das... bevor Sie Fragen stellen... haben Sie versucht, den HINTERGRUND in MetaEditor zu lesen? Alles?... für den Anfang... damit du keine dummen Fragen über Typen und so weiter stellst....

===

Art der Operation für die Funktion OrderSend(). Kann einer der folgenden Werte sein:

Konstante Wert Beschreibung
OP_BUY 0 Kaufen
OP_SELL 1 Verkaufen
OP_BUYLIMIT 2 BUY LIMIT schwebende Order
OP_SELLLIMIT 3 Ausstehender SELL LIMIT-Auftrag
OP_BUYSTOP 4 Ausstehender BUY STOP-Auftrag
OP_SELLSTOP 5 Ausstehender SELL STOP-Auftrag
 

aber was den Typ angeht - da ist nichts falsch... genau ==0 sein sollte...

denn im 3. Block

      if (OrderType()<2) continue;           // Рыночный ордер  

Marktaufträge werden übersprungen...

===

und wenn die schwebenden Aufträge in der Auftragsliste gefunden werden, ist die Variable TYPE nicht gleich 0

---

 

Guten Tag. Können Sie mir einen Tipp geben?

Wir haben zum Beispiel ein Kriterium für den MA-Durchgang durch Level_R und Level_S:

int Criterion;
double MA_1=iMA(......,0);
double MA_2=iMA(......,1);
double MA_3=iMA(......,2);
if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 MA_3 <= Level_S_3) Criterion=1;
if(MA_1 > Level_R_1 && Ma_2 <= Level_R_2 MA_3 <= Level_R_3) Criterion=2;

Frage: Wie können wir das Kriterium speichern, so dass es einen Wert von 1 oder 2 (je nach Durchlauf) behält, bis ein neuer Durchlauf erfolgt, und nicht bei nachfolgenden Ticks zurückgesetzt wird?

 
Setzen Sie die Variablendefinition außerhalb der Start- oder anderen Funktion... In globale Variablen...
 
Aleksander:
Setzen Sie die Variablendefinition außerhalb der Start- oder anderen Funktion... In globale Variablen...
Das habe ich versucht, und er hat geflucht... die auf meine Inkompetenz hinweisen.
 
wenn der Text klein ist, den ganzen Text veröffentlichen... höchstens 20-30 Zeilen
 
int Criterion, Crit;
int start()
 {
  Crit= Fun_Criterion( Criterion); 

  switch(Crit)
   {
   /************/
   }
return(0);
 }

Fun_Criterion(int Criterion)
 {
  if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 MA_3 <= Level_S_3) Criterion=1;
  if(MA_1 < Level_R_1 && Ma_2 >= Level_R_2 MA_3 >= Level_R_3) Criterion=2;

  return(Criterion);
 }
 

warum gibt es zwischengeschaltete Stellen? und was ist die Funktion der FUN?

int Criterion;
int start() {
  Fun_Criterion(); 

  switch( Criterion)
   {
   /************/
   }
  return(0);
}
//-----------------------------
void Fun_Criterion() {
  if(MA_1 > Level_S_1 && Ma_2 <= Level_S_2 &&  MA_3 <= Level_S_3) Criterion=1;
  if(MA_1 < Level_R_1 && Ma_2 >= Level_R_2 &&  MA_3 >= Level_R_3) Criterion=2;
 }

Und && sind nicht an der richtigen Stelle...