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

 
Maxim Kuznetsov:

Ich möchte noch hinzufügen, dass es NICHT GARANTIERT ist, dass das Terminal eine ausreichende Historie hat und diese auch liefern wird.

im obigen Beispiel gibt es keinen Hinweis auf die Geschichte

damit gewährleistet ist, dass das Ergebnis von OrderSelect() wahr ist

UPD: OrderSelect in 4 funktioniert sehr gut, habe es einmal getestet - für Market Orders ist der Zeitpunkt des Zugriffs auf die Ordereigenschaften.... es sind wirklich Millionen von Malen pro Sekunde, ich will es nicht nachschlagen, ich glaube, ich habe mich mit Moderator Artem gestritten, aber wie man so schön sagt, "alle Zehenspitzen sind unterschiedlich", ich mag es - behalte es

 

Hallo, es besteht Bedarf an Daten über die Inanspruchnahme der einzelnen Transaktionen.

Kann jemand ein Skript kennen, das solche Statistiken sammelt und in Form eines Berichts ausgibt?

Dankeschön

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

Hallo, es besteht Bedarf an Daten über die Inanspruchnahme der einzelnen Transaktionen.

Kann jemand ein Skript kennen, das solche Statistiken sammelt und in Form eines Berichts ausgibt?

danke

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

es ist "handgeschrieben", ungetestet und voller Bugs :-) passen Sie es einfach an Ihre Bedürfnisse an und benutzen Sie es

 
Maxim Kuznetsov:

for(int i=OrdersTotal()-1;i>=0;i--) {

   if (!OrderSelect(i,SELECT_BY_POSITON,MODE_TRADES)) continue;

   double prosad=DBL_MIN;

   if (OrderType()!=OP_BUY && OrderType!=OP_SELL) continue;

   for(int j=iBarShift(OrderSymbol(),OrderOpenTime(),PERIOD_M1); j>=0;j--) {

      double delta=( OrderType()==OP_BUY? OrderOpenPrice()-iLow(OrderSymbol(),PERIOD_M1,j) : iHigh(OrderSymbol(),PERIOD_M1,j)-OrderOpenPrice() );

      delta /= MarketInfo(OrderSymbol(),MODE_POINT);

      if (delta>prosad) prosad=delta;

   }

  PrintFormat("Максимальная просадка по ордеру %d = %d пунктов , %f денег",OrderTicket(),(int)(prosad),prosad*OrderLots()*MarketInfo(OrderSymbol(),MODE_TICKVALUE);

}

von Hand" geschrieben, nicht geprüft, voller Fehler :-) an Ihre Bedürfnisse anpassen und verwenden

Danke, ich werde versuchen, es herauszufinden!

 
@Igor Makanu, vielen Dank für Ihre Antworten zur Sortierung der Aufträge im Terminal. Ich werde sie wahrscheinlich als eine Reihe von Strukturen speichern und sie selbst sortieren. Meine Zweifel rührten vor allem daher, dass ich befürchtete, solche bei jedem Tick durchgeführten Aktionen würden sich spürbar negativ auf die Leistung auswirken.
 
Janis Ozols:
@Igor Makanu, vielen Dank für Ihre Antworten zur Sortierung der Aufträge im Terminal. Ich werde sie wahrscheinlich als eine Reihe von Strukturen speichern und sie selbst sortieren. Ich hatte vor allem deshalb Bedenken, weil ich befürchtete, dass solche bei jedem Tick durchgeführten Aktionen die Leistung spürbar beeinträchtigen würden.

Warum also nach jedem Häkchen sortieren? Das reicht nur, wenn sich die Anzahl der Einträge ändert oder die Liste sich komplett ändert...

 
Guten Tag Bitte helfen Sie mir zu verstehen, warum der heruntergeladene Indikator aus dem Navigator nicht in das Diagramm gezogen wird. Sie ist im Katalog enthalten.
Dateien:
image002.jpg  38 kb
 
Nachmittags. Wenn der Indikator nicht automatisch vom Marktplatz in dasHandelsterminal geladen wird, wo liegt dann das Problem?
 
Igor Makanu:

im obigen Beispiel gibt es keinen Hinweis auf die Geschichte

damit gewährleistet ist, dass das Ergebnis von OrderSelect() wahr ist

UPD: OrderSelect in 4 funktioniert sehr gut, ich habe es einmal getestet - für Market Orders ist der Zeitpunkt des Zugriffs auf die Ordereigenschaften.... es sind wirklich Millionen von Malen pro Sekunde, ich will es nicht nachschlagen, ich glaube, ich habe mich mit Moderator Artem gestritten, aber wie man so schön sagt, "alle Zehenspitzen sind unterschiedlich", ich mag es - behalte es

Moderator Artem streitet nicht. Moderator Artem debattiert :)
 
void OnTick()
  {
    if(isCrossing() == 1)          
      
    ... 

    if(isCrossing() == 2)
      
    ... 
  }

int isCrossing(){  
  double ma = iMA(NULL, g_timeFrame, g_maPeriod, g_maShift, g_maMethod, g_maApplietPrice, 0);
  double low = iLow(Symbol(), g_timeFrame, 0);
  double high = iHigh(Symbol(), g_timeFrame, 0);

  if(g_barTime < iTime(NULL,g_timeFrame,0) && high > ma && Bid <= ma){
    g_barTime = iTime(NULL,g_timeFrame,0);
    return 1;
  } 
  
  if(g_barTime < iTime(NULL,g_timeFrame,0) && low < ma && Bid >= ma){
    g_barTime = iTime(NULL,g_timeFrame,0);
    return 2;
  }
   
  return 0;
}
Warum gibt isCrossing() nicht 2 zurück? Die Funktion isCrossing() selbst hat einen zweiten if-Eintrag, aber dann gibt es keinen if-Eintrag in OnTick(), wenn isCrossing() == 2 ist. Was ist das für ein Unsinn...
Grund der Beschwerde: