[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 426

 
ikatsko >>:

Здравствуйте! Как бы организовать в тестере стратегий оптимизацию (или тестирование) на промежутке времени, определенном не датами, а количеством последних баров? Попытка установки в советнике ограничителя времени работы, который определяется заданным количеством баров и основывается на TimeCurrent(), ничего не дала.


Хотя:

datetime TimeCurrent( )

Возвращает последнее известное время сервера (время прихода последней котировки) в виде количества секунд, прошедших после 00:00 1 января 1970 года.

Замечание: при тестировании последнее известное время сервера моделируется


Получается, что время, на котором работает оптимизатор, задается только в окне тестера фразой "Использовать дату:". Может кто знает какую-нибудь хитрость?

デイトレードの時間帯を設定するということでしょうか?

もしそうなら

//begin
extern string     Торгуемый_диапазон  =  "В часах";
extern int        начало=8;
extern int        окончание=20;


//B start

if(Hour()>= начало&&Hour()< окончание)//если час больше или = 8, а так же если час меньше 20, торгуем
{
//условия
}
 
costy_ >>:

Вы имеете ввиду задавать время торгов внутри дня?

Если так то


短いタイムフレームで、現在時刻に近い小さな期間でEAのパラメータを最適化したいのですが、どうすればいいですか?一方、Strategy Testerでは、最適化処理の開始日と終了日を設定することができます。TFが15分(例)の場合、1日(これはテスターが設定できる最小値)で96本のバーが存在することになります。そして、多いと思います。このTFを過去2時間、つまり例えば8本のバーで最適化したいのです。


そのような断片をEAに挿入しています。

extern int History=100; //エキスパートアドバイザが動作するバーの履歴。
StartDateTime=TimeCurrent()-History*Period()*60とする。
if(TimeCurrent()<StartDateTime) // 開始時刻は来ていません。
{
Alert("開始時刻が来ていません。EAがうまくいかなかった",": ",Symb,",",", Period())。
return; // start() を終了する。

}

StartDateTimeの前にストラテジーテスターのEAが動作しないことは予想していました。でも、違うんです!

 
ikatsko >>:

Я хотел бы оптимизировать параметры советника на коротких таймфреймах на малом промежутке времени поближе к текущему времени. Тестер же стратегий позволяет установить дату на которой начинается и на которой заканчивается процесс оптимизации. Когда же ТФ равен 15 минутам (например), то в сутках (а это минимум который позволяет установить тестер) будет 96 баров. А это по моему много. Хотелось бы для этого ТФ пооптимизировать на последних 2-х часах т.е. на 8-ми например барах.

//begin
extern string     Торгуемый_диапазон  =  "В часах";
extern int        начало=22;
extern int        окончание=0;


//B start

if(Hour()>= начало&&Hour()< окончание)//на интервале  меж 22:00 - 00:00
{
//условия
}

intHour( )
プログラム開始時に最後に確認されたサーバー時刻の現在の時(0,1,2,...23)を返す(この値はプログラム実行中に変更されない)。

注:テスト時には、最後の既知のサーバー時刻がシミュレートされます。


テスターはM1 TFに対応しています。バーに縛られず、時間に縛られる、それも必要かも しれませんね。

 
costy_ >>:

int Hour( )
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).

Замечание: при тестировании последнее известное время сервера моделируется.


Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.

フレーズ:テスト時に、最後の既知のサーバーの時間をシミュレートされているTimeCurrent( )が存在し、しかし、それは動作しません。あなたのバリアントは良いですが、我々はそれが動作するかどうかを確認する必要がありますか?第二に、TFを変更する場合、コードの一部を変更するか、どのTFで動作しているかを認識し、「開始」「終了」の数字を適切に認識する必要があります。3つ目は、バロ数を逆算して設定することで、「始まり」を手動で計算する必要がないため、より便利だと思います。MQLでは、棒を扱いますそして最後に、このコードのデメリットは何でしょうか?(ただし、ストラテジーテスターでは動作しません。というのが私の疑問です)

 
costy_ >>:

int Hour( )
Возвращает текущий час (0,1,2,..23) последнего известного серверного времени на момент старта программы (в процессе выполнения программы это значение не меняется).

Замечание: при тестировании последнее известное время сервера моделируется.


Тестер поддерживает ТФ М1, не привязывайтесь к барам, привязывайтесь ко времени, возможно это тоже нужно.

extern int History=100; //История в барах, на которой работает советник
StartDateTime=TimeCurrent()- History*Period()*60;//...=datetime - int*int*int (допустим 1265996665 - 100 * 15 * 60 это не есть интересующее время)

Alert("TimeCurrent()    "+TimeCurrent()+" < StartDateTime    "+ StartDateTime);//...проверим соотношение datetime 

if(TimeCurrent()< StartDateTime) // Время старта не наступило...
{
Alert("Время старта не наступило. Эксперт не работает.",": ", Symb,", ",Period());
return; // Выход из start()

} 
 
costy_ >>:

みたいな感じ。

datetimeは日付と時刻で、1970年1月1日0時からの経過秒数を含む符号なし整数 である。

и

color型と datetime 型のデータは 整数値 で表現される。整数型は浮動小数点型と合わせて算術(数値)型と呼ばれます。

そうでなければ、どうすればいいのか。

数字の形式についての情報はありがとうございました。探す方向がある。それでも解決策があるのなら、ありがたいことです。

 

実は、テスターではTimeCurrent()ではなく Time[0]を使った方が良いようで、以前はTimeCurrent()が機能していたようなのですが...。

で、テスターのTimeCurrent()は(テスターになくても)最後の引用が来た時の時刻を出力する可能性が高い...。


この場合、うまくいく

extern int History=100; // Expert Advisorが動作するバーの履歴
StartDateTime=Time[History];
if(Time[0] < StartDateTime) // 開始時刻が来ていない
{
Alert("Start time is not come."); { "開始時刻が来ていない。EA not working.",": ",Symb,",",Period());
return; // Exit start()
}.

 
ikatsko >>:

Вроде как:

datetime - дата и время, беззнаковое целое число, содержащее количество секунд, прошедших с 0 часов 1 января 1970 года.

и

Данные типов color и datetime представляются в виде целых чисел. Целые типы вместе с типами с плавающей точкой называются арифметическими (числовыми) типами.

А если нет, то как выйти из этого положения.

Хотя, спасибо за подсказку на счет формата чисел. Есть направление поиска. Если всеже есть готовое решение буду благодарен

さて、先のコメントでは、アラートでエラーが表示されました。

ヘルプには「Note: When testing, the last known server time is simulated.」とありますが、シミュレーションされていない場合はヘルプエディタにすべての質問をします。

チェックし、エラーを発見し...。

論理の更なる方向性が分からない以上、解答はあなたにしか分からないのです。

なぜこんなに文字が多いのか理解できません。

StartDateTime=TimeCurrent()-History*Period()*60とする。

もっと簡単な方法でできることがあるのに?

 
costy_ >>:

Готовое решение знаете только Вы, так как дальнейшее направление логики нам не известно.

データフォーマットの非互換性です!」前回の回答に完全に同意します。既製品の要望は、フォーマット変換の問題を解決することに尽きます。しかし、明らかにMQL4にはそのようなオプションはありません。例えば、今日は1年の43日目、つまり日足では年初から43本目のバーです。例えば、60本のバーでExpert Advisorを最適化したいとします。つまり、365-(60-43)=348日目(バー)から作業を開始する必要があります。つまり、TimeDayOfYear(TimeCurrent()) を取るべきでしょう。(intです!)そして348と比較します。もちろん、1年間(昨年)の価値も考慮しなければなりません。全体としては、これでいいんだと思います。あとは実行するだけです。小さなTFでは、(例えば5分足で)前時間、あるいは前日を超えるような多数のバーをテストしなければならない場合、より困難になります。

 

問題文に問題があるのだから、他の人にもわかるようにしろ!正直、何時からテストする必要があるのかわからなかった......。

必要であれば、60本バーから始めてください。

int startTime = iTime(NULL,PERIOD_D1, N); // N - 日足タイムフレームの現在の時点からのバーの数。