무역 시스템 리그. 우리는 계속 일합니다. - 페이지 39

 
Georgiy Merts :

현재 상황...

등급의 신인은 즉시 1 위를 차지했습니다 - TS 543122 - 파운드 프랑 지그재그의 정점에서 예금 제한에 대한 쿠데타. 이 시스템은 11월 중순부터 시작됐지만 어떤 식으로든 등급에 진입하지 못했다. 그러나 지난 주에 몇 번의 성공적인 거래가 이루어졌으며 시스템은 이전 승자를 추월하면서 거래 품질을 크게 향상 시켰습니다.


판독 값을 연결하기위한 코드로 이러한 피크를 볼 수있는 코드 또는 표시기를 던지면 경매에서 보는 것이 매우 흥미로울 것입니다.

저는 채널이 별로 없었어요. 그들은 돈을 벌지 않았다...

 
Roman Shiredchenko :

의미에서 - 당신이 쓸 때 "직관적으로" 번거롭고 직관적으로 더 번거롭지 않습니다 ...

그리고 솔직히 말해서, 그런 기본적인 것들에 심각한 돈을 거는 것도 무섭습니다... 그것은 최적화 후에 오늘 작동합니다. 내일은 그렇지 않으며, 바로 실생활에 쏟아질 수 있습니다 ...

원칙적으로 나는 1 위-한계의 채널, 그래픽-어쩐지 챔피언십을 생각 나게했습니다 ... :-)

볼륨 - 선택된 TS의 TOTAL POOL의 FINAL 트랜잭션 볼륨입니다.

글쎄, 그것은 "직관적으로"- 보았을 때, 당신이 생각하기에 이것이 넣어야한다고 생각합니다. 그는 그것을 넣고 병합하기 시작했습니다. 그리고 내 "직관"의 대가는 무가치합니다. 직관은 엄청난 경험입니다. 나는 그것을 가지고 있지 않다. 따라서 선택의 유일한 가능성은 명확한 규칙뿐입니다.

"기본적인 것들에 큰 돈 걸기"에 관해서... 글쎄요, 제가 한 번 이상 말했듯이, 몇 년 전에 저는 매우 복잡하고 기초가 없는 Expert Advisor를 쓰고 있었습니다. 저자는 TS에 1년 이상을 보냈습니다. 그런 다음 거의 반년 동안 코딩했습니다. 글쎄요?... 처음에는 Expert Advisor가 돈을 벌기 시작했고 말 그대로 몇 달 후에 병합되기 시작했고 번 모든 것을 병합했습니다.

이제 스스로 판단하십시오. 예, 모든 "초등"은 정확히 같은 방식으로 작동할 수 있습니다. 1~2개월 동안 좋은 이익을 얻은 다음, 배수를 시작합니다. 그리고 비초급에서 그 이후의 요점은 무엇입니까? 그 에피소드 이후 - 스스로 '공을 가지고 필드를 뛰어다니는' 것이 아니라 '축구 리그'를 만들고, '선수'를 선택해야 한다는 결론에 이르렀다. 지금 - 나는 좋은 결과를 보여주는 많은 시스템을 지속적으로 보유하고 있습니다. 이제 제 주요 질문은 "TS가 작동하게 하려면 무엇을 해야 하는지"가 아니라 "작동하는 TS, 아직 한동안 작동할 TS 중에서 선택하는 방법"입니다.

볼륨에 관해서는 - 이제 1000센트의 "제어" 센트 미터에서 작업하는 6대의 차량이 있습니다. 그리고 일부는 0.02의 볼륨으로 열립니다. 그래서 여기에는 문제가 없다고 생각합니다.

 
Roman Shiredchenko :

판독 값을 연결하기위한 코드로 이러한 피크를 볼 수있는 코드 또는 표시기를 던지면 경매에서 보는 것이 매우 흥미로울 것입니다.

저는 채널이 별로 없었어요. 그들은 돈을 벌지 않았다...

