正しくは、ブローカーごとに(それぞれ規定がある)異なるキャラクターのコードを作るのは不便なので、上記のどれでもありません。
以下のように一義的に定義されています。
1.あらゆる取引 操作が行われる。
2.操作に対する返答として、エラーコード132(ERR_MARKET_CLOSED)が返ってくる。
さらに、相場の始まりに乗り遅れないように、ある程度の周期で売買を繰り返すことも可能です。
例えば、多くのシンボルを扱うあるExpert Advisorでこんなものを作ってみました。
bool DoTrade(ENUM_TRADE_TYPE tradeType, TradeParam &tradeParam) { // Проверка возможности проведения торговой операции по символу if (!IsSymbolTradeAllowed(tradeParam.symbol)) return false; bool res = true; int ticket = 0; switch (tradeType) { case TRADE_TYPE_DELETE: res = OrderDelete(tradeParam.orderTicket); break; case TRADE_TYPE_CLOSE: res = OrderClose(tradeParam.orderTicket, tradeParam.orderVolume, tradeParam.orderCP, i_slippage); break; case TRADE_TYPE_CLOSEBY: res = OrderCloseBy(tradeParam.orderTicket, tradeParam.orderTicketCounter); break; case TRADE_TYPE_MODIFY: res = OrderModify(tradeParam.orderTicket, tradeParam.orderOP, tradeParam.orderSL, tradeParam.orderTP, 0); break; case TRADE_TYPE_OPEN: { tradeParam.orderTicket = OrderSend(tradeParam.symbol, tradeParam.orderType, tradeParam.orderVolume, tradeParam.orderOP, i_slippage, tradeParam.orderSL, tradeParam.orderTP, "", tradeParam.orderMN); res = (tradeParam.orderTicket > 0); break; } } int error = GetLastError(); if (!res) { ... // обработка других ошибок if (error == ERR_MARKET_CLOSED || error == ERR_OFF_QUOTES) AddSymbolToMarketClosedList(tradeParam.symbol); } return res; }
シンボルで取引可能かどうかを確認する機能です。
bool IsSymbolTradeAllowed(string symbol) { if (SymbolInfoInteger(symbol, SYMBOL_TRADE_MODE) != SYMBOL_TRADE_MODE_FULL) { Alert(WindowExpertName(), ": невозможно совершить торговую операцию по символу ", symbol, ", т. к. по нему торговля запрещена!"); AddSymbolToMarketClosedList(symbol, true); return false; } for (int i = g_marketSymbolsCnt - 1; i >= 0; i--) if (g_marketClosedSymbols[i].symbol == symbol) return (TimeCurrent() - g_marketClosedSymbols[i].lastRequest) > 60; return true; }
取引できないシンボルを記録するための機能。
void AddSymbolToMarketClosedList(string symbol, bool isStopTrade = false) { datetime time = TimeCurrent(); if (isStopTrade) time = StringToTime("3000.01.01"); for (int i = g_marketSymbolsCnt - 1; i >= 0; i--) if (g_marketClosedSymbols[i].symbol == symbol) { g_marketClosedSymbols[i].lastRequest = time; return; } if (g_marketSymbolsCnt >= MAX_SYMBOLS_AMOUNT) return; g_marketClosedSymbols[g_marketSymbolsCnt].symbol = symbol; g_marketClosedSymbols[g_marketSymbolsCnt].lastRequest = time; g_marketSymbolsCnt++; }
簡単に推測できるように、配列g_marketClosedSymbolsは構造体の配列です。
Expert Advisor を OnTimer() モードに切り替えたところ、マーケットが閉じているのに理解できずに取引しようとし、一般的にはサーバーに連絡して、もちろんエラーを受け取り、ログを詰まらせることになりました。GetLastError() = 市場が閉鎖されました。その他に、休場日や休場市場を確認する条件として、どのようなことが実施できるのでしょうか。
ダニが来ない
サーバーの時刻は変わりません
if (DayOfWeek()==0 || DayOfWeek()==6) カンプタイム +/- サーバータイムによる
エラーが発生した場合は、必ず週末に
input int Timer_Sleep_After = 3600; // Если тиков нет уже час, знач рынок закрыт datetime gt_Last_Tick_Time = 0; void OnTimer() { if(TimeLocal() - gt_Last_Tick_Time > Timer_Sleep_After) return; } void OnTick() { gt_Last_Tick_Time = TimeLocal(); }
正しければ、上記のどれでもない。異なる文字に対して、各ブローカー(それぞれ規定がある)のコードを作るのは不便だからだ。
以下のように一義的に定義されています。
1.あらゆる取引 操作が行われる。
2.操作に対する返答として、エラーコード132(ERR_MARKET_CLOSED)が返ってくる。
さらに、相場の始まりに乗り遅れないように、ある程度の周期で売買を繰り返すことも可能です。
例えば、多くのシンボルを扱うあるExpert Advisorでこんなものを作ってみました。
シンボルで取引可能かどうかを確認する機能です。
取引できないシンボルを記録するための機能。
簡単に推測できるように、配列g_marketClosedSymbolsは構造体の配列です。
では、MKの開発者に質問ですが、なぜ絶対に動作しないイベントを作るのでしょうか?https://docs.mql4.com/ru/dateandtime/dayofweek
if(DayOfWeek()==0 ||DayOfWeek()==6)return(0);
もし私が ticks を使っている場合、ticks は存在せず、イベントは発生しません。もし私が timer を使っている場合、サーバーは最後のニックの到着時間、すなわち最後の金曜日の分を私に与え、イベントも発生しません。私はタイマーにEAを持っていて、サーバーは以前のようにティックで動作していることが判明しましたが、リクエストを送信するとエラー132が表示されるので、サーバーはオンラインです。サーバーがタイマーで時間を変更するか、取引注文を送らなくても市場が閉じているかどうか確認できるので、直してほしいです。これは猛烈なバグだ、理解と解決策を希望する。
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 час |
}
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
Expert Advisor を OnTimer() モードに切り替えたところ、マーケットが閉じて いるのに理解できずに取引しようとし、一般的にはサーバーに連絡して、もちろんエラーを受け取り、ログを詰まらせることになりました。GetLastError() = 市場が閉鎖されました。その他、市場が休みの日や週末の場合は、どのような条件で確認することができますか?
MarketInfo(symbol,MODE_TRADEALLOWED) // не помогает, всегда возвращает True