Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 45

 
Alexey Viktorov:

Vielleicht reicht das ja? Auch wenn Forex dies nicht immer korrekt anzeigt.

sie zeigt einen falschen Wert an, z.B. für SBRF-9.17 ist die Endzeit der Handelssitzung am Freitag == 23:45:00 laut Minutendiagramm, und diese Funktion zeigt 00:00:00 an, laut den Informationen der Börse ist die Endzeit der Handelssitzung am Abend um 23:50

Ich glaube nicht, dass der Hauptpunkt die Möglichkeit ist, Prüfungen zu erstellen, wo wir sind und Konstanten zu verwenden, aber vielleicht hat jemand diese Funktionalität bereits implementiert und ich muss nicht meinen eigenen Zug schreiben
 
Alexey Viktorov:

Es gibt keine Abhängigkeit und es kann auch keine geben. Daher kann es keinen speziellen Code geben.

Die Entwickler verwenden den LFO in solchen Fällen nicht. Die Algorithmen sind eindeutig und wiederholbar.

 
Konstantin:

Auf dem Terminmarkt, wie man die Schlusszeit des Vortages in verschiedenen Varianten der Ermittlung des aktuellen Zeitintervalls bestimmt:

1. wir sind in der Zeit von Samstag bis Sonntag, wir brauchen den Abschluss der Handelssitzung am Freitagabend
2. wir sind von Montag bis Freitag auf dem geschlossenen Markt; wir benötigen die Schlusszeit der Abendsitzung von Montag bis Donnerstag
3. in der Handelsspanne von Montag bis Freitag; wir brauchen eine Schlusszeit für den Freitagabendhandel
4. im Zeitrahmen von Dienstag bis Freitag benötigen wir die Schlusszeit für die Abendveranstaltungen von Montag bis Donnerstag

Vielleicht hat jemand eine ähnliche Funktion geschrieben, ich möchte das Rad nicht neu erfinden ))

Ich glaube nicht, dass es viel mehr Flexibilität als Konstanten gibt:

/*!
   \brief   Расчет конечной даты запроса
*/
datetime CVolumeCluster::CalcStopDate(void) {
   MqlDateTime _date;
   datetime _time_t = TimeTradeServer(_date);

   if(_date.hour == 23 && _date.min >= 44) {          // определяем время окончания торговой сессии
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      _time_t    = StructToTime(_date);
   } else {
      TimeToStruct(_time_t - 86400, _date);
      _date.hour = 23;
      _date.min  = 44;
      _date.sec  = 59;
      if(_date.day_of_week == 0 || _date.day_of_week == 6)
         _date.day_of_week = 5;
      _time_t = StructToTime(_date);
   }
//---
   return _time_t;
}
 

beraten, die mit CCanvas Klasse arbeitet, wie man die Aktualisierung der grafischen Markierung weniger ressourcenintensiv zu machen, zum Beispiel haben wir ein paar hunderttausend Zeilen in der grafischen Markierung, bei der Größenänderung müssen wir jede Zeile in der grafischen Markierung neu zu malen, weil ohne neu zu malen einfach durch Größenänderung, Linien auf dem Diagramm nicht angezeigt werden, obwohl das Objekt der grafischen Markierung ändert seine Größe

 
Konstantin:

Es gibt wahrscheinlich nichts Flexibleres als Konstanten:

Ist das nicht einfacher?

/********************Script program start function*******************/
void OnStart()
{
 datetime timeArray[1], barArray[1];
 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);
 Print(barArray[0];
}/*******************************************************************/
 
Alexey Viktorov:

Ist das nicht einfacher?

 CopyTime(_Symbol, PERIOD_D1, 0, 1, timeArray);              // время текущего дня 00:00:00
 CopyTime(_Symbol, PERIOD_M1, timeArray[0]-1, 1, barArray);  // время открытия - 1 секунду

das Ergebnis ist grundsätzlich korrekt )) danke

 
Jetzt (1626) funktioniert es nicht

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

Merkmale der Sprache mql5, Feinheiten und Tricks

fxsaber, 2017.05.05 23:48

// Возвращает текущее количество объектов классов
int GetAmountObjects( void )
{
  const class CLASS_TMP {} Tmp;
  
  return((int)::StringFormat("%d", &Tmp) - 1);
}
Anwendungsbeispiel
int OnInit()
{
  if (GetAmountObjects() > 0)
    Print("До " + __FUNCSIG__ + " были вызваны конструкторы!");

  return(INIT_SUCCEEDED);
}
 
// Советник возвращает полностью сформированные торговые запросы (включая ручные)
#define  TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define  TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

string ToString( const MqlTradeRequest &Request )
{
  return(TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

void OnTradeTransaction(   const MqlTradeTransaction&, const MqlTradeRequest& Request, const MqlTradeResult& )
{
  if (Request.action)
    Print(ToString(Request));
}

Wenn es ein Problem mit der gleichen Füllung gibt, führen Sie diesen EA aus und erstellen Sie den gewünschten Auftrag manuell (F9 im Terminal). Der generierte Handelsauftrag wird vom EA gedruckt.

Leider ist es problematisch, dies bei echten Konten zu tun. Die Entwickler haben diesen Vorschlag zurückgewiesen.

 
fxsaber:

Wenn es ein Problem mit der gleichen Füllung gibt, führen Sie diesen EA aus und erstellen Sie den gewünschten Auftrag manuell (F9 im Terminal). Der generierte Handelsauftrag wird vom EA gedruckt.

Das Einzige, was fehlt, ist ein Beispiel dafür, wie es funktioniert

 
Rashid Umarov:

Was wir brauchen, ist ein Beispiel dafür, wie es funktioniert.

Manuell belichten


Wir erhalten die generierte Handelsanfrage im Protokoll

Request.action = TRADE_ACTION_PENDING (5)
Request.magic = 0
Request.order = 157092716
Request.symbol = EURUSD
Request.volume = 0.01
Request.price = 1.13941
Request.stoplimit = 0.0
Request.sl = 1.13926
Request.tp = 1.13955
Request.deviation = 0
Request.type = ORDER_TYPE_BUY_LIMIT (2)
Request.type_filling = ORDER_FILLING_RETURN (2)
Request.type_time = ORDER_TIME_SPECIFIED (2)
Request.expiration = 2017.07.11 12:08:00
Request.comment = 
Request.position = 0
Request.position_by = 0
Leider ist es für echte Händler sehr teuer. Aus diesem Grund habe ich einen Vorschlag gemacht.
Grund der Beschwerde: