市場が閉まっているかどうかを調べるには?(mql4) - ページ 2

 
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です。
 

IsTradeAllowed

Expert Advisorで取引する機能に関する情報を返します。

boolIsTradeAllowed()。

この呼び出しの2番目の形式は、指定されたシンボルの指定された時刻の取引能力に関する情報を返します。

boolIsTradeAllowed()
const string symbol// シンボル
datetimetested_time// 時刻
);

パラメータ

記号

[イン]記号。

テスト時間

[中] 時間

戻り値

EAが取引を許可され、スレッドが空いている場合はtrueを、そうでない場合はfalseを返します。

 
if(SymbolInfoInteger(NULL,SYMBOL_TIME)>60) return(0);
 
Kino:
もちろん、ありがとうございますが、それは彼らが1つの場所の目を通って取得するために言うようなものだ)私も5.0サーバーでユーロに一時停止を置くことができますそれを許可しますし、各タイマーサイクルで一時停止を変更しようとすると、エラー132 その後市場は、通常の場合、貿易があるが、取引時にサーバーが殺到している、私は人間的に問題を解決したい、しない "ループ "を通じて、これは、開発者がMKである。
取引許可要求が必要。私の例では、マーケットクローズから3時間の時差があり、マーケットクローズ3時間前は、ほぼ横ばいなので、この要望はないです。だから、そこでは違う方法で、ポーズを入れつつも、もっと小さな間隔でやったんです。
 
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());
      }
   }

  }
//+------------------------------------------------------------------+
 

これはかなり有効

//+------------------------------------------------------------------+
//|                                                         тест.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);
  }
 
sergey1294:

これはかなり有効

ありがとうございます、試してみます。
 
Kino:
ヒントをありがとう、しかし、市場が開いているとき、それは注文で動作するように可能性を決定しようとすることは正しくありませんが、それが動作します。

私としては、次のように考えています。

現在のシンボルで取引する必要がある場合、市場が開いていることを示す間接的なサインは、新しいティックの到着です。したがって、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関数に移す)こともできますが、まだテストしていないので、そのことは申し上げません。

SymbolInfoSessionTrade - Документация на MQL4
  • docs.mql4.com
SymbolInfoSessionTrade - Документация на MQL4