내 코드에서 당신("당신"으로 오세요)이 이해하기 쉽지 않을 것 같아 두렵습니다. 내 코드는 수천 개의 파일로 구성된 전체 라이브러리입니다.

672명의 모든 TC가 상속되는 기본 템플릿의 OnRefresh() 함수가 있다고 가정해 보겠습니다. 결정을 내리는 사람은 바로 그녀입니다.

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

상속자들의 _GetSignal() 함수에서 진입 가능성이 결정됩니다.

여기에서 모든 채널 TS에 대한 이 함수를 가정해 보겠습니다(시스템 에 따라 트렌드 또는 플랫에 대한 함수 가 호출됨).

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

작업을 위해 Price-Chanel 인터페이스에 대한 포인터가 사용되며 초기화하는 동안 데이터 공급자에서 가져옵니다.

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

즉, 가격 채널 매개변수 개체를 만들고 데이터 공급자에게 이 표시기의 인터페이스에 대한 포인터를 요청합니다.

데이터 제공자는 살펴보고 그러한 표시기가 아직 생성되지 않은 경우 생성하고 포인터를 반환합니다. 코드는 다음과 같습니다.

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

따라서 "모두를 위한 모든 것"에 집착하고 여기에서와 같이 코드의 일부만 별도로 표시할 수 있습니다. 물론 그는 일하지 않을 것입니다.

 
하지만 관심 있으신 분들을 위해 TS리그가 운영되는 계정의 투자비밀번호를 알려드릴 수 있습니다. 거기에서 원하는 마법에 대한 트랜잭션을 모니터링해야 합니다(한 번에 한 계정에 100개 이상의 마법이 있기 때문에). 제 능력 안에 있다면 - 문제 없습니다. 투자 비밀번호를 비공개로 작성하겠습니다. 원하는 마법에 대한 거래 수집 - 여기에 제시된 것과 동일한 차트를 작성할 수 있습니다.
 
Georgiy Merts :

지금 - 나는 좋은 결과를 보여주는 많은 시스템을 지속적으로 보유하고 있습니다. 이제 제 주요 질문은 "TS가 작동하게 하려면 무엇을 해야 하는지"가 아니라 "작동하는 TS, 아직 한동안 작동할 TS 중에서 선택하는 방법"입니다.

그리고 저는 많은 대신에 두 개의 TS만 가지고 있습니다. 하나는 롱용이고 다른 하나는 숏용이며, 둘 중 어느 것을 선택하고 언제 작동하는지에 대한 질문은 동일합니다. 불행히도 아무도 이에 대한 정확한 답을 가지고 있지 않으며 앞으로도 그럴 것입니다. .

 
revers45 :

그리고 저는 많은 대신에 두 개의 TS만 가지고 있습니다. 하나는 롱용이고 다른 하나는 숏용이며, 둘 중 어느 것을 선택하고 언제 작동하는지에 대한 질문은 동일합니다. 불행히도 아무도 이에 대한 정확한 답을 가지고 있지 않으며 앞으로도 그럴 것입니다. .

TS리그 경험에 따르면 TS가 작동을 멈출 확률은 하루 1%다. 두 시스템은 너무 적습니다. 두 시스템이 몇 달 안에 작동을 멈출 확률은 약 70%입니다.

그리고 당신은 다음에 무엇을 할 것인가?

반년 이상 근무한 Expert Advisor(그 이전에는 TS가 몇 년 동안 개발되었음)가 병합되기 시작했을 때의 상태를 아주 잘 기억합니다. 나는 완전히 낙담했고 어찌할 바를 몰랐습니다.

이제 작업 차량이 많으면 상황이 완전히 다릅니다. TC가 작동을 멈췄습니다 - 불쾌합니다. 글쎄, 그것으로 지옥에, 나는 다른 하나를 넣어야 할 것입니다. 바로 포스팅을 하지 못한게 아쉽네요. 훨씬 더 안락한 실내.

 

조지, 모니터링은 어디로 갔어?

주제가 있지만 결과를 관찰하지 않습니다.

관심이 없다.

 
Boris Gulikov :

조지, 모니터링은 어디로 갔어?

주제가 있지만 결과를 관찰하지 않습니다.

관심이 없다.

즉, 어떻게 "어디에서"???

그리고 이것은 무엇입니까?

12/10/18 - 어제의 보고. 그리고 상위 5개의 차트와 상위 20개의 테이블, 그리고 제 간략한 요약입니다.

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

즉, 어떻게 "어디에서"???

그리고 이것은 무엇입니까?

12/10/18 - 어제의 보고. 그리고 상위 5개의 차트와 상위 20개의 테이블, 그리고 제 간략한 요약입니다.

확실히 멋지네요. 그러나 어떻게 든 일반적으로 나는 시스템의 결과를 신호 형태로 보는 데 더 익숙합니다.

들어가서 차트를 보니 - 네, 결과가 있습니다. 조지는 주제에서 무엇을 썼습니까? 댓글로.

그리고 라이브 신호가 없으면 모든 것이 잘못되고 모든 것이 옳지 않습니다.

귀하의 전략이 최소한 소화 가능한 결과를 아직 보여주지 않는다면 신호가 없다는 것을 이해할 수 있습니다.

그러나 귀하의 보고서에는 지표가 나쁘지 않은 것 같습니다.

나는 당신이 실생활에서 최고의 전략 5가지를 배치하고 공개 신호로 여기에서 모니터링하는 것을 막는 것이 무엇인지 이해하지 못합니다.

 
Boris Gulikov :

확실히 멋지네요. 그러나 어떻게 든 일반적으로 나는 시스템의 결과를 신호 형태로 보는 데 더 익숙합니다.

들어가서 차트를 보니 - 네, 결과가 있습니다. 조지는 주제에서 무엇을 썼습니까? 댓글로.

그리고 라이브 신호가 없으면 모든 것이 잘못되고 모든 것이 옳지 않습니다.

귀하의 전략이 최소한 소화 가능한 결과를 아직 보여주지 않는다면 신호가 없다는 것을 이해할 수 있습니다.

하지만 당신의 보고서는 꽤 좋은 것 같습니다.

나는 당신이 실생활에서 최고의 전략 5가지를 배치하고 공개 신호로 여기에서 모니터링하는 것을 막는 것이 무엇인지 이해하지 못합니다.

그리고 나는 신호에 익숙하다. 누가 논쟁하고 있습니까? 하지만 672개의 터미널, 672개의 계정, 672개의 신호를 열 수 없습니다...

나는 지속 가능한 차량을 선택하는 문제에 끊임없이 직면한다고 반복해서 말했습니다. 여기, 나는 시스템을 가지고, 그것은 작동하는 것 같습니다 ... 그러나 나는 그것을 별도의 계정에 넣었습니다 - 그리고 그것은 - 쾅 ... 작동을 멈추고 손실을 보이기 시작합니다 (모든 곳에서 별도의 계정과 데모), 평가에서 탈락 ...

시스템 선택을 어떻게 제안합니까? 예를 들어, SL이 설정되지 않았지만 TP가 후행되는 경우 최고의 차량 중 많은 수가 "후진 후행" 시스템이라고 가정해 보겠습니다. 이러한 시스템의 동작은 Martin의 동작을 매우 연상시킵니다. 나는 이미 그것들을 별도의 계정에 넣으려고 여러 번 시도했습니다. 결과는 항상 동일합니다. 몇 번의 좋은 거래와 예상치 못한 추세, 그리고 엄청난 손실.

지금 선택의 문제는 저에게 가장 어렵고 풀리지 않는 문제입니다.

제안, 신호에 대한 시스템을 선택하는 것이 어떻게 필요하다고 생각합니까? 그리고 신호를 열겠습니다.