PDA

View Full Version : StrToTime関数



Yume Ichigo
05-11-2009 21:08, 09:08 PM
Theを使用すると、Metatraderはブローカの時刻ではなくローカル(コンピュータ)時刻を使用しているようです。

誰でもこれを確認できますか?

Satoru
07-01-2021 15:37, 03:37 PM
StrToTime関数を使用すると、Metatraderはブローカの時刻ではなくローカル(コンピュータ)時刻を使用しているようです。誰でもこれを確認できますか?
そのとおりです。あなたの文字列が時間だけを提供するものの、日付がない場合は、コンピュータのシステム時計に設定された日付が入力されます。

Yume Ichigo
07-01-2021 16:58, 04:58 PM
どのようにすれば私はブローカーの時間を得るのですか?

Satoru
07-01-2021 18:18, 06:18 PM
どのようにすれば私はブローカーの時間を得るのですか?
使用時間Current()日付時刻Time Current()最新の既知のサーバー時刻(最新の見積もり時刻)を返します。

Yume Ichigo
07-01-2021 19:39, 07:39 PM
私が意味するものではありません。あなたは私のTradingTimeコードのいくつかがその文字列関数を使用していることを知っています。私は、取引時間を分単位で設定するのが最善の方法を理解しようとしています。

NOBURU
07-01-2021 21:00, 09:00 PM
私が意味するものではありません。あなたは私のTradingTimeコードのいくつかがその文字列関数を使用していることを知っています。私は、取引時間を分単位で設定するのが最善の方法を理解しようとしています。
漠然としている。あなたがしたいことのいくつかのコードを投稿することができれば最高です。私は数年前にこの文字列を時間変換問題に遭遇しました。

Yume Ichigo
07-01-2021 22:21, 10:21 PM
挿入されたコード文字列TradingTimes =取引時間外; if(TimeCurrent()gt; StrToTime(10:00)TimeCurrent()lt; StoToTime(20:00))TradingTimes =トレーディングタイムの内部。 StrToTime関数はブローカー時間とは対照的にローカルコンピューター時間を使用しているようですので、時にはこの取引時間の問題が正しく機能しないことがあります。トレーディングレンジの分をどのようにドリルダウンすることができますか?

NOBURU
07-01-2021 23:42, 11:42 PM
ああ..あなたが望むのは、EAが特定の時間枠内でのみ取引する簡単な方法です。しかし、あなたの問題に答える。私はこのような何かをする:int TimeShift = TimeCurrent() - TimeLocal(); (TimeCurrent() - TimeShift gt; StrToTime(10:00)TimeCurrent() - TimeShift lt; StrToTime(20:00))。私のメソッドを提供するために、私は単にTimeCurrent()の代わりにTimeLocal()を使用します。このように、コードはブローカーに依存しません:if(TimeLocal()gt; StrToTime(10:00)TimeLocal()lt; StrToTime(20:00))TradingTimes = Inside Trading Time;

NOBURU
07-02-2021 01:02, 01:02 AM
しかし、実際にTimeCurrent()を使用することを強くお勧めする場合、私はこれに適したものをお勧めします:if(TimeCurrent()gt; StrToTime(TimeToStr(TimeCurrent()、TIME_DATE) 10:00)TimeCurrent()lt; StrToTime(TimeToStr ()、TIME_DATE) 20:00))TradingTimes =トレーディングタイムの内部;これにより、StrToTimeに時間を変換する有効な日付が含まれるようになります。

Satoru
07-02-2021 02:23, 02:23 AM
これはどう?挿入されたコード// --------------------------------------------- --------------------- /| test.mq4 |/| Copyright©2009、MetaQuotes Software Corp. |/| http://www.metaquotes.net |/ ----------------------------------------------- ------------------- #property copyright Copyright©2009、MetaQuotes Software Corp. #property link http://www.metaquotes.net/入力の変更に注意してくださいタイプextern int StartHour = 0; extern int StartMinute = 30; extern int EndHour = 3; extern int EndMinute = 30; int init(){start();コードにスニペットを実装するときにこれを削除します。 return(0); }/ ---------------------------------------------- -------------------- /|カスタムインジケータ反復関数|/ ----------------------------------------------- ------------------- int start(){//終了時間シフトの検索int endTimeShift = 0; bool EndTimeFound = false; (Time#91; EndTimeShift#93;)== EndHour TimeMinute(時間#91; EndTimeShift#93;)==あなたは、 EndMinute){EndTimeFound = true; } else {EndTimeShift ; }}/終了時刻の前に最新の開始時刻を見つけるint StartTimeShift = EndTimeShift; bool StartTimeFound = False; startTimeFound = true; StartTimeFound = true; StartTimeFound = true; StartTimeFound = true; StartTimeFound = true; StartTimeFound = true; StartTimeFound = true; } else {StartTimeShift ; }}コメント(StartTimeShift: StartTimeShift nEndTimeShift: EndTimeShift); }これを使用するには、分値は時間枠が提供できるものでなければなりません。つまり、分を30に設定した場合、これを時間別のグラフに添付します。時系列チャートのすべてのキャンドルは分値として0しかないので、無限ループに陥ることになります。おそらく、この制限を回避する方法を考え出すことができます。幸運の最高。禅について

NOBURU
07-02-2021 03:44, 03:44 AM
真夜中を過ぎた範囲を使用している人はどうですか?
挿入されたコードstringTimeStart = 22:00;/10PM stringTimeEnd = 10:00;/次の日の午前10時stringBrokerDate; int_TimeStart、_TimeEnd;/TimeCurrent()gt; _TimeEnd){//最初にこれが常に真となり、BrokerDateが有効であることを確認する//なぜこれを行うのか? BrokerDateと_TimeEndがmouseレースで終了しないようにするBrokerDate = TimeToStr(TimeCurrent()、TIME_DATE); } _TimeStart = StrToTime(BrokerDate TimeStart); _TimeEnd = StrToTime(BrokerDate TimeEnd); if(_TimeStart gt; _TimeEnd){_TimeEnd = _TimeEnd 86400;/add 1 day}/TimeCurrent()と比較するために_TimeStartと_TimeEndを自由に使用するこのコードはEAScript用に書かれています。これを使用する場所によっては、効果が異なる場合があります。

Yume Ichigo
07-02-2021 05:05, 05:05 AM
うわーハノーヴァー!コードブロックのためにありがとうございました。私は疑問に思っていますが、変数dt0は初期化以外の場所では使用されていません。だから、あなたは深夜までどのように働いていますか?範囲の開始が昨日23:00、範囲の最後が今日3:00になるようにしたいとしましょう。このコードブロックはどのように機能しますか?私は大胆にスニペットを追加して、私がしようとしていることを達成しようとしました。挿入されたコード:::::::extern string StartTime = 07:00;/価格設定ウィンドウの開始時間extern string EndTime = 08:00;/価格設定ウィンドウの終了時間extern string ExpiryTime = 06:00;/保留中の注文が期限切れになり、まだ開いている注文が閉じられた時刻extern intクリアランス= 5;/エントリープライスの「安全」許容値をウィンドウの高さより高くし、ウィンドウの高さを低くするextern double MinWinHgt = 0;/価格ウィンドウ(クリアランスを含む)lt;この値では、今日の注文配置は許可されていません。extern double MaxWinHgt = 9999;/価格ウィンドウ(クリアランスを含む)gt;この値は、今日の注文の配置は許可されていません:::::::int start(){double dt0 = StrToTime(TimeToStr(TimeCurrent()、TIME_DATE) 00:00:00);ダブルdt1 = StrToTime(TimeToStr(TimeCurrent()、TIME_DATE) StartTime :00);ダブルdt2 = StrToTime(TimeToStr(TimeCurrent()、TIME_DATE) EndTime :00);ダブルdt3 = StrToTime(TimeToStr(TimeCurrent()、TIME_DATE) ExpiryTime :00); if(dt3 lt; dt2)dt3 = 86400; #91; b#93; if(dt1 gt; dt2)dt1 = StrToTime(TimeToStr(TimeCurrent() - 86400、TIME_DATE) StartTime :00);#91;b#93;/StartTimeが同じ日のEndTimeより大きい場合、コードは意図した開始時刻が86400秒早かったとみなします。 int ib1 = iBarShift(NULL、0、dt1); int ib2 = iBarShift(NULL、0、dt2); if(TimeCurrent()gt; = dt2 TimeCurrent()lt; = dt3){double vHigh = 0、vLow = 999; (vjigh、High#91; j#93; Clearance * pnt); for(int j = ib1; jgt; ib2; j--); vHigh = MathMax vLow = MathMin(vLow、Low#91; j#93; -Clearance * pnt); } if(vHigh-vLow lt; = MaxWinHgt * pnt vHigh-vLow gt; = MinWinHgt * pnt){:::::::

優花花澄
07-02-2021 06:25, 06:25 AM
数か月前にクライアント用に書いたボックスブレークアウトEAのコード断片です:挿入されたコード:::::::extern string StartTime = 07:00;/価格設定ウィンドウの開始時間extern string EndTime = 08:00;/価格設定ウィンドウの終了時間extern string ExpiryTime = 06:00;/保留中の注文が期限切れになり、まだ開いている注文が閉じられた時刻extern intクリアランス= 5;/エントリープライスの「安全」許容値をウィンドウの高さより高くし、ウィンドウの高さを低くするextern double MinWinHgt = 0;/価格ウィンドウ(クリアランスを含む)lt;この値では、今日の注文配置は許可されていません。extern double MaxWinHgt = 9999;/価格ウィンドウ(クリアランスを含む)gt;この値は、今日の注文の配置は許可されていません:::::::int start(){double dt0 = StrToTime(TimeToStr(TimeCurrent()、TIME_DATE) 00:00:00);ダブルdt1 = StrToTime(TimeToStr(TimeCurrent()、TIME_DATE) StartTime :00);ダブルdt2 = StrToTime(TimeToStr(TimeCurrent()、TIME_DATE) EndTime :00);ダブルdt3 = StrToTime(TimeToStr(TimeCurrent()、TIME_DATE) ExpiryTime :00); if(dt3 lt; dt2)dt3 = 86400; int ib1 = iBarShift(NULL、0、dt1); int ib2 = iBarShift(NULL、0、dt2); if(TimeCurrent()gt; = dt2 TimeCurrent()lt; = dt3){double vHigh = 0、vLow = 999; (vjigh、High#91; j#93; Clearance * pnt); for(int j = ib1; jgt; ib2; j--); vHigh = MathMax vLow = MathMin(vLow、Low#91; j#93; -Clearance * pnt); } dt0は現在の午前0時(MT4時間)、dt1は現在の日の午前0時(MT4時間)、dt1は現在の午前0時(MT4時間) )は、ブレークアウトボックスの終了時間(MT4時間)dt3は、有効時間(MT4時間)dt2(ブレークアウトボックスの終わり)とdt3(指定された有効時間)の間にのみ、 。したがって、必要に応じてdt2に86400(24時間の秒数)を追加して、dt2より大きい(Ragnakoreの場合と同じように)。次に、TimeCurrent()がdt2とdt3の間にある場合にのみ、EAは注文を出します。 (vHighおよびvLowは、ブレークアウトボックスで達成される最高および最低価格であり、指定されたユーザー提供のクリアランスを加えたものです)。お役に立てれば。