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

 
viktor:
Sagen Sie mir, wo Sie MT4 1320 herunterladen können
Alpari
 

Der OBV-Indikator in mt5 hat keine Möglichkeit, die Art der Preisberechnung zu wählen

In mt4 ist diese Option verfügbar.

Und warum?

In der Tat ist OBV als die Summe aller Volumen auf die gesamte Geschichte berechnet, wo die Kerze nach unten ist das Volumen "negativ"
Also warum ist es möglich, den Preistyp für den Indikator Berechnung in mt4 wählen? wenn es nicht in der Berechnung beteiligt ist

 

Es gibt einen Teil des Codes zur Berechnung der separaten Anzahl von Kauf- und Verkaufsaufträgen. (b - Kaufaufträge, s - Verkaufsaufträge)

Dann möchte ich eine Bedingung schreiben, wenn ein neuer Auftrag eröffnet oder ein bestehender Auftrag geschlossen wird. D.h. wir müssen die Anzahl der früher eröffneten Aufträge und die Anzahl der nachfolgenden Änderungen vergleichen, aber ich weiß nicht, wie ich das in den Code schreiben soll. Wie speichere ich Änderungen in der Anzahl der Bestellungen? Bitte um Hilfe.

double LB=0, LS=0;
double RaznSB=0, RaznBS=0;
int b=0,s=0;
int izmb=0, izms=0;
for (int i=0; i<OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (AuftragSymbol()==Symbol())
{
int tip = OrderType();
wenn (Tipp==OP_BUY)
{
LB += OrderLots();
b++;
}
wenn (Tipp==OP_SELL)
{
LS += OrderLots();
s++;
}
}
}
}
if (izmb>b ||izmb<b || izms>s || izms<s) {
izmb=b;
izms=s
}
 
Roman Sharanov:

Der OBV-Indikator in mt5 hat keine Möglichkeit, die Art der Preisberechnung zu wählen

In mt4 ist diese Option verfügbar.

Warum?

In der Tat ist OBV als die Summe aller Volumen auf die gesamte Geschichte berechnet, wo die Kerze nach unten ist das Volumen "negativ"
Warum ist es also möglich, den Preistyp für den Indikator während seiner Berechnung in mt4 wählen? wenn es nicht in der Berechnung beteiligt ist

Eine gute Frage ist die halbe Antwort.

 
scomoroh:

Es gibt einen Teil des Codes zur Berechnung der separaten Anzahl von Kauf- und Verkaufsaufträgen.

Und es gibt einen Platz zum Einfügen)

 
Artyom Trishkin:

Eine gut formulierte Frage enthält die halbe Antwort.

Also die Wahl der Preis-Typ in mt4 ts OBV bedeutet nichts und hat keinen Einfluss auf alles?
 
MakarFX:

Und es gibt einen Platz, wo man es abstellen kann).

Dann werde ich die Frage wiederholen.

Es gibt einen Teil des Codes, der die Anzahl der einzelnen Kauf- und Verkaufsaufträge berechnet. (b - Kaufaufträge, s - Verkaufsaufträge)

Dann habe ich eine Bedingung geschrieben, die, wenn ein neuer Auftrag eröffnet oder ein bestehender Auftrag geschlossen wird, die nächste Aktion auslöst. D.h. wir müssen die Anzahl der früher eröffneten Aufträge und die Anzahl der nachfolgenden Änderungen vergleichen, aber ich weiß nicht, wie ich das in den Code schreiben soll. Wie speichere ich Änderungen in der Anzahl der Bestellungen? Bitte um Hilfe.


   double LB=0,LS=0;
   int b=0,s=0;
   int izmb=0, izms=0;
   
   for (int i=0; i<OrdersTotal(); i++)
   {    
      if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      { 
         if (OrderSymbol()==Symbol())
         { 
            int tip = OrderType(); 
            if (tip==OP_BUY)             
             {  
               LB  += OrderLots();
               b++; 
             }                                         
            if (tip==OP_SELL)        
             {
               LS  += OrderLots();
               s++;
            } 
         }
     }     
   }
   if (izmb>b ||izmb<b || izms>s || izms<s){ //условие сравнения количества ордеров, изменилось или нет,
    izmb=b;                                   //если изменилось то присваиваем новое значение, как его сохранить? Ведь с новым тиком
    izms=s                                    // оно опять будет равно "0"???
     }
 
Vitaly Muzichenko:

Wenn überhaupt, müssen Sie es statisch tun, sonst wird es zurückgesetzt.

Normalerweise mache ich Flaggen global. Natürlich wird im Körper der Funktion neu deklariert und Static benötigt. Aber warum ist niemandem aufgefallen, dass geschweifte Klammern fehlen)))) print & assignment should be in brackets)

Und ohne Statik wird es natürlich bei jedem Funktionsaufruf gedruckt, daprintsimbol="" zu NULL wird und dem Symbol der aktuelle Wert zugewiesen wird)

static string symbol, printsimbol="";
      long currChart=ChartFirst(); int i=0;
      while(currChart>=0)
        {
         if(ChartGetInteger(currChart,CHART_BRING_TO_TOP,0)==true) 
           { 
            if(ChartSymbol(currChart)!=symbol)
                {
                 symbol=ChartSymbol(currChart);
                 if(printsimbol!=symbol)
                   { Print(symbol);printsimbol=symbol;}
                }
           } 
         currChart=ChartNext(currChart);  i++;
        }
 
scomoroh:

Dann werde ich die Frage wiederholen.

Es gibt einen Teil des Codes, der die Anzahl der einzelnen Kauf- und Verkaufsaufträge berechnet. (b - Kaufaufträge, s - Verkaufsaufträge)

Dann habe ich eine Bedingung geschrieben, nach der die Aktion weitergegeben wird, wenn ein neuer Auftrag eröffnet oder ein bestehender Auftrag geschlossen wird. D.h. wir müssen die Anzahl der früher eröffneten Aufträge und die Anzahl der nachfolgenden Änderungen vergleichen, aber ich weiß nicht, wie ich das in den Code schreiben soll. Wie speichere ich Änderungen in der Anzahl der Bestellungen? Bitte um Hilfe.


Ich würde versuchen, dies zu tun

//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
int izmb,izms;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(200);

   izmb=0; izms=0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(CountOrders(0,0)!=izmb){izmb=CountOrders(0,0);}
   if(CountOrders(0,1)!=izms){izms=CountOrders(0,1);}
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
//|  0 - ордера типа BUY          1 - ордера типа SELL               |
//|  2 - ордера типа BUYLIMIT     3 - ордера типа SELLLIMIT          |
//|  4 - ордера типа BUYSTOP      5 - ордера типа SELLSTOP           |
//|  6 - ордера типа Balance     -1 - Все типы ордеров               |
//+------------------------------------------------------------------+
int CountOrders(string symb="", int or_ty=-1) 
  {
   int cnt=0;
   if(symb=="0") symb=_Symbol;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS)==true)
        {
         if(OrderSymbol()==symb || symb=="")
           {
            if(or_ty<0 || or_ty==OrderType()) cnt++;
           }
        }
     }
   return(cnt);
  }
//+------------------------------------------------------------------+
 
Wer weiß, warum der Advisor im Testgerät gut funktioniert, Anfragen stellt, usw., aber im echten Konto werden die Anfragen nicht angezeigt, obwohl der Roboter aktiv ist
Grund der Beschwerde: