Ticaret Sistemleri Birliği. Çalışmaya devam ediyoruz. - sayfa 39

 
Georgiy Merts :

Mevcut durum...

Derecelendirmenin yeni üyesi - TS 543122 - pound frangı zikzak doruklarında limit mevduat üzerinde darbeler hemen ilk sırada yer aldı. Sistem, Kasım ayının ortasından itibaren devreye alındı ancak hiçbir şekilde reytinge giremedi. Ancak, geçen hafta boyunca, birkaç başarılı işlem yapıldı ve sistem, önceki kazananı geride bırakarak ticaretin kalitesini önemli ölçüde artırdı.


okumalarını bağlamak için kod ile bu zirveleri görebileceğiniz bir kod parçası veya bir gösterge atın, müzayedede ona bakmak çok ilginç olurdu.

Çok fazla kanalım yoktu. Para kazanmadılar...

 
Roman Shiredchenko :

anlamda - yazarken "sezgisel olarak" zahmetli ve sezgisel olarak daha da zahmetli değil ...

ve dürüst olmak gerekirse, bu tür temel şeylere ciddi para yatırmak da korkutucu ... bugün optimizasyondan sonra çalışıyor - yarın çalışmıyor ve hemen gerçek hayatta akabilir ...

Prensip olarak, 1 numarayı sevdim - sınırlardaki kanal, grafikler - bir şekilde bana şampiyonluğu hatırlattı ... :-)

Hacim - bu, seçilen TS'nin TOPLAM HAVUZUNUN NİHAİ işlemlerinin hacmidir.

Eh, "sezgisel olarak" - baktı, sizce, bu koymak gerekir. Onu koydu ve birleşmeye başladı. Ve "sezgimin" bedeli değersizdir. Sezgi çok büyük bir deneyimdir. bende yok Yani, tek seçim olasılığı - sadece net kurallar.

"Temel şeylere ciddi para yatırmak" konusuna gelince... bir kereden fazla söylediğim gibi, birkaç yıl önce, yazarı bir yıldan fazla zaman harcayan çok karmaşık ve temel olmayan bir Uzman Danışman yazıyordum. TS ve sonra - Neredeyse yarım yıl boyunca kodladım. Peki?... Başta Uzman Danışman para kazanmaya başladı ve kelimenin tam anlamıyla birkaç ay sonra para kaybetmeye başladı ve kazandığı her şeyi kaybetti.

Şimdi, kendiniz karar verin - evet, herhangi bir "temel" aynı şekilde çalışabilir - bir veya iki ay iyi bir kazanç sağlamak için ve sonra - boşaltmaya başlayın. Ve ilköğretimde bundan sonraki nokta nedir? Bu bölümden sonra - bir "futbol ligi" oluşturmanın ve "oyuncular"ı seçmenin ve "topla sahada koşmanın" tek başına gerekli olmadığı sonucuna vardım. Şimdi - Sürekli olarak iyi sonuçlar veren BİRÇOK sistemim var. Ve şimdi asıl sorum "TS'yi çalıştırmak için ne yapmalı" değil, "Çalışan TS'lerden nasıl seçilir, bir süre daha çalışacak olanlar".

Hacim gelince - şimdi 1000 sentlik "kontrol" cent metre üzerinde çalışan altı aracım var. Hatta bazıları 0.02'lik bir hacimle açılıyor. Bu yüzden burada herhangi bir sorun olduğunu düşünmüyorum.

 
Roman Shiredchenko :

okumalarını bağlamak için kod ile bu zirveleri görebileceğiniz bir kod parçası veya bir gösterge atın, müzayedede ona bakmak çok ilginç olurdu.

Çok fazla kanalım yoktu. Para kazanmadılar...

Korkarım ki kodumda sizi (hadi "siz") anlamak kolay olmayacak. Kodum, birkaç bin dosyadan oluşan bir kitaplıktır.

Diyelim ki, 672 TC'nin tümünün miras alındığı ana şablonun OnRefresh() işlevi, kararı vermekten o sorumlu:

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);
};

Mirasçılarda _GetSignal() fonksiyonunda girilme ihtimaline karar verilir.

Burada, diyelim ki, tüm kanal TS için bu işlev (orada, sisteme bağlı olarak , trend veya düzişlevler çağrılır):

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);
};

İş için Price-Chanel arayüzüne bir işaretçi kullanılır, başlatma sırasında Veri Sağlayıcıdan alınır:

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);      
};

Yani, bir fiyat kanalı parametre nesnesi yaratırız ve veri sağlayıcıdan bu göstergenin arayüzüne bir işaretçi sorarız.

Veri sağlayıcı bakar ve henüz böyle bir gösterge oluşturulmamışsa, onu oluşturur ve bir işaretçi döndürür. İşte kod:

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);
};

Böylece, "herkes için" yapışır ve burada olduğu gibi yalnızca kodun bir bölümü ayrı olarak gösterilebilir. Tabii ki çalışmayacak.

 
Ancak ilgilenenler için TS League'in çalıştığı hesabın yatırım şifresini verebilirim (bölüm sayısına göre en yüksek, orta ve en düşük olmak üzere üç hesap vardır). Orada istediğiniz büyü için işlemleri izlemeniz gerekir (çünkü bir hesapta aynı anda yüzden fazla büyü vardır). Elimden geliyorsa - sorun değil, yatırım şifresini özel olarak yazacağım. İstenen büyü için işlemleri toplamak - burada sunduğum çizelgelerin aynısını oluşturabilirsiniz.
 
Georgiy Merts :

Şimdi - Sürekli olarak iyi sonuçlar veren BİRÇOK sistemim var. Ve şimdi asıl sorum "TS'yi çalıştırmak için ne yapmalı" değil, "Çalışan TS'lerden nasıl seçilir, bir süre daha çalışacak olanlar".

Ve MANY yerine sadece İKİ TS'im var, biri uzun, diğeri şort için ve hangisinin ve ne zaman çalışacağını seçme sorusu aynı, ne yazık ki kimsenin buna kesin bir cevabı yok ve asla olmayacak. .

 
revers45 :

Ve MANY yerine sadece İKİ TS'im var, biri uzun, diğeri şort için ve hangisinin ve ne zaman çalışacağını seçme sorusu aynı, ne yazık ki kimsenin buna kesin bir cevabı yok ve asla olmayacak. .

TS Ligi tecrübesine göre, TS'nin çalışmayı bırakma olasılığı günlük %1'dir. İki sistem çok az, ikisinin de birkaç ay içinde çalışmayı bırakma olasılığı %70 civarında.

Ve sonra ne yapacaksın?

Yarım yıldan fazla bir süredir üzerinde çalıştığım (ve ondan önce, TS birkaç yıldır geliştirilmişti) Expert Advisor'ın birleşmeye başladığı zamanki halimi çok iyi hatırlıyorum. Tamamen cesaretim kırılmıştı ve ne yapacağımı bilmiyordum.

Şimdi, bir sürü çalışan araç varken durum tamamen farklı. TC çalışmayı durdurdu - tatsız. Pekala, canı cehenneme, bir tane daha koymak zorunda kalacağım. Maalesef hemen yayınlamadım. Çok daha fazla iç konfor.

 

George, izleme nereye gitti?

Bir tema var, ancak sonuçları gözlemlemeyeceksiniz.

İlgilenmiyorum.

 
Boris Gulikov :

George, izleme nereye gitti?

Bir tema var, ancak sonuçları gözlemlemeyeceksiniz.

İlgilenmiyorum.

Yani, nasıl "nerede" ???

Ve BU ne?

12/10/18 için rapor - dünden önceki gün. Ve ilk beşin çizelgeleri, ilk yirminin tablosu ve benim kısa özetim.

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

Yani, nasıl "nerede" ???

Ve BU ne?

12/10/18 için rapor - dünden önceki gün. Ve ilk beşin çizelgeleri, ilk yirminin tablosu ve benim kısa özetim.

Kesinlikle harika. Ama bir şekilde, genel olarak, sistem(ler)in sonuçlarını bir sinyal şeklinde görmeye daha alışkınım.

İçeri girdim, grafiğe baktım, - evet, bir sonuç var. Ve George konuya ne yazıyor? Yorum olarak.

Ve canlı bir sinyal olmadan her şey yanlış, her şey doğru değil.

Stratejileriniz henüz en azından bazı sindirilebilir sonuçlar göstermiyorsa, sinyal olmadığını anlayabilirim.

Ama raporunuzda göstergeler fena değil gibi görünüyor.

Sizi gerçek hayatta en iyi beş stratejiyi yerleştirmekten ve onları burada halka açık bir sinyal olarak izlemekten alıkoyan şeyin ne olduğunu anlamıyorum.

 
Boris Gulikov :

Kesinlikle harika. Ama bir şekilde, genel olarak, sistem(ler)in sonuçlarını bir sinyal şeklinde görmeye daha alışkınım.

İçeri girdim, grafiğe baktım, - evet, bir sonuç var. Ve George konuya ne yazıyor? Yorum olarak.

Ve canlı bir sinyal olmadan her şey yanlış, her şey doğru değil.

Stratejileriniz henüz en azından bazı sindirilebilir sonuçlar göstermiyorsa, sinyal olmadığını anlayabilirim.

Ama raporunuzda göstergeler fena değil gibi görünüyor.

Sizi gerçek dünyaya en iyi beş stratejiyi koymaktan ve onu burada halka açık bir sinyal olarak izlemekten alıkoyan şeyin ne olduğunu anlamıyorum.

Ve sinyale alışkınım. Kim tartışıyor? Ama 672 terminal, 672 hesap, 672 sinyal açamıyorum...

Sürekli olarak sürdürülebilir araçları seçme sorunuyla karşı karşıya olduğumu defalarca söyledim. Burada, sistemi alıyorum, işe yarıyor gibi görünüyor ... Ama sadece ayrı bir hesaba koydum - ve bu - bang ... ve çalışmayı durduruyor, bir kayıp göstermeye başlıyor (her yerde, hem ayrı bir hesapta hem de bir demo), derecelendirmeden düşüyor ...

Sistemleri nasıl seçmeyi önerirsiniz? Burada, diyelim ki, en iyi araçların çoğu, SL ayarlanmadığında, ancak TP çekildiğinde "ters takip" sistemleridir. Bu sistemlerin davranışı Martin'i çok andırıyor. Onları ayrı bir hesaba koymayı birkaç kez denedim - sonuç her zaman aynı. Birkaç iyi işlem, ardından beklenmedik bir eğilim ve büyük bir kayıp.

Seçim sorunu şu anda benim için en zor ve çözümsüz.

Önerin, sinyal için sistem seçmenin nasıl gerekli olduğunu düşünüyorsunuz? Ve sinyali açacağım.