Liga der Handelssysteme. Machen Sie weiter mit Ihrer guten Arbeit. - Seite 39

 
Georgiy Merts:

Die derzeitige Situation ...

Der Neuling des Ratings - TS 543122 - flippt bei Limit-Orders auf die Pfund-Frank-Zickzack-Spitzen und rückt auf den ersten Platz. Das System wurde Mitte November in Betrieb genommen, konnte aber die Bewertung nicht erreichen. Aber in der letzten Woche wurden mehrere erfolgreiche Trades getätigt, und das System hat die Qualität des Handels dramatisch verbessert und den letzten Gewinner überholt.


Wenn Sie nicht die Bewertung eingegeben haben, können Sie ein bisschen mehr als vor einer Woche, aber das System hat sich dramatisch in der letzten Woche des Handels verbessert.

Ich hatte überhaupt nicht viele TS-Kanäle. Ich habe kein Geld mit ihnen verdient...

 
Roman Shiredchenko:

Ich meine "intuitiv" lästig, wie Sie schreiben, aber nicht intuitiv noch lästiger...

e und um ehrlich zu sein, ist es auch beängstigend, ernsthaftes Geld auf solch elementare Dinge zu setzen... Heute funktioniert es nach der Optimierung - morgen vielleicht nicht, und es kann sich sogar auf den echten auswirken...

Im Prinzip mochte ich die Nummer 1 - den Kanal eins auf Grenzen, Grafiken - erinnerte mich an die Meisterschaft... :-)

Das Volumen ist das GESAMTvolumen der Geschäfte des GANZEN PULS des ausgewählten TS.

Nun, es ist klar, dass "intuitiv" - Sie sehen es an und denken, es sollte platziert werden. Ich zog es an, und es begann zu sinken. Und meine "Intuition" war wertlos. Intuition ist eine Menge Erfahrung. Ich habe es nicht. Das bedeutet, dass die Auswahl nur mit klaren Regeln möglich ist.

Über "ernsthaftes Geld auf elementares Zeug setzen"... nun, wie ich schon mehrmals gesagt habe - vor einigen Jahren schrieb ich einen sehr komplexen und nicht elementaren Expert Advisor, auf dessen TS der Autor mehr als ein Jahr verbrachte, und dann - ich programmierte es für fast weitere sechs Monate. Und ?... Zunächst begann der Expert Advisor zu verdienen, und nur in ein paar Monaten begann er zu sinken, und ich verlor alles, was ich verdient hatte.

Urteilen Sie nun selbst - jedes "elementare" Produkt kann auf die gleiche Weise funktionieren - ein oder zwei Monate lang wird es gute Gewinne bringen, und dann beginnt es zu versagen. Wozu braucht man dann noch nicht elementare Dinge? Nach dieser Episode bin ich zu dem Schluss gekommen, dass wir eine "Fußball-Liga" gründen und die "Spieler" auswählen müssen, anstatt selbständig mit dem Ball über das Feld zu laufen. Nun - ich habe ständig VIELE Systeme, die gut funktionieren. Und meine Hauptfrage ist jetzt nicht, "was man tun muss, damit die TS funktionieren", sondern "wie man aus den TS, die funktionieren, diejenigen auswählt, die noch einige Zeit funktionieren werden".

Was das Volumen betrifft - ich habe sechs TS, die jetzt an einer "Kontrolle" von 1.000 Cents arbeiten. Und manche eröffnen sogar mit 0,02 Volumen. Ich glaube also nicht, dass es hier irgendwelche Probleme geben kann.

 
Roman Shiredchenko:

Werfen Sie ein Stück Code oder einen Indikator, auf dem diese Spitzen mit dem Verbindungscode seiner Messwerte betrachtet werden, wäre es sehr interessant, es in Trades zu betrachten.

Ich hatte nicht viel von einem Kanal TS überhaupt. Ich habe kein Geld mit ihnen verdient...

Ich fürchte, dass mein Code für Sie (lassen Sie uns "Sie" sein) schwer zu verstehen sein wird. Mein Code besteht aus einer ganzen Bibliothek mit mehreren tausend Dateien.

