Fehler, Irrtümer, Fragen - Seite 284

 
alexvd:

Wie werden die Stops und TPs gesetzt?

Eröffnen Sie zuerst eine Position und ändern sie erst dann, oder legen Sie sofort den richtigen SL und TP fest?

Sie eröffnen zuerst eine Position und ändern sie dann...
 
Voodoo_King:

Build 384. Es scheint, dass ich einen weiteren Fehler gefunden habe... Bei der Anzeige der Historie werden Aufträge - die eingestellten Stop-Loss- und Take-Profit-Niveaus nicht angezeigt...


Sie werden "angezeigt", wenn ein Auftrag eingestellt wird. Sie werden nicht angezeigt, wenn eine Position vom Server mit Hilfe eines Stops geschlossen wird, was natürlich ist, da der Server beim Schließen einer Position keine Stops setzt.
















































































































 

Ich habe etwas Ähnliches entdeckt. Ich weiß nicht, ob es ein Fehler ist oder nicht, aber es sieht so aus. Der folgende Code:

lot=NormalizeDouble(My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_BUY,latest_price.ask)/10,2);
printf(lot);

Ausgaben im Prüfprotokoll (gegen eine Kaution von 1000 $):

2011.01.28 20:06:48    Core 1    2010.01.04 00:56:00   0.07000000000000001

Sollte die Funktion (NormalizeDouble) nicht alle Nicht-Null-Stellen nach 7 entfernen?

Ich dachte, ich hätte eine Lösung in der Form gefunden: lot=floor((My_AccountInfo.MaxLotCheck(_Symbol,ORDER_TYPE_SELL,latest_price.ask)/10)*100)/100,

aber auch ich habe ähnliche Ergebnisse erzielt. Was ist zu tun - wie kritisch ist es bei Handelsanfragen?

 

Guten Tag!

Ich habe die Funktion Comment in den Schleifenkörper eingefügt, um den prozentualen Ausführungsstatus der Schleife und einige andere Werte anzeigen zu können. Der einfache Algorithmus benötigte 5 Minuten (wenn nicht mehr) für die Ausführung im Schleifenkörper, aber er berechnete nur 32000 Balkenwerte (Close, High, Low, Open) neu. Ich habe mich beschwert, dass sich das Array dynamisch vergrößert, während die Schleife läuft, aber das ist nicht wahr. Nach der Fehlerbehebung des Algorithmus wurde der Kommentar entfernt - die Berechnung wird nun in einem Götterglauben durchgeführt.

Verlangsamt die Kommentarfunktion wirklich die Ausführung von Programmen? Ich bin ehrlich gesagt überrascht.

System: Windows XP, Terminal 5.00.384.

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 
KffAlex:

Guten Tag!

Ich fügte die Funktion Comment in den Schleifenkörper ein, um den Prozentsatz des Ausführungsstatus der Schleife und einige andere Werte anzuzeigen. Der einfache Algorithmus benötigte 5 Minuten (wenn nicht mehr) für die Ausführung im Schleifenkörper, aber er berechnete nur 32000 Balkenwerte (Close, High, Low, Open) neu. Ich habe mich beschwert, dass sich das Array dynamisch vergrößert, während die Schleife läuft, aber das ist nicht wahr. Nach der Fehlerbehebung des Algorithmus wurde der Kommentar entfernt - die Berechnung wird nun in einem Götterglauben durchgeführt.

Verlangsamt die Kommentarfunktion wirklich die Ausführung von Programmen? Ich bin ehrlich gesagt überrascht.

System: Windows XP, Terminal 5.00.384.

Ich habe den gleichen Effekt festgestellt.
 

Wenn Sie den Expert Advisor nur mit den Eröffnungskursen ausführen , werden die Verkaufspositionen nicht zu den Eröffnungskursen, sondern zum Höchstkurs eröffnet und zum Tiefstkurs geschlossen.

Warum ist das so?

Der Expert Advisor sucht nach Signalen zum Öffnen und Schließen von Positionen und verwendet dabei nur Open[0]-Preise. EventSetTimer(1) wird verwendet;

 
Valmars:

Sie werden ausgegeben, wenn ein Auftrag erteilt wird. Nicht verfügbar, wenn eine Position vom Server mit Hilfe eines Stops geschlossen wird, was normal ist, da der Server beim Schließen einer Position keine Stops setzt.

Was ist los?) ? wo werden sie bei der Bestellung angezeigt?

Ich meine den Bericht "Historie", und ich sehe nichts in den Spalten Stop Loss und Take Profit, obwohl die Positionen diese Werte haben.

Wie kann ich wissen, ob ein Stop-Loss gesetzt wurde oder nicht? Ich meine, wenn er ausgelöst wurde, kann ich ihn sehen, aber nicht?

 

Ich habe die folgende Frage.

Die Aufgabe besteht darin, während der Testphase Equity-Werte in eine bestimmte Datei zu schreiben und die vorherigen Werte zu löschen.

Aber hier geschieht Folgendes:

1. WennFileDelete() in OnInit() nicht vorhanden ist, wird es zusätzlich zu den vorhandenen geschrieben.

2. Wenn jedoch FileDelete() in OnInit() vorhanden ist, ist die resultierende Datei trotz der gleichen Equity-Datensätze in OnCalculatde() leer.

Warum passiert das und wie kann man es vermeiden?

Nachstehend finden Sie den Code:

#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
double   Values[];
string   Array[];
string   filename="equity FileWrite25.txt";
int      handle;
int      NumberCopyElements;
string   common_folder;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit(){
   SetIndexBuffer(0,Values,INDICATOR_DATA);
   PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, 100);
   PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, EMPTY_VALUE);
   ArraySetAsSeries(Values, false);
   //---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
   FileDelete(filename,FILE_COMMON);
   return(0);
}
int OnCalculate(const int        rates_total,
                const int        prev_calculated,
                const datetime&  time[],
                const double&    open[],
                const double&    high[],
                const double&    low[],
                const double&    close[],
                const long&      tick_volume[],
                const long&      volume[],
                const int&       spread[])
{  
   uint written;
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON|FILE_TXT);
   if(handle!=INVALID_HANDLE){
      FileSeek(handle,0,SEEK_END);
      written=FileWrite(handle,TimeToString(TimeCurrent())," ",AccountInfoDouble(ACCOUNT_EQUITY));//TimeToString(time[i]),
      PrintFormat("Equity FileWrite25 - OnCalculate(): Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
   }
   else {
      Print("Equity FileWrite25 - OnCalculate(): Не удалось открыть файл ",filename,".  Ошибка ",GetLastError());     
   }
   FileClose(handle);
   return rates_total;
}
void OnDeinit(const int reason){
   FileClose(handle);
}
 
Voodoo_King:

was ist los :) ? wo werden sie angezeigt, wenn eine Bestellung aufgegeben wird?

Ich meine den Bericht "Historie", und ich sehe nichts in den Spalten Stop Loss und Take Profit, obwohl die Positionen diese Werte haben.

Woher weiß ich, ob ein Stop-Loss gesetzt wurde oder nicht? Wenn es funktioniert hat, kann ich es sehen, aber wenn nicht?

Sie wird in der Registerkarte "Historie/Auftrag" angezeigt, und wie hoch sind Ihrer Meinung nach der Stop-Loss und der Take-Profit in dem Auftrag, die der Server verwendet, um die Position zu schließen, wenn der Stop ausgelöst wird? Sie sehen sich die genauen Parameter der Aufträge an.
 
DV2010:

Ich habe die folgende Frage.

Die Aufgabe besteht darin, während der Testphase Equity-Werte in eine bestimmte Datei zu schreiben und die vorherigen Werte zu löschen.

Aber hier geschieht Folgendes:

1. Wenn FileDelete() in OnInit() nicht vorhanden ist, wird es zusätzlich zu den vorhandenen geschrieben.

2. Wenn jedoch FileDelete() in OnInit() vorhanden ist, ist die resultierende Datei trotz der gleichen Equity-Datensätze in OnCalculatde() leer.

Warum passiert das und wie kann man es vermeiden?

Der Code ist unten angegeben:

Ich habe eine Lösung erfunden, um den Testmodus zu erkennen, aber es steckt etwas Empirie darin, was mir peinlich ist

(Ich habe versucht, eine Möglichkeit zu finden, die Startzeit des Testers programmatisch zu ermitteln, davon ausgehend einen Einzug in die Tiefen der Geschichte zu setzen und damit die reale Zeit abzuschneiden,

aber leider habe ich sie nicht gefunden):

   if(rates_total - prev_calculated > 1 && rates_total - prev_calculated < 10000){
    FileDelete(filename,FILE_COMMON);
   }   
Aber es gibt ein Problem ganz anderer Art, nämlich dass nach dem Wechsel des Testzeitraums die Indikatoren gemäß den Testergebnissen aus irgendeinem Grund verschwinden, aber wenn man danach eine Zusammenstellung für einen neuen Zeitraum vornimmt, dann werden sie beim Ausführen des Testers angezeigt.

Wanze?