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);
};
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);
};
直感的に "面倒くさい "と書いているが、直感的でないのはもっと面倒くさい...。
E それに、こんな初歩的なことに大金を賭けるのも、正直言って怖いし......。今日は最適化で動くけど、明日は動かないかもしれないし、本番で注げるかもしれない...。
原則的に私はNo.1が好きだった - 限界、チャート上のチャンネル1 - 私はチャンピオンシップを思い出した...:-)
数量は、選択したTSのWHOLE PULSEにおける取引量の合計です。
まあ、「直感的に」--見て、配置すべきと思うのは確かです。着けてみたら、沈むようになった。そして、私の "直感 "は無価値だった。直感は経験の積み重ねです。持っていないんです。つまり、明確なルールで選ぶしかないのです。
数年前、私は非常に複雑で非基本的なExpert Advisorを書き、そのTSに著者は1年以上を費やし、その後、私はさらに6ヶ月間それをコーディングしたのです。そして...?最初はExpert Advisorで稼いでいたのですが、ほんの数ヶ月で沈み始め、稼いだ分を全て失いました。
どんな「初級品」でも、1〜2ヶ月はよく儲かるが、その後、失敗することがある。その後、ノンエレメンタルのものはどう使うのですか?そのエピソードを経て--そして、「サッカーリーグ」を作り、「選手」を選抜し、勝手に「ボールを持ってフィールドを走り回る」のではなく、「選手」が必要だという結論に至ったのです。今、私は多くのシステムを常に導入しており、それらは非常にうまく機能しています。そして、今の私の一番の疑問は、「TSを機能させるためにどうするか」ではなく、「機能するTSの中から、まだしばらくは機能しそうなものをどう選ぶか」なのです。
ボリュームについては、今、6人のTSが「コントロール」1,000セントに取り組んでいるんだ。そして、中には0.02のボリュームで開くものまであります。ですから、ここで考えられる問題はないと思います。
これらのピークがその読みの接続コードで見られるコードやインジケータを投げて、トレードで見てみると非常に面白いでしょう。
チャンネルTSは全くと言っていいほど持っていなかったんです。儲けは出なかったが......。
私のコードは、あなた(仮に「あなた」とします)にとって、理解するのが難しいのではないでしょうか。私のコードは、数千のファイルからなるライブラリ全体です。
例えば、ここに672個のTCがすべて継承されているメインテンプレートのOnRefresh()関数がありますが、これは判断をする役割を担っています。
子孫の_GetSignal()関数でエントリーが決定されます。
ここで、この関数は、すべてのチャネルTS(システムによっては、トレンドやフラットに対応した関数が 呼び出されます)に対するものであるとします。
Price-Chenelインタフェースへのポインタは、初期化時にデータプロバイダから受信し、動作に使用されます。
つまり、価格チャネルのパラメータのオブジェクトを作成し、データプロバイダにこの指標のインターフェースへのポインタを要求するのです。
dataproviderは、そのようなインジケータがまだ作成されていない場合、それを作成し、ポインタを返します。このコードを紹介します。
このように-「何にでも対応できる」フックになっており、ここのようにコードの一部分だけを切り離して表示することができるのです。もちろん、うまくはいかないでしょう。
今、私は、常に良好なパフォーマンスを発揮するシステムをたくさん持っています。そして、今の私の一番の疑問は、「TSを機能させるためにどうするか」ではなく、「機能するTSの中から、まだしばらくは機能するTSをどう選ぶか」なのです。
そして、私は、多くの代わりに、2つのTSしか持っていません。1つはロング用、もう1つはショート用で、そのうちのどれがいつ、どのように機能するかを選ぶ問題は同じです。残念ながら、誰もそれに対する正確な答えを持っていませんし、これからも持つことはないでしょう。
そして、私は、たくさんある代わりに、ロング用とショート用の2つのTSしか持っていません。そして、どちらがいつ、どのように機能するのかという問題は同じで、残念ながら、誰も正確な答えを持っていませんし、これからも持つことはないでしょう。
TCリーグの経験では、TCが機能しなくなる確率は1日あたり1%に等しいと言われています。2台では少なすぎる。2台とも数カ月で動かなくなる確率は70%程度だ。
そして、次に何をするつもりなのか?
ちょうど今、私の状況をよく覚えています。6ヶ月以上取り組んできた(それ以前は数年間TSを開発してきた)Expert Advisorが故障し始めたときのことです。すっかり意気消沈し、どうしたらいいかわからなくなりました。
さて、作業用のTSがたくさんあると、状況はまったく変わってきます。TSが効かなくなった......不愉快だ。地獄を見るのは、別のものをインストールすることだ。一度にやっておけばよかったと思います。内的快適性はもっとある。
ゲオルゲ モニターはどこに行ったんだ?
トピックはあるが、結果を追うことができない。
面白みがない。
ゲオルゲ モニターはどこに行ったんだ?
トピックはあるが、結果のモニタリングはない。
おもしろくないんです。
"どこ "ってどういう意味?
これは 何?
10.12.18のレポートは、一昨日のものです。そして、トップ5のチャート、トップ20の表、そして私の簡単な要約です。
"どこ "ってどういう意味?
それは 何ですか?
10.12.18のレポートは、一昨日のものです。そして、トップ5のチャート、トップ20の表、そして私の簡単な要約です。
もちろん、それはそれでカッコいいんですけどね。しかし、私はシステム(複数)の結果を信号として見ることの方が慣れています。
入って、グラフを見て、はい、結果オーライです。ゲオルギーはコラムで何を書いているのか?どのようにコメントしているのでしょうか?
そして、ライブ信号がなければ、すべてが間違っているのです。
あなたの戦略がまだ消化できる結果を示していないのであれば、信号がないのも理解できます。
しかし、あなたのレポートはなかなか好調のようですね。
私は、ベストな5つの戦略を実際の市場に投入し、公開シグナルとしてここでモニターすることを妨げるものが理解できません。
もちろん、これはこれでカッコいい。しかし、一般的に私は、システム(複数)の結果を信号という形で見るのが好きです。
チャートを見て、結果を確認する。ゲオルギーさんはコラムで何を書いているのですか?どのようにコメントしているのでしょうか?
そして、ライブ信号がなければ、すべてが間違っているのです。
自分の戦略がまだ消化不良の結果が出ていないのであれば、シグナルがないのも理解できます。
しかし、あなたのレポートはなかなか好調のようですね。
私は、ベストな5つの戦略を実際の市場に投入し、公開シグナルとしてここでモニターすることを妨げるものが理解できないのです。
それに、信号にも慣れましたしね。誰が言うんだ?しかし、672のターミナル、672のアカウント、672のシグナルを開くことができません...。
もう何度も言いますが、私は常に安定したTSを選択する問題に直面しています。それで、あるシステムをとると、うまくいくようなのですが...。でも、それを別のアカウントにすればいいんです。そして、動作が停止し、損失が表示され始め(どこでも、別口座でもデモ口座でも)、評価から脱落してしまいました...。
どのようにシステムを選択するのがよいでしょうか?さて、優秀なTSの多くは、SLを設定せず、TPを引きずる「逆張り」システムであるとしましょう。これらのシステムの挙動は、マーティンのものと非常によく似ています。もう何度も別アカウントにしようとしましたが、結果はいつも同じです。何度か良いトレードをした後、推測できないトレンドが発生して大損してしまいました。
セレクションの問題は、今のところ私にとって最も難しく、未解決の問題です。
信号のシステムをどのように選択すべきとお考えですか?そして、シグナルを開く。
それに、信号にも慣れましたしね。誰が議論しているのですか?
何度も言いますが、私は常に安定したTSを選択する問題に直面しています。それで、あるシステムをとると、うまくいくようなのですが...。でも、別アカウントにしたら......ドカンと。そして、動作が停止し、損失が表示され始め(どこでも、別口座でもデモ口座でも)、評価から脱落してしまいました...。
どのようにシステムを選択するのがよいでしょうか?さて、優秀なTSの多くは、SLを設定せず、TPを引きずる「逆張り」システムであるとしましょう。これらのシステムの挙動は、マーティンのものと非常によく似ています。もう何度も別アカウントにしようとしましたが、結果はいつも同じです。何度か良いトレードをした後、推測できないトレンドが発生して大損してしまいました。
選択の問題は、私にとって今最も困難で未解決の問題です。
信号に対するシステムの選択方法について、どのようにお考えですか?そして、シグナルを開く。
私なら手始めにデモでセントサイドバイサイドを開きます。デモが好きな方。1週間では、結果が大きく異なることが多いので、デモが良くないことを確認します(デモでプラス、セントでマイナスが原則)。そして、4分の1か2には、長期的なテストに基づいて選んだ最も成功したTSを使うことにしています。そして、テスターで得た結果とセントで得た結果を比較するのです。テスターが各TSについてどの程度の嘘をつくのか、継続する価値があるのかを把握するため。もし、その差が深刻で、もちろんテスタープラス、セントマイナスであれば、TSは拒否されるでしょう。テスターでの結果が実際のものと似ている、あるいはマイナスである場合、この戦略はさらなる作業のために残されるかもしれません - それは停滞期を意味します。そして、その頻度も検査でわかる。テスターで見て納得したら、本番に賭ける。
なんとなく。