Hier ist die Funktion OnRefresh() der Hauptvorlage, von der alle 672 TCs geerbt werden, für eine Entscheidung zuständig:

EEAWorkRetcode CBinder_EPFT::OnRefresh(datetime dtCurMoment)
{
   m_asTradeOperationInfo.Clear();

   EEAWorkRetcode wrRes =  CEAPartsFactoryT::OnRefresh(dtCurMoment);
   
   if(wrRes != WR_SUCCEEDED)
      {
      _AddTOInfo("Ошибка CEAPartsFactoryT::OnRefresh() ! Код: ",(int)wrRes);
      
      return(wrRes);
      };

   // Проверим, возможно, надо срочно выходить из позиции ? 
   if(m_bNeedExit)
      {
      _SetExit();
      _TellTradeOperationInfo();
      return(WR_SUCCEEDED);
      };

   // Установим флаги рабочего времени.
   bool bWorkTime = _IsWorkTime(dtCurMoment);
   bool bNearWeekEnd = _IsNearWeekEnd(dtCurMoment,HOURS_TO_WEEKEND_EXIT);

   // Разрешим трейлинг в рабочее время   
   _SetTrailingPermition(bWorkTime);
   
   // Проведем входы, если сейчас рабочее время и не конец недели.
   if((bWorkTime == true) && (bNearWeekEnd == false))
      {
      // Проверим возможность входа, и войдем, если надо.
      
      m_dCurTruePrice = _GetTruePrice();
      m_tdSignal = TD_FLAT;
      datetime dtCurBarTime = CTimeSeriesT::GetStartMomentOfBar(dtCurMoment,m_didData.m_etWorkTimeFrame);
      
      if(m_dtGetSignalMoment < dtCurBarTime)
         {
         m_tdSignal = _GetSignal();
         m_dtGetSignalMoment = dtCurBarTime;
         };
      
      _SetEnter(_IsTrendSystem(),dtCurMoment);

      _TellTradeOperationInfo();
      return(WR_SUCCEEDED);
      }; // if(bWorkTime == true && bNearWeekEnd == false)

   // В этой точке - либо рабочее время закончено, либо уже конец недели
   
   // Получим число компонент позиции
   uint uiNumOfTPC = GetCurrentPosition().GetTotalComponents();
   
   // Закончим обработку, если компонент нет
   if(uiNumOfTPC == NULL)
      {
      _TellTradeOperationInfo();
      return(WR_SUCCEEDED);
      };
   
   // В этой точке - либо рабочее время закончено, либо конец недели, и есть компоненты позиции      
   
   // Проверим, может конец недели и надо выходить ? 
   if((bNearWeekEnd == true) && (m_bMustExitOnWeekEnd == true))
      {
      TRACE("Есть компоненты позиции, сейчас конец недели, и требуется выходить");
      _SetExit();
      _TellTradeOperationInfo();
      return(WR_SUCCEEDED);
      };
       
   // Проверим, может быть конец рабочего времени, и надо выходить ? 
   if((bWorkTime == false) && (m_bMustExitOnWorkEnd == true))
      {
      TRACE("Есть компоненты позиции, сейчас конец рабочего времени, и требуется выходить");
      _SetExit();
      _TellTradeOperationInfo();
      return(WR_SUCCEEDED);
      };

   _TellTradeOperationInfo();
   return(WR_SUCCEEDED);
};

Die Funktion _GetSignal() in den Nachkommen entscheidet über die Eingabe.

Hier, sagen wir mal, ist diese Funktion für alle Kanal-TS (je nach System werden dort Funktionen für Trend oder Flat aufgerufen ):

ETrendDirection CPriceChannel_Binder_EPFT::_GetSignal()
{
   ETrendDirection tdSignal = TD_FLAT;

   if(_IsTrendSystem())
      tdSignal = _GetTrendSignal();
   else      
      tdSignal = _GetFlatSignal();      
   
   _AddTOInfo("Сигнал: ",(int)tdSignal);
   
   return(tdSignal);
};

ETrendDirection CPriceChannel_Binder_EPFT::_GetTrendSignal()
{
   #ifdef  ASSERTION_CODE_ON
      
      datetime dtCurTime = m_tcContainer.Time(1);

   #endif //  ASSERTION_CODE_ON
   
   // Получим границы канала
   double dCurHi = m_tcContainer.High(1);
   double dPrevHiBound = m_ppcPriceChannel.GetValue(2,CPriceChannel::HI_BOUND_BUFF);
   double dCurLo = m_tcContainer.Low(1);
   double dPrevLoBound = m_ppcPriceChannel.GetValue(2,CPriceChannel::LO_BOUND_BUFF);

   _AddTOInfo("Time(1): ",m_tcContainer.Time(1));
   _AddTOInfo("High(1): ",dCurHi);
   _AddTOInfo("Lo(1): ",dCurLo);
   _AddTOInfo("HiBound(2): ",dPrevHiBound);
   _AddTOInfo("LoBound(2): ",dPrevLoBound);
   
   // Проверим, возможно, пробоя канала нет ? 
   if(dCurHi <= dPrevHiBound  &&  dCurLo >= dPrevLoBound)
      {
      _AddTOInfo("Сигнала нет.");
      return(TD_FLAT);
      };

      
   // Проверим, возможно, пробой с обоих сторон ? 
   if(dCurHi > dPrevHiBound  &&  dCurLo < dPrevLoBound)
      {
      TRACE_INTEGER("Пробой канала с обоих сторон ! Сигнала нет. Магик: ",GetMagic());
      return(TD_FLAT);
      };
   
   // Пробой в одну сторону. 
   if(dCurHi > dPrevHiBound)
      {
      // Пробой вверх.
      _AddTOInfo("Пробой вверх. Сигнал в лонг !");
      return(TD_UP);
      };
   
   // Пробой вниз.   
   _AddTOInfo("Пробой вниз. Сигнал в шорт !");
   return(TD_DOWN);
};

ETrendDirection CPriceChannel_Binder_EPFT::_GetFlatSignal()
{
   datetime dtCurTime = m_tcContainer.Time(1);
   
   // Отбой вниз - это момент, когда High(1) < High(2) && High(2) + PricePoint >= HiBound
   // Отбой вверх - это момент, когда Low(1) > Low(2) && Low(2) - PricePoint <= LoBound
    
   // Получим границы канала на втором баре (у нас должен произойти отбой
   double dCurHi = m_tcContainer.High(1);
   double dPrevHi = m_tcContainer.High(2);
   double dPrevHiBound = m_ppcPriceChannel.GetValue(2,CPriceChannel::HI_BOUND_BUFF);
   double dCurLo = m_tcContainer.Low(1);
   double dPrevLo = m_tcContainer.Low(2);
   double dPrevLoBound = m_ppcPriceChannel.GetValue(2,CPriceChannel::LO_BOUND_BUFF);

   _AddTOInfo("Time(1): ",m_tcContainer.Time(1));
   _AddTOInfo("High(1): ",dCurHi);
   _AddTOInfo("High(2): ",dPrevHi);
   _AddTOInfo("Lo(1): ",dCurLo);
   _AddTOInfo("Lo(2): ",dPrevLo);
   _AddTOInfo("HiBound(2): ",dPrevHiBound);
   _AddTOInfo("LoBound(2): ",dPrevLoBound);
   
   bool bHiBreakback = false;   
   bool bLoBreakback = false;   
   
   if(dCurHi < dPrevHi && dPrevHi + m_psiWorkSymbol.GetPointPrice() >= dPrevHiBound)
      bHiBreakback = true;
     
   if(dCurLo > dPrevLo && dPrevLo - m_psiWorkSymbol.GetPointPrice() <= dPrevLoBound)
      bLoBreakback = true;

   // Проверим, возможно, отбоя не было, или были сразу два отбоя ? 
   if(bHiBreakback ==  bLoBreakback)
      {
      _AddTOInfo("Сигнала нет.");
      return(TD_FLAT);
      };

   TRACE_DATETIME("Time(1): ",m_tcContainer.Time(1));
      
   // Проверим, возможно, пробой с обоих сторон ? 
   
   // Пробой в одну сторону. 
   if(bHiBreakback)
      {
      // Был отбой вниз
      _AddTOInfo("Отбой вниз. Сигнал в шорт !");
      return(TD_DOWN);
      };
   
   // Был отбой вверх.   
   _AddTOInfo("Отбой вверх. Сигнал в лонг !");
   return(TD_UP);
};

