[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 634

 
artmedia70:

Eine Sache noch...

Beim Testen habe ich alle Ablenkungen, die automatisch von der Vorlage geladen werden (die Vorlage ist nach einem EA benannt und wird beim Testen automatisch geladen), aus dem Chartfenster entfernt.

Im Tagebuch des Testers wird ständig über das erfolgreiche Laden eines benutzerdefinierten Ablasses geschrieben und gleich darauf folgt ein Eintrag über dessen Löschung. Und so geht es während der gesamten Prüfung weiter...

Ist das normal oder ist es etwas Schlimmes?

Wie kann ich es reparieren?


Vielleicht komme ich zu spät, aber ich war selbst schon einmal in einer solchen Situation. Das ist nicht gut :)

Ich habe solche Datensätze im Magazin, wenn ich einen benutzerdefinierten Indikator über iCustom() aufrufe, habe ich versehentlich vergessen, einen der Parameter zu übergeben. Der Compiler verfolgt diese Fehler nicht, auch nicht während des Tests, da der Name des Indikators korrekt ist, MT schreibt, dass alles erfolgreich geladen wurde, aber die Anzahl der Parameter wird nicht überprüft, und da die Parameter falsch angegeben sind, tritt ein Fehler im Indikator auf und er wird sofort entladen. Ich habe festgestellt, dass der Test langsam abläuft und das Protokoll das gleiche ist:

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: erfolgreich geladen

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: entfernt

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: erfolgreich geladen

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: entfernt

Ich fing an, mich damit zu befassen und fand ein solches Problem wegen meiner Unaufmerksamkeit, ich versuchte, Indikator von ihm "on the fly" zu setzen/entfernen, ich sah keine "Animation" im Log bei dieser Gelegenheit, das Problem war mit iCustom(), so überprüfen Sie es nur für den Fall :)

 

ToLik_SRGV:

das ganze Problem lag bei iCustom(), also sicherheitshalber überprüfen :)

Das ist richtig. Das liegt an der falschen Anzahl von Argumenten.
 

Geben Sie Hinweise zur Festlegung des Verfallsdatums für einen schwebenden Auftrag.

Irgendwie scheint es bei mir nicht funktionieren zu wollen, und im Handbuch gibt es nicht viele Informationen darüber.

Wenn Sie mir ein Beispiel nennen können.

Ich danke Ihnen im Voraus.

 
ToLik_SRGV:

Die Antwort kommt wahrscheinlich zu spät, aber ich bin selbst darauf gestoßen. Das ist nicht gut :)

Ich habe solche Datensätze im Journal, wenn ich einen benutzerdefinierten Indikator über iCustom() aufrufe, habe ich versehentlich vergessen, einen der Parameter zu übergeben. Der Compiler verfolgt diese Fehler nicht, auch nicht während des Tests, da der Name des Indikators korrekt ist, MT schreibt, dass alles erfolgreich geladen wurde, aber die Anzahl der Parameter wird nicht überprüft, und da die Parameter falsch angegeben sind, tritt ein Fehler im Indikator auf und er wird sofort entladen. Ich habe festgestellt, dass der Test langsam abläuft und das Protokoll das gleiche ist:

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: erfolgreich geladen

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: entfernt

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: erfolgreich geladen

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: entfernt

Ich fing an, mich damit zu befassen und fand ein solches Problem wegen meiner Unaufmerksamkeit, ich versuchte, Indikator von ihm "on the fly" zu setzen/entfernen, ich sah keine "Animation" im Log bei dieser Gelegenheit, das Problem war mit iCustom(), so überprüfen Sie es nur für den Fall :)

Nein, nicht zu spät... Genau richtig, danke.
 
kwadrad:

Geben Sie Hinweise zur Festlegung des Verfallsdatums für einen schwebenden Auftrag.

Irgendwie scheint es bei mir nicht funktionieren zu wollen, und im Handbuch gibt es nicht viele Informationen darüber.

Wenn Sie mir ein Beispiel nennen können.

Ich danke Ihnen im Voraus.

Hier. Das ist es, was ich tue...

   double   tp,PriceOpn,PriceTake;
   string   sy=Symbol();
   double pa=MarketInfo(sy, MODE_ASK);
   double pb=MarketInfo(sy, MODE_BID);
   double po=MarketInfo(sy, MODE_POINT);

   Magic=511;
   Lots_New=NormalizeLot(Lots/2, False, NULL);
         
   PriceOpn  = NormalizePrice(pa+DistORD*po, NULL);
   PriceTake = NormalizePrice(pa+(DistORD+tp)*po, NULL);
 //------------------------------------------------------------------
   SetOrder(NULL, OP_BUYSTOP, Lots_New, PriceOpn, 0, PriceTake, Magic, TimeCurrent()+12*60); // 12 часов срок его жизни...
 //------------------------------------------------------------------
//==============================================================================================

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.08.2008                                                     |
//|  Описание : Установка ордера.                                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    co - комментарий                                                        |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, string co="", datetime ex=0) {
  color    cl=IIFc(op==OP_BUYLIMIT || op==OP_BUYSTOP, clOpenBuy, clOpenSell);
  datetime ot;
  double   pa, pb, mp;
  int      err, it, ticket, msl;

  if (sy=="" || sy=="0") sy=Symbol();
  msl=MarketInfo(sy, MODE_STOPLEVEL);
  if (co=="") co=WindowExpertName()+" "+GetNameTF(Period());
  if (ex>0 && ex<TimeCurrent()) ex=0;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("SetOrder(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ot=TimeCurrent();
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, co, mn, ex, cl);
    if (ticket>0) {
      if (UseSound) PlaySound(SoundSuccess); break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66);
        if (ExistOrders(sy, op, mn, ot)) {
          if (UseSound) PlaySound(SoundSuccess); break;
        }
        Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
        continue;
      }
      if (UseSound) PlaySound(SoundError);
      mp=MarketInfo(sy, MODE_POINT);
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);
      if (pa==0 && pb==0) Message("SetOrder(): Проверьте в обзоре рынка наличие символа "+sy);
      Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa,"  Bid=",pb,"  sy=",sy,"  ll=",ll,"  op=",GetNameOP(op),
            "  pp=",pp,"  sl=",sl,"  tp=",tp,"  mn=",mn);
      // Неправильные стопы
      if (err==130) {
        // Корректировка ценовых уровней
        if (modeSetOrders==1) {
          Sleep(1000*5.3);
          switch (op) {
            case OP_BUYLIMIT:
              if (pp>pa-msl*mp) pp=pa-msl*mp;
              if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
              if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
              break;
            case OP_BUYSTOP:
              if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
              if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
              if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
              break;
            case OP_SELLLIMIT:
              if (pp<pb+msl*mp) pp=pb+msl*mp;
              if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
              if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
              break;
            case OP_SELLSTOP:
              if (pp>pb-msl*mp) pp=pb-msl*mp;
              if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
              if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
              break;
          }
          Print("SetOrder(): Скорректированы ценовые уровни");
          continue;
        }
        // Вход по текущим ценам
        if (modeSetOrders==2) {
          Print("SetOrder(): Вход по текущим ценам");
          if (op==OP_BUYLIMIT || op==OP_BUYSTOP) OpenPosition(sy, OP_BUY, ll, sl, tp, mn, co);
          if (op==OP_SELLLIMIT || op==OP_SELLSTOP) OpenPosition(sy, OP_SELL, ll, sl, tp, mn, co);
          break;
        }
      }
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      // Слишком частые запросы (8) или слишком много запросов (141)
      if (err==8 || err==141) Sleep(1000*100);
      if (err==139 || err==140 || err==148) break;
      // Ожидание освобождения подсистемы торговли
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      // Обнуление даты истечения
      if (err==147) {
        ex=0; continue;
      }
      if (err!=135 && err!=138) Sleep(1000*7.7);
    }
  }
}
 
artmedia70:

Hier. Das ist es, was ich tue...




О. Ich danke Ihnen.

Sie müssen verstehen, dass dies der Zeitrahmen in Minuten ab der Eröffnung ist?

 
kwadrad:


О. Ich danke Ihnen.

Ich sollte verstehen, dass dies der Zeitrahmen in Minuten ab der Eröffnung ist?

Ja, in dem Beispiel mit der 12-stündigen Lebensspanne... 12*60 Minuten
 

Ich weiß, es mag OffTop erscheinen, aber für mich, als Neuling im Schreiben von Experten (und im Programmieren im Allgemeinen, wenn man von meiner Erfahrung mit Assembler-Programmierung für Spectrum vor zwanzig Jahren absieht), ist meine Frage, aber eher.... Komm schon, es ist doch nur eine Frage, die genau richtig wäre:

Beim Testen des EA mit einer zweijährigen Historie sind mir Monate aufgefallen, in denen es einen sehr starken Drawdown gibt. Dies ist eine Frage an die alten Hasen: Welche Methoden zum Umgang mit Drawdowns gibt es, was ist Ihrer Meinung nach am effektivsten?

Aus meiner eigenen Sicht gibt es bisher zwei Methoden:

1. Frieren Sie den Handel ein, wenn der Equity Drawdown eine bestimmte Prozentzahl überschreitet, und
1.1 für jede Position. Setzen Sie nach dem Break-even-Punkt einen Trailing-Stop und fixieren Sie ihn in einem geringen Abstand zu Ask/Bid, um einen kleinen Gewinn zu sichern, und ziehen Sie dann die Stops nach dem Kurs, wobei Sie die Positionen teilweise schließen (um Mittel freizusetzen), wenn eine bestimmte Anzahl von Punkten zulegt.
1.2 Nachdem das Eigenkapital um einen bestimmten Prozentsatz gestiegen ist, beginnen Sie langsam mit dem Handel...

2. Im Gegenteil, nachdem wir den Haupthandel deaktiviert haben, müssen wir das halbe Lot verwenden, aber mit einer großen Anzahl von Aufträgen, die strikt dem Trend folgen, mit einem kleinen Trailing-Stop nach dem Break-Even-Punkt.

Ich denke, der erste Weg verhindert einen weiteren starken Rückgang des Eigenkapitals, aber man muss lange warten, bis der Markt sich den Aufträgen nähert
. Der zweite Weg frisst die Marge auf, aber im Falle von kurzfristigen Positionen kann man schnell etwas zum Geld hinzufügen...

Bislang sehe ich nur zwei solche entgegengesetzten Wege.

Was raten Sie, meine Genossen? Alle, auch die auf den ersten Blick "unsinnigsten" Gedanken und Vorschläge sind willkommen...

Vielen Dank im Voraus :)

 
Erlaubt der Tester nicht, dass Sie mehr als nur den täglichen Test durchführen?
 
artmedia70:
Erlaubt Ihnen der Tester nicht, an mehr als einem Tag zu testen?


Ы

Bereiten Sie einen EA für die Interbank vor?