リーグ・オブ・トレーディング・システムズこれからもよろしくお願いします。 - ページ 39

 
Roman Shiredchenko:

直感的に "面倒くさい "と書いているが、直感的でないのはもっと面倒くさい...。

E それに、こんな初歩的なことに大金を賭けるのも、正直言って怖いし......。今日は最適化で動くけど、明日は動かないかもしれないし、本番で注げるかもしれない...。

原則的に私はNo.1が好きだった - 限界、チャート上のチャンネル1 - 私はチャンピオンシップを思い出した...:-)

数量は、選択したTSのWHOLE PULSEにおける取引量の合計です。

まあ、「直感的に」--見て、配置すべきと思うのは確かです。着けてみたら、沈むようになった。そして、私の "直感 "は無価値だった。直感は経験の積み重ねです。持っていないんです。つまり、明確なルールで選ぶしかないのです。

数年前、私は非常に複雑で非基本的なExpert Advisorを書き、そのTSに著者は1年以上を費やし、その後、私はさらに6ヶ月間それをコーディングしたのです。そして...?最初はExpert Advisorで稼いでいたのですが、ほんの数ヶ月で沈み始め、稼いだ分を全て失いました。

どんな「初級品」でも、1〜2ヶ月はよく儲かるが、その後、失敗することがある。その後、ノンエレメンタルのものはどう使うのですか?そのエピソードを経て--そして、「サッカーリーグ」を作り、「選手」を選抜し、勝手に「ボールを持ってフィールドを走り回る」のではなく、「選手」が必要だという結論に至ったのです。今、私は多くのシステムを常に導入しており、それらは非常にうまく機能しています。そして、今の私の一番の疑問は、「TSを機能させるためにどうするか」ではなく、「機能するTSの中から、まだしばらくは機能しそうなものをどう選ぶか」なのです。

ボリュームについては、今、6人のTSが「コントロール」1,000セントに取り組んでいるんだ。そして、中には0.02のボリュームで開くものまであります。ですから、ここで考えられる問題はないと思います。

 
Roman Shiredchenko:

これらのピークがその読みの接続コードで見られるコードやインジケータを投げて、トレードで見てみると非常に面白いでしょう。

チャンネルTSは全くと言っていいほど持っていなかったんです。儲けは出なかったが......。

私のコードは、あなた(仮に「あなた」とします)にとって、理解するのが難しいのではないでしょうか。私のコードは、数千のファイルからなるライブラリ全体です。

例えば、ここに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-Chenelインタフェースへのポインタは、初期化時にデータプロバイダから受信し、動作に使用されます。

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

つまり、価格チャネルのパラメータのオブジェクトを作成し、データプロバイダにこの指標のインターフェースへのポインタを要求するのです。

dataproviderは、そのようなインジケータがまだ作成されていない場合、それを作成し、ポインタを返します。このコードを紹介します。

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

このように-「何にでも対応できる」フックになっており、ここのようにコードの一部分だけを切り離して表示することができるのです。もちろん、うまくはいかないでしょう。

 
しかし、興味のある方には、TCリーグが活動している口座の投資パスワードをお教えします(口座は部門数に応じて、最高、中、最低の3つがあります)。 そこで、正しいマジシャンの取引を監視する必要があります(一つの口座に一度に100以上のマジシャンが存在するため)。あなたはそれを行うことができます場合は、 - いいえ問題は、私はプライベート投資-パスワードに書き込まれます。正しいマジシャンでトレードを集めることで、ここで紹介するようなチャートを作ることができるようになります。
 
Georgiy Merts:

今、私は、常に良好なパフォーマンスを発揮するシステムをたくさん持っています。そして、今の私の一番の疑問は、「TSを機能させるためにどうするか」ではなく、「機能するTSの中から、まだしばらくは機能するTSをどう選ぶか」なのです。

そして、私は、多くの代わりに、2つのTSしか持っていません。1つはロング用、もう1つはショート用で、そのうちのどれがいつ、どのように機能するかを選ぶ問題は同じです。残念ながら、誰もそれに対する正確な答えを持っていませんし、これからも持つことはないでしょう。

 
revers45:

そして、私は、たくさんある代わりに、ロング用とショート用の2つのTSしか持っていません。そして、どちらがいつ、どのように機能するのかという問題は同じで、残念ながら、誰も正確な答えを持っていませんし、これからも持つことはないでしょう。

TCリーグの経験では、TCが機能しなくなる確率は1日あたり1%に等しいと言われています。2台では少なすぎる。2台とも数カ月で動かなくなる確率は70%程度だ。

そして、次に何をするつもりなのか?

ちょうど今、私の状況をよく覚えています。6ヶ月以上取り組んできた(それ以前は数年間TSを開発してきた)Expert Advisorが故障し始めたときのことです。すっかり意気消沈し、どうしたらいいかわからなくなりました。

さて、作業用のTSがたくさんあると、状況はまったく変わってきます。TSが効かなくなった......不愉快だ。地獄を見るのは、別のものをインストールすることだ。一度にやっておけばよかったと思います。内的快適性はもっとある。

 

ゲオルゲ モニターはどこに行ったんだ?

トピックはあるが、結果を追うことができない。

面白みがない。

 
Boris Gulikov:

ゲオルゲ モニターはどこに行ったんだ?

トピックはあるが、結果のモニタリングはない。

おもしろくないんです。

"どこ "ってどういう意味?

これは 何?

10.12.18のレポートは、一昨日のものです。そして、トップ5のチャート、トップ20の表、そして私の簡単な要約です。

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

"どこ "ってどういう意味?

それは 何ですか?

10.12.18のレポートは、一昨日のものです。そして、トップ5のチャート、トップ20の表、そして私の簡単な要約です。

もちろん、それはそれでカッコいいんですけどね。しかし、私はシステム(複数)の結果を信号として見ることの方が慣れています。

入って、グラフを見て、はい、結果オーライです。ゲオルギーはコラムで何を書いているのか?どのようにコメントしているのでしょうか?

そして、ライブ信号がなければ、すべてが間違っているのです。

あなたの戦略がまだ消化できる結果を示していないのであれば、信号がないのも理解できます。

しかし、あなたのレポートはなかなか好調のようですね。

私は、ベストな5つの戦略を実際の市場に投入し、公開シグナルとしてここでモニターすることを妨げるものが理解できません。

 
Boris Gulikov:

もちろん、これはこれでカッコいい。しかし、一般的に私は、システム(複数)の結果を信号という形で見るのが好きです。

チャートを見て、結果を確認する。ゲオルギーさんはコラムで何を書いているのですか?どのようにコメントしているのでしょうか?

そして、ライブ信号がなければ、すべてが間違っているのです。

自分の戦略がまだ消化不良の結果が出ていないのであれば、シグナルがないのも理解できます。

しかし、あなたのレポートはなかなか好調のようですね。

私は、ベストな5つの戦略を実際の市場に投入し、公開シグナルとしてここでモニターすることを妨げるものが理解できないのです。

それに、信号にも慣れましたしね。誰が言うんだ?しかし、672のターミナル、672のアカウント、672のシグナルを開くことができません...。

もう何度も言いますが、私は常に安定したTSを選択する問題に直面しています。それで、あるシステムをとると、うまくいくようなのですが...。でも、それを別のアカウントにすればいいんです。そして、動作が停止し、損失が表示され始め(どこでも、別口座でもデモ口座でも)、評価から脱落してしまいました...。

どのようにシステムを選択するのがよいでしょうか?さて、優秀なTSの多くは、SLを設定せず、TPを引きずる「逆張り」システムであるとしましょう。これらのシステムの挙動は、マーティンのものと非常によく似ています。もう何度も別アカウントにしようとしましたが、結果はいつも同じです。何度か良いトレードをした後、推測できないトレンドが発生して大損してしまいました。

セレクションの問題は、今のところ私にとって最も難しく、未解決の問題です。

信号のシステムをどのように選択すべきとお考えですか?そして、シグナルを開く。

 
Georgiy Merts:

それに、信号にも慣れましたしね。誰が議論しているのですか?

何度も言いますが、私は常に安定したTSを選択する問題に直面しています。それで、あるシステムをとると、うまくいくようなのですが...。でも、別アカウントにしたら......ドカンと。そして、動作が停止し、損失が表示され始め(どこでも、別口座でもデモ口座でも)、評価から脱落してしまいました...。

どのようにシステムを選択するのがよいでしょうか?さて、優秀なTSの多くは、SLを設定せず、TPを引きずる「逆張り」システムであるとしましょう。これらのシステムの挙動は、マーティンのものと非常によく似ています。もう何度も別アカウントにしようとしましたが、結果はいつも同じです。何度か良いトレードをした後、推測できないトレンドが発生して大損してしまいました。

選択の問題は、私にとって今最も困難で未解決の問題です。

信号に対するシステムの選択方法について、どのようにお考えですか?そして、シグナルを開く。

私なら手始めにデモでセントサイドバイサイドを開きます。デモが好きな方。1週間では、結果が大きく異なることが多いので、デモが良くないことを確認します(デモでプラス、セントでマイナスが原則)。そして、4分の1か2には、長期的なテストに基づいて選んだ最も成功したTSを使うことにしています。そして、テスターで得た結果とセントで得た結果を比較するのです。テスターが各TSについてどの程度の嘘をつくのか、継続する価値があるのかを把握するため。もし、その差が深刻で、もちろんテスタープラス、セントマイナスであれば、TSは拒否されるでしょう。テスターでの結果が実際のものと似ている、あるいはマイナスである場合、この戦略はさらなる作業のために残されるかもしれません - それは停滞期を意味します。そして、その頻度も検査でわかる。テスターで見て納得したら、本番に賭ける。

なんとなく。