Für die Arbeit wird der Zeiger auf die Preis-Chenel-Schnittstelle verwendet, die bei der Initialisierung vom Datenanbieter empfangen wird:

EEAWorkRetcode CPriceChannel_Binder_EPFT::Init(CDataProviderI* pdpDataProvider,CCPRList* pcrlEATradeRequestsQueue)
{
   EEAWorkRetcode wrRes = CDATR_Binder_EPFT::Init(pdpDataProvider,pcrlEATradeRequestsQueue);
   
   if(wrRes != WR_SUCCEEDED)
      return(wrRes);

   RETURN_IF_FALSE(m_tcContainer.Init(pdpDataProvider,m_didData.m_csWorkSymbol,ALL_SERIES_EXCEPT_REALVOLUME,m_didData.m_etWorkTimeFrame,_GetCannelPeriod()));
   
   CPriceChannel_IParams pcpParams;

   pcpParams.SetCommonParameters(m_didData.m_csWorkSymbol,m_didData.m_etWorkTimeFrame,_GetCannelPeriod(),true);
   
   TRACE_INTEGER("Устанавливаем Price Cannel, с периодом: ",pcpParams.GetIndicatorPeriod());
   
   m_ppcPriceChannel = pdpDataProvider.GetIndicator(GetPointer(pcpParams));
   
   if(m_ppcPriceChannel == NULL)
      return(WR_CANT_CREATE_INDICATOR);

   
   return(WR_SUCCEEDED);      
};

Das heißt, wir erstellen ein Objekt mit Parametern des Preiskanals und fordern vom Datenanbieter einen Zeiger auf die Schnittstelle dieses Indikators an.

Der Datenlieferant schaut nach, und wenn ein solcher Indikator noch nicht erstellt wurde, erstellt er ihn und gibt den Zeiger zurück. Hier ist dieser Code:

CIndicatorI* CDataProviderT::GetIndicator(CIndicatorParametersI* pipIndicatorParameters,uint uiMinBufferSize,bool bLoadData)
{
   ASSERT_MYPOINTER(pipIndicatorParameters);
   ASSERT(uiMinBufferSize > 0);

   CIndicatorI* piResult = NULL;
   int iIndIdx = WRONG_VALUE;

   // Поищем нужный индикатор
   if(_FindWithResizeIndicator(pipIndicatorParameters,uiMinBufferSize,iIndIdx) == true)
      {
      // Индикатор найден, и его размер подходит.
      ASSERT(iIndIdx < m_aoIndicators.Total());
      piResult = m_aoIndicators.At(iIndIdx);
      ASSERT_MYPOINTER(piResult);
      }
   else
      {
      // Индикатор не найден. 
      
      // Проверим, возможно произошла ошибка инициализации ? 
      if(iIndIdx != WRONG_VALUE)
         {
         ASSERT_DSC(false,"Внимание ! Индикатор существует, однако, не удалось изменить размер его буффера !");
         TRACE_INTEGER("Тип индикатора: ",pipIndicatorParameters.GetIndicatorType());
         TRACE_INTEGER("Желаемый размер буффера: ",uiMinBufferSize);
         return(NULL);
         };
   
      // Индикатора действительно нет. 
      // Попытаемся его создать.   
      piResult =  _CreateIndicator(pipIndicatorParameters,uiMinBufferSize);
      ASSERT_MYPOINTER_OR_NULL(piResult);
      
      if(piResult == NULL)
         {
         ASSERT_DSC(false,"Внимание ! Не удалось создать индикатор !");
         TRACE_INTEGER("Тип индикатора: ",pipIndicatorParameters.GetIndicatorType());
         TRACE_INTEGER("Желаемый размер буффера: ",uiMinBufferSize);
         return(NULL);
         };

      // Индикатор успешно создан. 
      // Отобразим его на чарте, если это необходимо.      
      
      if(piResult.NeedLaunchOnMT5VisualTester()==true && _IsWorkInVisualTester() && _GetMainTimeframe() == piResult.GetIndicatorTimeframe())
         {
         if(_AddIndicatorToChart(piResult,true) != true) 
            {
            ASSERT_DSC(false,"Внимание ! Не удалось отобразить вновь созданный индикатор на чарте !");
            TRACE_INTEGER("Тип индикатора: ",piResult.GetIndicatorType());
            }; 
         };    
      };
   
   // В этой точке индикатор либо найден, либо успешно создан.
   // Возможно, надо загрузить в него данные ? 
   if(bLoadData)
      if(piResult.Refresh()!=true)
         {
         ASSERT_DSC(false,"Внимание ! Не удалось обновить данные индикатора !");
         TRACE_INTEGER("Тип индикатора: ",pipIndicatorParameters.GetIndicatorType());
         TRACE_INTEGER("Желаемый размер буффера: ",uiMinBufferSize);
         };

   return(piResult);
};

