Wünsche für MT5 - Seite 14

 
stringo:
Das Problem wurde gelöst und behoben. Ich danke Ihnen.

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1,time2,rates);
      err++;
     }

Danke für die Korrektur, fast gut, warum fast...

In der Hilfe heißt es

start_time [in] Die Taktzeit, die dem ersten Element entspricht.

Und das erste Element ist 0.

Aber das letzte Element ist in Ordnung.

Wenn das so gewollt ist, bitte ich Sie, den Fehler zu beheben.

 
vdv2001:

Danke für die Korrektur, fast gut, warum fast...

In der Hilfe heißt es

start_time [in] Die Taktzeit, die dem ersten Element entspricht.

Und das erste Element ist 0.

Aber das letzte Element ist in Ordnung.

Wenn das so sein soll, bitte ich Sie, das Problem zu beheben.

Die Situation ist die, dass start_time und stop_time in der date-to-date Variante beliebig sein können - in jedem Fall bilden sie einen Bereich. Wir sollten versuchen, dies in der Dokumentation deutlicher zu machen
 
stringo:
Die Situation ist, dass start_time und stop_time im date-to-date Fall beliebig sein können - in jedem Fall bilden sie einen Bereich. Versuchen wir, dies in der Dokumentation genauer abzubilden

Wollen Sie damit sagen, dass die Copy*-Funktionen im Fall von Datum zu Datum alle Elemente außer dem Anfangselement zurückgeben? Ich muss den Ausdruck also wie folgt schreiben:

   do
     {
      rates_total=CopyRates(Symbol(),PERIOD_M1,time1-PeriodSeconds(PERIOD_M1),time2,rates);
      err++;
     }

Diese Frage ist für mich sehr wichtig.

 

Bitte beachten Sie, dass beim Wechsel zu einem neuen Tag genau das passiert:

Nach der Aktualisierung ist alles wieder in Ordnung.

Beobachten Sie die Bildung des Übergangs zu einem neuen Tag, ich oft bemerken, diese Verschiebung, und die interessanteste Sache im Moment der Bildung der ersten Bar des nächsten Tages Update Chart nicht bringen Ergebnisse. (Ich kann mich irren, aber ich glaube, mein vorheriger Beitrag hat auch etwas damit zu tun).

 

Bild 252.

Hauptmenü: <Grafik> -<Grafik INSTRUMENTE> Zeitrahmen werden angezeigt.

 
uncleVic:

Leider hat es die neueste Version von CAccountInfo nicht in den Build geschafft.

In der angehängten Datei finden Sie die Methode FreeMarginCheck (bisher nur für SYMBOL_CALC_MODE_FOREX).

Wenn Sie Kommentare und (oder) Ideen haben, schreiben Sie uns bitte.

Ich habe festgestellt, dass die Methode FreeMarginCheck verbessert werden muss.

1. Betrachten wir den Fall SYMBOL_CALC_MODE_FOREX:

work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(work,SYMBOL_BID);
Marge=Gebot*Volumen*Vertragsgröße/Leverage;
margin=free_margin;
Pause;

Wenn die Werte der beiden Summanden SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN) und Currency() gleich sind, dann erhält die Variable bid den Wert 0 und die Variable margin den Wert free_margin.

Um das Problem zu beheben, habe ich Folgendes getan:

Fall SYMBOL_CALC_MODE_FOREX:

bid=1.0;

if (SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)!=Currency())

{

work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(work,SYMBOL_BID);
}

Marge=Gebot*Volumen*Vertragsgröße/Leverage;
margin=free_margin;
Pause;

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 

Darf ich fragen, wann die Copy*()-Funktionen normal funktionieren werden?

In jedem neuen Gebäude funktionieren sie nicht mehr, benutzt sie niemand mehr?

 
vdv2001:

Danke für die Korrektur, fast gut, warum fast...

In der Hilfe heißt es

