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

 
законопослушный гражданин #:

Soweit ich das beurteilen kann, besteht der Unterschied darin:

Sie können die Geschichte von Anfang an oder vom Ende her durchgehen. Es gibt keinen Unterschied. In jedem Fall sucht die Funktion nach dem Auftrag mit der spätesten Schlusszeit. Und wenn Sie Aufträge löschen oder schließen wollen, sollten wir vom Ende der Liste aus suchen. Andernfalls überspringt die Schleife Aufträge.

 
законопослушный гражданин #:

Soweit ich sehen kann, ist der Unterschied wie folgt:

In diesem Fall gibt es keinen Unterschied. Der Zyklus von OrersTotal bis 0 ist nur im Falle der Schließung von Positionen oder der Entfernung von Aufträgen obligatorisch. In anderen Fällen bleibt es Ihnen überlassen, wie Sie sich entscheiden.

 
Mihail Matkovskij #:

Sie können die Geschichte von Anfang an oder vom Ende her durchgehen. Es gibt keinen Unterschied. In jedem Fall sucht die Funktion nach dem Auftrag mit der spätesten Schlusszeit. Und wenn Sie Aufträge löschen oder schließen wollen, müssen Sie vom Ende der Liste aus suchen. Andernfalls überspringt die Schleife Aufträge.

Wenn die Funktion nach dem Auftrag mit dem spätesten Abschlusszeitpunkt sucht, wird die Suche natürlich schneller vom Ende als vom Anfang der Historie aus erfolgen - von der aktuellen Zeit zur vergangenen Zeit.

 
Artyom Trishkin #:

Wenn die Funktion nach einem Auftrag mit der spätesten Schlusszeit sucht, wird die Suche natürlich schneller vom Ende der Historie aus erfolgen als vom Anfang der Historie - von der aktuellen Zeit zur vergangenen Zeit.

In umgekehrter Richtung findet die Funktion den Auftrag mit der spätesten Abschlusszeit schneller, ändert ihn bis zum Ende des Zyklus nicht und gibt das Ergebnis zurück. In Vorwärtsrichtung werden alle Aufträge durchsucht und einer der letzten Aufträge zurückgegeben. Der Unterschied besteht darin, dass die Variablen bei jedem Durchlauf der Schleife überschrieben werden. Ja, es gibt einen Unterschied. Aber ich denke, das ist nicht sehr wichtig. Allerdings würde ich die Schleife in umgekehrter Richtung der Vorwärtsschleife vorziehen. Trotzdem wird die Funktion auf die eine oder andere Weise funktionieren.

 
Hallo zusammen, gibt es eine Möglichkeit, programmatisch zwischen Diagrammfenstern zu wechseln, d.h. ein beliebiges Diagramm aus dem Programm heraus aktiv zu machen?
 
Maksim Mihajlov #:
Hallo zusammen, gibt es eine Möglichkeit, programmatisch zwischen Diagrammfenstern umzuschalten, d.h. ein beliebiges Diagramm aus einem Programm heraus aktiv zu machen?

Überprüfen Sie

CHART_BRING_TO_TOP

Diagramm über allen anderen Diagrammen anzeigen

bool

 
Alexey Viktorov #:

Überprüfen Sie

CHART_BRING_TO_TOP

Diagramm über allen anderen Diagrammen anzeigen

bool

Ich danke Ihnen!

 
Mihail Matkovskij #:

Sie können die Geschichte von Anfang an oder vom Ende her durchgehen. Es gibt keinen Unterschied. In jedem Fall sucht die Funktion nach dem Auftrag mit der spätesten Schlusszeit. Und wenn Sie Aufträge löschen oder schließen wollen, müssen Sie vom Ende der Liste aus suchen. Andernfalls überspringt die Schleife Aufträge.

Wie auch immer, ich habe zwei völlig identische EAs erstellt, bis auf die Zählung der Auftragslose!!! und hier ist das Ergebnis:

FUNKTIONIERT NICHT (d.h. öffnet nicht BAY statt SELL)

void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
,,,
double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) {Ls=OrderLots();}
           }
        }
     }
   return Ls;
  }

WORKING ((d.h. öffnet BAY statt SELL)


void OnTick()
{
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
      if(CountOrders()==0)
 {
//Если появился сигнал на покупку, то откроем ордер на покупку
  if(bSignalBuy())
  {
   if(GetLotSize()>LotControl) vOrderOpenSell();
   else vOrderOpenBuy();
  }
// Если появился сигнал на продажу, то откроем ордер на продажу
  if(bSignalSell())
  {
   if(GetLotSize()>LotControl) vOrderOpenBuy();
   else vOrderOpenSell();
  }
 }
}
...
double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderCloseTime(); Ls=OrderLots();}
              }
           }
        }
     }
   return Ls;
  }
 
законопослушный гражданин #:

Wie auch immer, ich habe zwei völlig identische EAs gemacht, bis auf die Zählung der Auftragslose!!! und hier ist das Ergebnis:

FUNKTIONIERT NICHT (d.h. öffnet nicht BAY statt SELL)

WORKING (d.h. öffnet BAY anstelle von SELL)


Ich betone noch einmal den Unterschied

1 Variante

double GetLotSize()
  {
   double Ls=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))

2 Variante

double GetLotSize()
  {
   double Ls=0;
   datetime t=0;
   int i=OrdersHistoryTotal();
   for(int pos=0; pos<i; pos++)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY))
 
законопослушный гражданин #:

Wie auch immer, ich habe zwei völlig identische EAs gemacht, bis auf die Zählung der Auftragslose!!! und hier ist das Ergebnis:

FUNKTIONIERT NICHT (d.h. öffnet nicht BAY statt SELL)

WORKING ((d.h. öffnet BAY statt SELL)


Versuchen Sie zu verstehen, was Sie kodieren, anstatt blindlingsOrdersTotal,OrdersHistoryTotal zu kopieren,

BestellungAuswählen

pool=MODE_TRADES

[in] Quelle der auszuwählenden Daten. Wird verwendet, wenn der Auswahlparameter SELECT_BY_POS lautet. Kann einer der folgenden Werte sein:

MODE_TRADES (Standard) - der Auftrag wird unter den offenen und schwebenden Aufträgen ausgewählt,
MODE_HISTORY - der Auftrag wird unter den geschlossenen und gelöschten Aufträgen ausgewählt.

    OrdersTotal - Торговые функции - Справочник MQL4
    OrdersTotal - Торговые функции - Справочник MQL4
    • docs.mql4.com
    OrdersTotal - Торговые функции - Справочник MQL4
    Grund der Beschwerde: