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

 
Maxim Kuznetsov:
Es fühlt sich an, als käme der Originaltext aus einem Paralleluniversum, wurde zweimal von google-translate übersetzt und dann von Alice neu erzählt :-)

Ja. Es gibt eine Funktion, mit der man das letzte Los finden kann. Es heißtFindLastLots. Aber ich will eine Funktion machen, die nicht nur nach dem letzten Los sucht, sondern mit der man Lose ändern kann. Das heißt, wenn extern lots = 0,01; möchte ich mitdieser Funktion lots = 0,01 z.B. auf 0,04 ändern. Und hier benötige ich Hilfe, um zu verstehen, wie es im Allgemeinen umgesetzt werden kann.

double FindLastLots()
  {
   double oldlots=0;
   int oldticket;
   int ticket=0;

   for(int i=OrdersHistoryTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oldticket=OrderTicket();
            if(oldticket>ticket)
              {
               oldlots= OrderLots();
               ticket = oldticket;
              }
           }
        }
     }
   return(oldlots);
  }
Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит...
 
Corvin85:

...

Ändern Sie Lose = 0,01, z. B. in 0,04. Ohne die Multiplikation zu verwenden.

...

Na ja... Wenn die Multiplikation ein Problem ist, können Sie das gewünschte Ergebnis durch Addition erzielen.

 
Alexey Viktorov:

Na ja... Wenn die Multiplikation ein Problem ist, können Sie das gewünschte Ergebnis durch Addition erzielen.

-:)

ohne zu sagen
 
Kann ich eine while-Schleife zu dieser Funktion hinzufügen, so dass ich die externen Variablen in den ausgewählten Aufträgen einzeln durchgehen kann? Aber wie kann ich dann den "Rückgabewert" herausziehen und verwenden?
 
Alexey Viktorov:

Na ja... wenn es Probleme mit der Multiplikation gibt, kann man das gewünschte Ergebnis durch Addition erreichen.

Ich verstehe Ihren Sarkasmus, aber bei Multiplikationen oder Berechnungen sollte es so viele Multiplikatoren geben, wie es externe Variablen gibt Lots. Das ist kein Ausweg aus der Situation. Aber um ehrlich zu sein, ich habe darüber nachgedacht...

 
Hallo!!! Ich mache einen EA, der auf einem M5 timeframe.... basiert, aber die Signale ausgelöst werden (zum Beispiel um 9:33, 12:11) etc..... können Sie mir sagen, wie man eine Bestellung auf eine neue Kerze zu öffnen, wenn das Signal auf die aktuelle war?
 
Corvin85:

Ich verstehe Ihren Sarkasmus, aber bei Multiplikationen oder Berechnungen sollte es so viele Multiplikatoren geben, wie es externe Variablen gibt Lots. Das ist kein Ausweg aus der Situation. Aber ich will ehrlich sein, ich habe darüber nachgedacht.

Ich kann mich jetzt nicht mehr an die Einzelheiten erinnern, aber mir wurde etwas Kompliziertes zur Berechnung von Lots bestellt. Daraufhin wurde eine Formel gefunden, nach der die Berechnung vorgenommen wurde.

Vielleicht wäre es besser, wenn Sie den Auftrag im Detail angeben würden? Dann kann jemand diese Formel vorschlagen.

 
Alexey Viktorov:

Ich kann mich jetzt nicht mehr an die Einzelheiten erinnern, aber ich wurde angewiesen, bei der Berechnung des Loses etwas Aufwendiges zu tun. Das Ergebnis war eine Formel, mit der sie berechnet wurde.

Vielleicht wäre es besser, wenn Sie den Auftrag im Detail angeben würden? Dann kann jemand diese Formel vorschlagen.

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

extern double Lot  = 0.01;
extern double Lot2  = 0.02;
extern double Lot3  = 0.05;
extern double Lot3  = 0.07;
//----------- И так далее-------//

Es gibt mehrere externe Variablen von Lot. Wenn eine Order durch Stop Loss geschlossen wird, wird eine neue Order mit dem in der externen Variablen angegebenen neuen Lot eröffnet. (Vielleicht hätten wir es ursprünglich so schreiben sollen). Ich weiß nur nicht, wie ich es richtig in den Code schreiben soll. Und wie ich oben schrieb, hilft keine Multiplikation oder Berechnung, kein externer Multiplikator. Wir müssen irgendwie durch die Daten der abgeschlossenen Aufträge gehen...

 
Corvin85:

Es gibt mehrere externe Variablen Lot. Wenn ein Auftrag durch StopLoss geschlossen wird, wird ein neuer Auftrag mit einem neuen Lot eröffnet, das in der externen Variablen angegeben ist. (Vielleicht hätte dies ursprünglich so geschrieben werden sollen) Und hier liegt der Haken. Ich weiß nur nicht, wie ich es richtig in den Code schreiben soll. Und wie ich oben schrieb, hilft keine Multiplikation oder Berechnung, kein externer Multiplikator. Wir müssen irgendwie die Daten von abgeschlossenen Aufträgen abrufen ...

Wenn Sie einen Auftrag eröffnen, schreiben Sie die Nummer der Regel/Variable in den Kommentar.

Wenn Sie dann den Verlauf prüfen, holen Sie diese Nummer, addieren Sie 1 dazu und erhalten Sie eine neue Regelnummer

 
Corvin85:

Es gibt mehrere externe Variablen Lot. Wenn ein Auftrag durch StopLoss geschlossen wird, wird ein neuer Auftrag mit einem neuen Lot eröffnet, das in der externen Variablen angegeben ist. (Vielleicht hätte dies ursprünglich so geschrieben werden sollen) Und hier liegt der Haken. Ich weiß nur nicht, wie ich es richtig in den Code schreiben soll. Wie ich oben schrieb, hilft keine Multiplikation oder Berechnung, kein externer Multiplikator. Wir müssen die Daten der abgeschlossenen Aufträge irgendwie durchgehen.

Experimentieren Sie mit diesem Code, vielleicht ist es das, was Sie brauchen

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict

input double Lot_01  = 0.1;
input double Lot_02  = 0.2;
input double Lot_03  = 0.3;
input double Lot_04  = 0.4;
input double Lot_05  = 0.5;
input double Lot_06  = 0.6;
input double Lot_07  = 0.7;

double GetNextLot(const double last_lot)
{
   if(last_lot>=Lot_07) return(Lot_07);
   if(last_lot>=Lot_06) return(Lot_07);
   if(last_lot>=Lot_05) return(Lot_06);
   if(last_lot>=Lot_04) return(Lot_05);
   if(last_lot>=Lot_03) return(Lot_04);
   if(last_lot>=Lot_02) return(Lot_03);
   if(last_lot>=Lot_01) return(Lot_02);
   return(Lot_01);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   Print(Lot_01," ---> ",GetNextLot(Lot_01));
   Print(Lot_02," ---> ",GetNextLot(Lot_02));
   Print(Lot_03," ---> ",GetNextLot(Lot_03));
   Print(Lot_04," ---> ",GetNextLot(Lot_04));
   Print(Lot_05," ---> ",GetNextLot(Lot_05));
   Print(Lot_06," ---> ",GetNextLot(Lot_06));
   Print(Lot_07," ---> ",GetNextLot(Lot_07));
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
void OnTick()
  {

   
  }
//+------------------------------------------------------------------+

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.7 ---> 0.7

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.6 ---> 0.7

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.5 ---> 0.6

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.4 ---> 0.5

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.3 ---> 0.4

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.2 ---> 0.3

2019.11.28 22:31:26.409 tst EURUSD,H1: 0.1 ---> 0.2

In meiner Funktion GetNextLot() geben Sie das Volumen der letzten geschlossenen Order ein, und es wird der nächste Wert der Lot_XX-Einstellung zurückgegeben

die einzige Einschränkung in diesem Code ist, dass die Einstellungen für die Lose in aufsteigender Reihenfolge erfolgen sollten - ich denke, der Code ist einfach und unkompliziert, Sie können ihn Ihren Bedürfnissen entsprechend ändern

Grund der Beschwerde: