[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 59

 
Vielen Dank an alle, es funktioniert alles wie es soll! Ich wünschte, ich hätte Smileys, ich würde gerne einen Haufen setzen :)
 
oleg_felix: Wie lege ich den Zeitrahmen fest, in dem die Geschäfte ausgeführt werden sollen? (Startzeit und Endzeit)

siehe hier: https://www.mql5.com/ru/forum/135030

 
Das hat geholfen, danke, ich habe es noch rechtzeitig hinbekommen!
 

Bitte sagen Sie mir, wie ich einen einfachen Befehl schreiben kann:

- einen Auftrag in eine verlustfreie Position für eine bestimmte Anzahl von Pipsumzuwandeln

 
oleg_felix:

Können Sie mir bitte sagen, wie ich einen einfachen Befehl schreiben kann:

- Legen Sie in einem offenen Auftrag einen Stop-Loss fest, um den Break-Even (unter Berücksichtigung des Spreads) bei einem bestimmten Gewinn im Handel zu erreichen.

Hier ist eine Funktion, die alle Aufträge mit der gleichen magischen Zahl in s/w umwandelt, experimentieren Sie damit


extern int     LevelWLoss        = 100;       // Уровень безубытка в пп
extern int     LevelProfit       = 300;       // Уровень профита в пп
//+----------------------------------------------------------------------------+
//|  Перенос стопа в безубыток                                                 |
//+----------------------------------------------------------------------------+
void MovingInWL(int Magic) {
  int i, k;
  string sym;
  double ord_open,ord_TP,ord_SL;
  
  k = OrdersTotal()-1;
  sym = Symbol();
  for (i=k; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sym && OrderMagicNumber()==Magic) {
        ord_open = OrderOpenPrice();
        ord_TP   = OrderTakeProfit();
        ord_SL   = OrderStopLoss();
        if (OrderType()==OP_BUY) {
          if (NormalizeDouble(ord_SL,Digits)==NormalizeDouble(0,Digits) || 
              NormalizeDouble(ord_SL-ord_open,Digits)<NormalizeDouble(LevelWLoss*Point,Digits)) {
            if (NormalizeDouble(Bid-ord_open,Digits)>NormalizeDouble(LevelProfit*Point,Digits)) {
              OrderModify(OrderTicket(), ord_open, NormalizeDouble(ord_open+LevelWLoss*Point,Digits), ord_TP, 0, Yellow);
            }
          }
        }
        if (OrderType()==OP_SELL) {
          if (NormalizeDouble(ord_SL,Digits)==NormalizeDouble(0,Digits) || 
              NormalizeDouble(ord_open-ord_SL,Digits)<NormalizeDouble(LevelWLoss*Point,Digits)) {
            if (NormalizeDouble(ord_open-Ask,Digits)>NormalizeDouble(LevelProfit*Point,Digits)) {
              OrderModify(OrderTicket(), ord_open, NormalizeDouble(ord_open-LevelWLoss*Point,Digits), ord_TP, 0, Yellow);
            }
          }
        }
      }
    }
  }
return;
}
//_______________________________________________________________________
 

IgorM


Hier ist mein EA-Code: Wo möchte ich die Breakeven-Funktion einfügen?

extern int tp = 0;

extern int sl = 0;

extern int BeginHour = 0; // Startzeit

extern inttern EndHour = 0; // Endzeit

int start()

{

//----

if(OrdersTotal()==0 && Hour() >= BeginHour && Hour() < EndHour && Close[1]<Open[1] && High[1]<Bid) // prüfen, ob der Preis des vorherigen Balkens niedriger ist als der offene. Kaufauftrag, wenn der Kurs von den Geldkurs des aktuellen Balkens erreicht, den Höchststand des vorherigen Balkens.

OrderSend(Symbol(),OP_BUY,1,Ask,0,Ask-sl*Point,Ask+tp*Point,"",777,0,Red);

if(OrdersTotal()==0 && Hour() >= BeginHour && Hour() < EndHour && Close[1]>Open[1] && Low[1]>Bid) // prüfen, ob der Auftrag eröffnet wurde und der Schlusskurs des vorherigen Balkens niedriger als der Eröffnungskurs ist. Kaufauftrag, wenn der Preis den aktuellen Barpreis erreicht Bid , Höchststand des vorherigen Bars.

OrderSend(Symbol(),OP_SELL,1,Bid,0,Ask+sl*Point,Ask-tp*Point,"",777,0,Red);

//----

zurück(0);

}

 
oleg_felix:

Hier ist mein EA-Code: Wo sollte ich die Breakeven-Funktion platzieren?

Ich denke, zum jetzigen Zeitpunkt reicht es aus, meine Funktion an das Ende Ihres Codes anzufügen und zumindest Folgendes in Ihrem Code zu tun:

if(OrdersTotal()>0) MovingInWL(777);

Fügen Sie am Anfang Ihres Codes hinzu

extern int LevelWLoss = 100; // Breakeven-Niveau in Pips
extern int LevelProfit = 300; // Gewinnniveau in Pips

Ich bezweifle, dass Sie dieses Problem selbst lösen werden :)

 
DmitriyN:
Sie können. Es ist auch möglich, ein Konto von einem Computer aus zu verwalten, der am Arbeitsplatz eingerichtet ist, oder umgekehrt, wenn Sie zu Hause sind.
Ich danke Ihnen.
 

Ich habe versucht, die Funktion eines anderen nachzubasteln, und "ein wenig" verpatzt, hier ist ein Stück Code:

string FileName = test.txt;

int FileHandle=FileOpen(FileName,FILE_READ);
  if (FileHandle < 0)
     {
       Print("Файл не найден.");
     }
  
  string strInfo;
  int i;
  if (FileHandle>0)
     {
     while (i<20)
        {
          if (FileHandle == 1)
            {
            string strInfo1=FileReadString(FileHandle);
            }else{
                 if (FileHandle == 2)
                    {
                    string strInfo2=FileReadString(FileHandle);
                    }else{
                         if (FileHandle == 3)
                              {
                            string strInfo3=FileReadString(FileHandle);
                              }else{
                                   if (FileHandle == 4)
                                       {
                                       string strInfo4=FileReadString(FileHandle);
                                       }else{
                                            if (FileHandle == 5)
                                               {
                                               string strInfo5=FileReadString(FileHandle);
                                               }else{
                                                    if (FileHandle == 6)
                                                       {
                                                       string strInfo6=FileReadString(FileHandle);
                                                       }else{
                                                            if (FileHandle == 7)                                                            
                                                               {
                                                               string strInfo7=FileReadString(FileHandle);
                                                               }else{
                                                                    if (FileHandle == 8)                                                                    
                                                                        {
                                                                        string strInfo8=FileReadString(FileHandle);
                                                                        }else{
                                                                             if (FileHandle == 9)
                                                                                 {
                                                                                 string strInfo9=FileReadString(FileHandle);
                                                                                 }else{
                                                                                      if (FileHandle == 10)
                                                                                         {
                                                                                         string strInfo10=FileReadString(FileHandle);
                                                                                         }else{
                                                                                              Print("Ошибка! В файле должно быть не более 10 записей!");
                                                                                              }
                                                                                      }
                                                                             }
                                                                    }
                                                            }
                                                    }
                                            }
                              
                                   }
                          }
                   
                               
             
          }
          if (StrToInteger(strInfo1)==12345||StrToInteger(strInfo2)==12345||
              StrToInteger(strInfo3)==12345||StrToInteger(strInfo4)==12345||
              StrToInteger(strInfo5)==12345||StrToInteger(strInfo6)==12345||
              StrToInteger(strInfo7)==12345||StrToInteger(strInfo8)==12345||
              StrToInteger(strInfo9)==12345||StrToInteger(strInfo10)==12345)
          {
          isNumInFile = TRUE;
          }

        if (FileIsEnding(FileHandle) && isNumInFile == FALSE)
           {
           Print("Достигнут конец файла, искомое значение не найдено");
           break;
           }
        i++;

        if (i>100) break;
        }
     FileClose(FileHandle);
     }

Ich wollte, dass es einen bestimmten Wert in den ersten 10 Zeilen der Datei test.txt findet, und wenn die Anzahl der Zeilen mehr als 10 ist, gibt es die Fehlermeldung "Error! Es sollten nicht mehr als 10 Datensätze in der Datei sein!", aber aus irgendeinem Grund geht es immer noch durch alle Datensätze, bitte helfen Sie mir, es zu beheben, und wenn Sie den Code zu vereinfachen und machen es als eine separate Funktion.

 

Leute, bitte erklärt in einfacher Form, was eine Parameterübergabe per Referenz ist. Ich habe die Dokumentation gelesen, aber nur verstanden, dass es möglich ist und nach der Variablenidentifikation ein Modifikator & gesetzt werden muss. Es wäre toll, wenn die Erklärung von einem kleinen Programm mit Erklärungen begleitet würde... Was ist der Unterschied zwischen der üblichen Parameterübergabe und der Übergabe von Parametern per Referenz?