start_time [in] Die Taktzeit, die dem ersten Element entspricht.

Und das erste Element ist 0.

Aber das letzte Element ist in Ordnung.

Wenn Sie dies beabsichtigt haben, korrigieren Sie bitte die Hilfe.

Aus Ihrem Beispiel geht nicht hervor, wie der Wert time1 erfasst wird. Der Versuch, die Situation zu reproduzieren, blieb erfolglos.

Dateien:
 
Yedelkin:

Es wurde festgestellt, dass die Methode FreeMarginCheck verfeinert werden muss.

Ich danke Ihnen für Ihren Kommentar. Korrigiert.
 
Yedelkin:

Es wurde festgestellt, dass die Methode FreeMarginCheck verfeinert werden muss.

2. Ein weiteres Problem stellt sich wie folgt dar. Betrachten wir noch einmal den Fall SYMBOL_CALC_MODE_FOREX:
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();
bid=SymbolInfoDouble(work,SYMBOL_BID);

Wenn dieSymbolvariable eine nicht direkt notierte Währung (z. B. CADJPY) als Basiswährung hat, wird SymbolInfoDouble(work,SYMBOL_BID) 0 ausgeben.

2.1 Außerdem ist nicht klar, warum bei der Berechnung der zweiten Variablen (Gebot) der BID-Preis verwendet wird. Schließlich muss sichergestellt werden, dass die Währung, in der die Gebote berechnet werden, auf Kosten der Depotwährung erworben wird, d.h. "Kauf der Margin-Währung, Verkauf der Depotwährung". Und wenn in einem bestimmten Währungspaar die Einzahlungswährung an zweiter Stelle steht, dann müssen wir den ASK-Kurs verwenden, um die angegebene Operation durchzuführen.

Um die Situation zu bereinigen, habe ich Folgendes getan:

Doppelkurs;
//---
switch(SymbolInfoInteger(Symbol,SYMBOL_TRADE_CALC_MODE))
{
Fall SYMBOL_CALC_MODE_FOREX:
Kurs=1,0;

//---Prüfung, ob die Einzahlungswährung die Basiswährung des aktuellen Währungspaares ist
//Paar. Wenn ja, dann bleibt der Wert der Kursvariablen 1,0
if(SymbolInfoString(Symbol,SYMBOL_CURRENCY_MARGIN)!=Currency())
{
work=SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN)+Currency();

//---Prüfen Sie, ob es ein Währungspaar gibt, dessen Basiswährung dieselbe ist wie die
//die Basiswährung des aktuellen Paares, und die Kurswährung ist dieselbe wie die Einzahlungswährung
//(d.h. wenn die Einzahlung in USD erfolgt, fragen Sie nach einem direkten Angebot)
if(SymbolInfoDouble(work,SYMBOL_ASK)!=0)
course=SymbolInfoDouble(work,SYMBOL_ASK);

//--- Wenn die obige Bedingung nicht erfüllt ist, ändern Sie die Reihenfolge der Symbole
//Währungen in der Arbeitsvariable ist nicht erfüllt und wir erhalten ein Währungspaar mit Basiswährung
mit der Einzahlungswährung übereinstimmt, //die Kurswährung mit der Basiswährung identisch ist
//aktuelles Paar (wenn die Einzahlung in USD erfolgt, erhalten wir ein Währungspaar mit dem umgekehrten Kurs).
sonst
{
work=Währung()+SymbolInfoString(symbol,SYMBOL_CURRENCY_MARGIN);
Kurs=1/SymbolInfoDouble(Arbeit,SYMBOL_BID);
}
}
Marge=Kurs*Volumen*Vertragsgröße/Leverage;
margin=free_margin;
Pause;

Документация по MQL5: Основы языка / Типы данных / Тип string
Документация по MQL5: Основы языка / Типы данных / Тип string
  • www.mql5.com
Основы языка / Типы данных / Тип string - Документация по MQL5
Grund der Beschwerde: