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

 
keekkenen >>:

боюсь эта конструкция if(Time[0]>iTime(0,1440,60)) всегда будет возвращать истину, т.к. это iTime(0,1440,60) значение будет на 60 баров левее, чем Time[0]..

что показывает тест ?




問題文:あるEAを持っていて、例えばstrategy testerで最後の 40本のバー(スレッド参照)上で 最適化したいのです。

if(Time[0]>iTime(0,1440,60))

時間(シミュレーション)が日足で60本目の始値より長くなったら、関数を実行するのはどうしたことだ!?

 
EAがテストを開始する時刻をあらかじめ定義しておく必要があります。
終了するタイミングがわかっているのであれば、次のようにしてください。

仮にテスト終了 2010.02.10 0:00


以下のコードからスクリプトを作成します。

#property show_inputs
// время окончания тестировани						
extern string 		endTestTime 		= "2010.02.10 0:00";
// название пары
extern string		symbolTest			= "";
// период на котором ищем нужное время по номеру testBarCount бара относительно времени endTestTime
extern int 			periodTest		   = 0;
// количество баров в прошлое относительно времени endTestTime
extern int 			testBarCount 		= 60;

int init(){
	if ( symbolTest == "") symbolTest = Symbol();
	// искомое время
	Print(TimeToStr(iTime( symbolTest, periodTest,	iBarShift( symbolTest, periodTest,StrToTime( endTestTime)) + testBarCount)));
}
 

このスクリプトは、EAをテストしたい時間を見つけることができます...

EAでいくつかの変数を設定する

extern string startTime = "";
extern string endTime = "";

int StartTime = StrToTime( startTime), EndTime = StrToTime( endTime);

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
 

このスクリプトは、EAをテストしたい時間を見つけることができます...

EAでいくつかの変数を設定する

extern string startTime = "";
extern string endTime = "";

int StartTime = StrToTime( startTime), EndTime = StrToTime( endTime);

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
startTimeにはスクリプトで取得した時間が記録され、endTimeにはスクリプトの変数endTestTimeに入力された時間が記録される...。
 
costy_ >>:

Постановка задачи: имеется советник, есть желание его оптимизировать на последних, например, 40-ка барах (60 см. ветку)в тестере стратегий.

if(Time[0]>iTime(0,1440,60))

если время(моделируемое) стало больше времени открытия 60-го бара на дневке тогда выполнить функцию что не так?!

そのため、60気圧も変調された0気圧に対して変調されています。

 

タスクステートメント:EAを持っていて、例えばストラテジーテスターの 過去 40本のバーについて現在の時間に対して 最適化したいのです。この40本のバーは、1時間足、4時間足、日足、その他の時間枠で表示することができます。ストラテジーテスターの動作:動作する時間間隔がテスターパネルに表示されます。このような動作時間の設定方法は、上記の課題である「40気圧の試験」を満たすものではありません。テスト時間を定義するのがテスターではなく(その能力が満たされていない)、コードそのもの であるようにExpert Advisorを変更する必要があるということです。

テスターでは、N小節前の時刻が現在の時刻となるため、この提案はうまくいきません。


T.K.さん

現在時刻に対して、指定したバーを開く時刻(逆方向)を、現在時刻から計算します。I.e.アゲインでは解決しない。テスターの現在時刻からではなく今日の(瞬間的な) バーからN本戻るはずです


うまくいったかな。

 
keekkenen >>:
допустим тестирование заканчивается 2010.02.10 0:00


делаем скрипт из кода ниже

スクリプトは良いのですが、しかし!!このスクリプトは時間値を与え、その後テスターパネルで「スコアリング」する必要があります。これはまずいな...。しかし、小さなTFと少量のバロでは、テスターでは日付しか表示されないため、テスターでは「得点」できないような時間を表示することになります。テストは開始日の00:00から終了日の00:00まで実施されます。特に分単位での時間指定は不可能です!!!!

 

理由は簡単で、テスターは自分の時間の中で生きているが、我々と実際の見積もりは別の時間の中で生きており、これらの時間空間は我々の想像の中だけで重なり合っているからだ...。


テスターで正確な時刻を設定できないのはいいとして、開始時刻の前に現在の日の始まりや日を入れるのは、もうコスト的に...。


このコードでは、最適化開始時間(パラメータで設定した時間)の前と最適化終了時間の後に余分な時間をカットします。

if (Time[0] < StartTime || Time[0] > EndTime) return(0);
 

先日からオフセット60のバーだけを描画し始めたind.の図を見てください。以下はコードの一部です。お勧めのものは試されましたか?試してみれば、きっとわかる。

int start()  {
double stoch1, stoch2;
   int pos = Bars-IndicatorCounted() ;  
//----

if(Time[0]>iTime(0,1440,60)) 
   for(int b=0; b<= pos; b++)
   {    
 
keekkenen >>:

этот кусок кода будет отсекать лишнее время до требуемого времени начала оптимизации (то что мы задаем в параметрах) и после времени окончания оптимизации..

私の理解では、EAがスクリプトにデータを取りに行くので、バーバックはスクリプトで設定するはずです。

И!申し訳ありませんが、スクリプトの全コードを掲載していただけませんか?恥ずかしながら、私はMQLを始めて1年半、一度もスクリプトを書いたことがありません。