So wird "alles für alles" angehängt, und nur ein Abschnitt des Codes, wie hier, kann separat angezeigt werden. Das wird natürlich nicht funktionieren.

 
Aber für diejenigen, die daran interessiert sind, kann ich Ihnen das Investitionspasswort für das Konto geben, auf dem die TC League arbeitet (es gibt drei Konten, je nach Anzahl der Divisionen - die höchste, die mittlere und die niedrigste). Dort müssen Sie die Transaktionen auf dem richtigen Magier überwachen (weil es mehr als hundert Magier auf einem Konto gleichzeitig gibt). Wenn Sie es tun können - kein Problem, ich werde in privaten investieren-Passwort zu schreiben. Durch das Sammeln von Trades auf den richtigen Magier - werden Sie in der Lage sein, die gleichen Charts zu erstellen, wie ich sie hier präsentiere.
 
Georgiy Merts:

Ich habe sehr viele Systeme, die immer gut funktionieren. Und meine Hauptfrage ist jetzt nicht, "was man tun muss, damit der TS funktioniert", sondern "wie man aus den TS, die funktionieren, diejenigen auswählt, die noch einige Zeit funktionieren werden".

Und ich, statt vieler, habe nur zwei TS, einen für Longs, den anderen für Shorts, und die Frage, welcher von ihnen wann funktioniert, ist dieselbe, leider hat niemand eine genaue Antwort darauf und wird sie auch nie haben.

 
revers45:

Und ich, statt vieler, habe nur zwei TS, einen für Longs und einen für Shorts, und die Frage, welcher wann funktioniert, ist die gleiche, leider hat niemand die genaue Antwort und wird sie auch nie haben.

Nach den Erfahrungen der TK-Liga liegt die Wahrscheinlichkeit, dass die TK ausfällt, bei 1 % pro Tag. Zwei Systeme sind zu wenig, die Wahrscheinlichkeit, dass beide innerhalb weniger Monate ausfallen, liegt bei etwa 70 %.

Und was werden Sie als nächstes tun?

Gerade jetzt erinnere ich mich sehr gut an meinen Zustand, als mein Expert Advisor, an dem ich seit mehr als sechs Monaten arbeite (und davor mehrere Jahre lang meinen TS entwickelt habe), zu versagen begann. Ich war völlig entmutigt und wusste nicht, was ich tun sollte.

Wenn ich nun eine Reihe von TS habe, ist die Situation völlig anders. Der TS hat aufgehört zu funktionieren - das ist unangenehm. Zur Hölle damit, ich werde eine andere installieren müssen. Ich wünschte, ich hätte es sofort getan. Interner Komfort ist viel mehr.

 

Gheorghe, wo ist die Überwachung geblieben?

Es gibt ein Thema, aber Sie können die Ergebnisse nicht nachvollziehen.

Es ist nicht interessant.

 
Boris Gulikov:

Gheorghe, wo ist die Überwachung geblieben?

Es gibt ein Thema, aber es gibt keine Überwachung der Ergebnisse.

Das ist uninteressant.

Was meinen Sie mit "wo"?

Was ist das?

Der Bericht für den 10.12.18 ist von vorgestern. Und Charts der fünf Besten, eine Tabelle mit den zwanzig Besten und meine kurze Zusammenfassung.

Лига Торговых Систем. Продолжаем работу.
Лига Торговых Систем. Продолжаем работу.
  • 2018.11.27
  • www.mql5.com
Всех приветствую. Если кто забыл - Лига Торговых Систем - это набор простых советников, которые постоянно торгуют на демо-счете...
 
Georgiy Merts:

Was meinen Sie mit "wo"?

Was ist das?

Der Bericht für den 10.12.18 ist von vorgestern. Und Charts der fünf Besten, eine Tabelle mit den zwanzig Besten und meine kurze Zusammenfassung.

Das ist natürlich cool. Aber ich bin eher daran gewöhnt, die Ergebnisse des Systems/der Systeme als ein Signal zu sehen.

Ich bin reingekommen, habe mir das Diagramm angesehen, und ja, es gibt ein Ergebnis. Was schreibt Gueorgui in seiner Kolumne? Wie kommentiert er das?

Und ohne ein Live-Signal ist alles falsch, alles ist falsch.

Ich kann verstehen, dass Sie kein Signal geben, wenn Ihre Strategien noch keine verwertbaren Ergebnisse zeigen.

Aber Ihr Bericht scheint recht gut zu sein.

Ich verstehe nicht, was mich daran hindert, fünf der besten Strategien auf den realen Markt zu setzen und sie hier als öffentliches Signal zu überwachen.

 
Boris Gulikov:

Das ist natürlich cool. Aber im Allgemeinen ziehe ich es vor, die Ergebnisse des Systems/der Systeme in Form von Signalen zu sehen.

Ich schaue mir die Tabelle an und sehe die Ergebnisse. Was schreibt Herr Gueorgui in seiner Kolumne? Wie kommentiert er das?

Und ohne ein Live-Signal ist alles falsch, alles ist falsch.

Ich kann verstehen, dass es kein Signal gibt, wenn Ihre Strategien noch keine verdaulichen Ergebnisse zeigen.

Aber Ihr Bericht scheint recht gut zu sein.

Ich verstehe nicht, was mich daran hindert, fünf der besten Strategien auf den realen Markt zu setzen und sie hier als öffentliches Signal zu überwachen.

Und ich bin mehr an das Signal gewöhnt. Wer kann das schon sagen? Aber ich kann nicht 672 Terminals, 672 Konten, 672 Signale eröffnen...

Ich habe schon oft gesagt, dass ich ständig vor der Frage stehe, einen stabilen TS zu wählen. Ich nehme also ein System, das zu funktionieren scheint... Aber ich habe es einfach auf ein separates Konto gelegt - und zack... Und es funktioniert nicht mehr, zeigt Verluste an (überall, auf einem separaten Konto und auf einem Demokonto), fällt aus der Bewertung heraus...

Was empfehlen Sie bei der Auswahl der Systeme? Viele der besten TS sind beispielsweise "Reverse Trailing"-Systeme, bei denen der SL nicht gesetzt ist und der TP nachläuft. Das Verhalten dieser Systeme ist dem von Martin sehr ähnlich. Ich habe schon mehrmals versucht, sie auf ein separates Konto zu legen, das Ergebnis ist immer das gleiche. Ich hatte ein paar gute Trades, dann einen unvorhersehbaren Trend und einen großen Verlust.

Die Frage der Auswahl ist im Moment meine schwierigste und ungelöste Frage.

Wie sollten Sie Ihrer Meinung nach die Systeme für das Signal auswählen? Und öffnen Sie das Signal.