市場が閉まっているかどうかを調べるには?(mql4) - ページ 2 123456789 新しいコメント 削除済み 2015.01.31 23:24 #11 Alexey:int Weekday = TimeDayOfWeek(TimeLocal()); //Локальное время |int Weekdays = TimeDayOfWeek(TimeCurrent()); //Серверное время |while(IsExpertEnabled()) //До тех пор пока запушенно | { if(Weekday!=0||Weekday!=6){Exp=true;if(Weekday==1){Info(4,Weekday,0);}} //Если не Сбб. Воск. то разрешено | if(Weekdays==0||Weekdays==6) //Если Сбб. Воск. то не разрешено | { Exp=false;Info(5,Weekdays,0); if(Weekdays==6){Sleep(86400000);} //Если суббота пауза 24 часа | if(Weekdays==0){Sleep(3600000);} //Если воскресение пауза 1 час | } ポーズやループを通して、おおよそこのように解決しましたが、ターミナルのバージョンが更新される前の古いコードです。今はもっと簡単な方法がありますから、ちょっと文献を読んでみてください。 もちろん、ありがとうございますが、それは彼らが言うように、1つの場所の目を通って登る)私も5.0サーバーでユーロに一時停止を置くことができます私はそれを行うことができますし、すべてのタイマーサイクルで一時停止を変更しようとすると、エラー132は、市場は、通常の場合は、貿易があるが、取引時にこのサーバーが殺到し、私は人間的に問題を解決したい、しない "ループ "を通じて、それが開発者までですMKです。 Aleksandr Shifanov 2015.01.31 23:24 #12 IsTradeAllowed Expert Advisorで取引する機能に関する情報を返します。 boolIsTradeAllowed()。 この呼び出しの2番目の形式は、指定されたシンボルの指定された時刻の取引能力に関する情報を返します。 boolIsTradeAllowed()const string symbol// シンボルdatetimetested_time// 時刻); パラメータ 記号 [イン]記号。 テスト時間 [中] 時間 戻り値 EAが取引を許可され、スレッドが空いている場合はtrueを、そうでない場合はfalseを返します。 Aleksandr Shifanov 2015.01.31 23:34 #13 if(SymbolInfoInteger(NULL,SYMBOL_TIME)>60) return(0); Alexey Busygin 2015.01.31 23:35 #14 Kino: もちろん、ありがとうございますが、それは彼らが1つの場所の目を通って取得するために言うようなものだ)私も5.0サーバーでユーロに一時停止を置くことができますそれを許可しますし、各タイマーサイクルで一時停止を変更しようとすると、エラー132 その後市場は、通常の場合、貿易があるが、取引時にサーバーが殺到している、私は人間的に問題を解決したい、しない "ループ "を通じて、これは、開発者がMKである。 取引許可要求が必要。私の例では、マーケットクローズから3時間の時差があり、マーケットクローズ3時間前は、ほぼ横ばいなので、この要望はないです。だから、そこでは違う方法で、ポーズを入れつつも、もっと小さな間隔でやったんです。 削除済み 2015.01.31 23:47 #15 offfline:IsTradeAllowed Expert Advisorで取引する機能に関する情報を返します。 boolIsTradeAllowed()。 この呼び出しの2番目の形式は、指定されたシンボルの指定された時刻の取引能力に関する情報を返します。 boolIsTradeAllowed()const string symbol// シンボルdatetimetested_time// 時刻); パラメータ 記号 [イン]記号。 テスト時間 [中] 時間 戻り値 EAが取引を許可され、取引を 実行するスレッドが空いている場合はtrueを、そうでない場合はfalseを返します。アレクサンダー、あなたは間違っている)//+------------------------------------------------------------------+ //| test.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetTimer(1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- if (IsTradeAllowed() == True) Print("---- Ура торгуем -----"); { int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,0,0,"My order",16384,0,clrGreen); { if (ticket <0) Print("---- Уже не торгуем -----",GetLastError()); } } } //+------------------------------------------------------------------+ Sergey Gritsay 2015.02.01 04:14 #16 これはかなり有効//+------------------------------------------------------------------+ //| тест.mq4 | //| Sergey Gritcay | //| sergey1294@list.ru | //+------------------------------------------------------------------+ #property copyright "Sergey Gritcay" #property link "sergey1294@list.ru" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- create timer EventSetTimer(1); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- if(isNewTime()) { Print("---- Ура торгуем -----"); int ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,0,0,"My order",16384,0,clrGreen); { if(ticket<0) Print("---- Уже не торгуем -----",GetLastError()); } } else Print("---- функция isNewTime() = false, возможно торговля закрыта "); } //+------------------------------------------------------------------+ bool isNewTime() { //--- в статической переменной будем помнить время static datetime last_time=0; //--- текущее время datetime time=TimeCurrent(); //--- если это первый вызов функции if(last_time==0) { //--- установим время и выйдем last_time=time; return(false); } //--- если время отличается if(last_time!=time) { //--- запомним время и вернем true last_time=time; return(true); } //--- дошли до этого места - значит время сервера не обновилось, вернем false return(false); } 削除済み 2015.02.01 07:55 #17 sergey1294:これはかなり有効 ありがとうございます、試してみます。 Ihor Herasko 2015.02.01 14:48 #18 Kino: ヒントをありがとう、しかし、市場が開いているとき、それは注文で動作するように可能性を決定しようとすることは正しくありませんが、それが動作します。私としては、次のように考えています。 現在のシンボルで取引する必要がある場合、市場が開いていることを示す間接的なサインは、新しいティックの到着です。したがって、OnTickイベントだけで十分であり、この問題は解決されます。 現在のシンボル以外のシンボルを扱う必要がある場合、現在のシンボルで取引が開始されても、他のシンボルで取引が執行されることは保証されません。例えば、エキスパートアドバイザーがEURUSDで実行され、時間は09:00 UTCであり、13:00 UTCにしか市場が開かない米国株を取引したいとします。ですから、OnTickは役に立ちません。一定の間隔でサーバーに注文を送ろうとすることを通して、他のシンボルによってマーケットが開くかどうかを判断する必要があるのです。1分間に1回のオーダー送信は、決してサーバーを攻撃しているわけではなく、ごく普通の方法です。何がいけないんですか? Alexandr Gavrilin 2015.02.21 04:45 #19 この曜日の問題については、以前サービスデスクに言われたように、ノーティック・ノートレードです。というような解決策を提案してくれました。 TimeDayOfWeek(TimeLocal());ただし、曜日と終日が 同じとは限らないので、完全に正しいとは言えません。 Sergey Eremin 2015.02.21 08:43 #20 最近のプロジェクトでは、任意のシンボルでの取引が開始され、利用可能であるという事実を検出することが課題でした。 重要なのは、他のプロジェクトで何度もやってしまったことだが、「無理に注文をつけない」ということだ。正直なところ、今のところ、この方法が一番簡単で確実なように思います。 今のところ、最適な方法を見つけることができました(ただし、まだ模索中です。) 1) 「対面」での取引が許可されているかどうかを判断する - IsTradeAllowed() 関数の第二形態 (上記で述べた)。そうでない場合は、許可されません :) 2) SymbolInfoInteger(<symbol>, SYMBOL_TIME)を使って最後の気配値の時刻と取引セッションの時刻を比較し(SymbolInfoSessionTrade())、気配値の時刻がセッション範囲のいずれかに入っていれば、取引が許可される。 3) 気配の時刻があまりに「古くない」かをチェックする:もしxx分以上前なら(SymbolInfoInteger(<symbol>, SYMBOL_TIME) と TimeCurrent() を比較)、その気配は古く、したがってそれによって取引できないと考える(私が正しければ、それは3分程度である)。 この方法の欠点は、ティックが通過する一方で、シンボルの取引が不可能な状態が発生する可能性があることです。 開発したのはあるブローカーで、テスト中にそのようなモードに切り替えてしまったのです。私はまだこの変種を克服できていません。実際の取引で遭遇したことはないと言ってよいでしょう。ですから、「通常」の条件下では、このソリューションは許容範囲内と思われます。しかし、私はまだそれを探しているところです :)追伸:ステップ1と2を組み合わせる(SymbolInfoInteger(<symbol>, SYMBOL_TIME)をIsTradeAllowed関数に移す)こともできますが、まだテストしていないので、そのことは申し上げません。 SymbolInfoSessionTrade - Документация на MQL4 docs.mql4.com SymbolInfoSessionTrade - Документация на MQL4 123456789 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
int Weekday = TimeDayOfWeek(TimeLocal()); //Локальное время |
int Weekdays = TimeDayOfWeek(TimeCurrent()); //Серверное время |
while(IsExpertEnabled()) //До тех пор пока запушенно |
{if(Weekday!=0||Weekday!=6){Exp=true;if(Weekday==1){Info(4,Weekday,0);}} //Если не Сбб. Воск. то разрешено |
if(Weekdays==0||Weekdays==6) //Если Сбб. Воск. то не разрешено |
{
Exp=false;Info(5,Weekdays,0);
if(Weekdays==6){Sleep(86400000);} //Если суббота пауза 24 часа |
if(Weekdays==0){Sleep(3600000);} //Если воскресение пауза 1 час |
}
IsTradeAllowed
Expert Advisorで取引する機能に関する情報を返します。
boolIsTradeAllowed()。
この呼び出しの2番目の形式は、指定されたシンボルの指定された時刻の取引能力に関する情報を返します。
boolIsTradeAllowed()
const string symbol// シンボル
datetimetested_time// 時刻
);
パラメータ
記号
[イン]記号。
テスト時間
[中] 時間
戻り値
EAが取引を許可され、スレッドが空いている場合はtrueを、そうでない場合はfalseを返します。
もちろん、ありがとうございますが、それは彼らが1つの場所の目を通って取得するために言うようなものだ)私も5.0サーバーでユーロに一時停止を置くことができますそれを許可しますし、各タイマーサイクルで一時停止を変更しようとすると、エラー132 その後市場は、通常の場合、貿易があるが、取引時にサーバーが殺到している、私は人間的に問題を解決したい、しない "ループ "を通じて、これは、開発者がMKである。
IsTradeAllowed
Expert Advisorで取引する機能に関する情報を返します。
boolIsTradeAllowed()。
この呼び出しの2番目の形式は、指定されたシンボルの指定された時刻の取引能力に関する情報を返します。
boolIsTradeAllowed()
const string symbol// シンボル
datetimetested_time// 時刻
);
パラメータ
記号
[イン]記号。
テスト時間
[中] 時間
戻り値
EAが取引を許可され、取引を 実行するスレッドが空いている場合はtrueを、そうでない場合はfalseを返します。
アレクサンダー、あなたは間違っている)
これはかなり有効
これはかなり有効
ヒントをありがとう、しかし、市場が開いているとき、それは注文で動作するように可能性を決定しようとすることは正しくありませんが、それが動作します。
私としては、次のように考えています。
現在のシンボルで取引する必要がある場合、市場が開いていることを示す間接的なサインは、新しいティックの到着です。したがって、OnTickイベントだけで十分であり、この問題は解決されます。
現在のシンボル以外のシンボルを扱う必要がある場合、現在のシンボルで取引が開始されても、他のシンボルで取引が執行されることは保証されません。例えば、エキスパートアドバイザーがEURUSDで実行され、時間は09:00 UTCであり、13:00 UTCにしか市場が開かない米国株を取引したいとします。ですから、OnTickは役に立ちません。一定の間隔でサーバーに注文を送ろうとすることを通して、他のシンボルによってマーケットが開くかどうかを判断する必要があるのです。1分間に1回のオーダー送信は、決してサーバーを攻撃しているわけではなく、ごく普通の方法です。何がいけないんですか?
この曜日の問題については、以前サービスデスクに言われたように、ノーティック・ノートレードです。
というような解決策を提案してくれました。
TimeDayOfWeek(TimeLocal());
ただし、曜日と終日が 同じとは限らないので、完全に正しいとは言えません。
重要なのは、他のプロジェクトで何度もやってしまったことだが、「無理に注文をつけない」ということだ。正直なところ、今のところ、この方法が一番簡単で確実なように思います。
今のところ、最適な方法を見つけることができました(ただし、まだ模索中です。)
1) 「対面」での取引が許可されているかどうかを判断する - IsTradeAllowed() 関数の第二形態 (上記で述べた)。そうでない場合は、許可されません :)
2) SymbolInfoInteger(<symbol>, SYMBOL_TIME)を使って最後の気配値の時刻と取引セッションの時刻を比較し(SymbolInfoSessionTrade())、気配値の時刻がセッション範囲のいずれかに入っていれば、取引が許可される。
3) 気配の時刻があまりに「古くない」かをチェックする:もしxx分以上前なら(SymbolInfoInteger(<symbol>, SYMBOL_TIME) と TimeCurrent() を比較)、その気配は古く、したがってそれによって取引できないと考える(私が正しければ、それは3分程度である)。
この方法の欠点は、ティックが通過する一方で、シンボルの取引が不可能な状態が発生する可能性があることです。
開発したのはあるブローカーで、テスト中にそのようなモードに切り替えてしまったのです。私はまだこの変種を克服できていません。
実際の取引で遭遇したことはないと言ってよいでしょう。ですから、「通常」の条件下では、このソリューションは許容範囲内と思われます。しかし、私はまだそれを探しているところです :)
追伸:ステップ1と2を組み合わせる(SymbolInfoInteger(<symbol>, SYMBOL_TIME)をIsTradeAllowed関数に移す)こともできますが、まだテストしていないので、そのことは申し上げません。