Wenn es richtig ist, keine der oben genannten, da es unpraktisch ist, einen Code für jeden Makler (jeder hat seine eigenen Vorschriften) für verschiedene Zeichen zu machen.
Er ist eindeutig wie folgt definiert:
(1) JedeHandelsoperation wird durchgeführt.
2. Als Antwort auf den Vorgang erhalten wir den Fehlercode 132 (ERR_MARKET_CLOSED).
Um die Markteröffnung nicht zu verpassen, können Sie die Handelsoperationen mit einer gewissen Regelmäßigkeit wiederholen.
Ich habe dies zum Beispiel in einem Expert Advisor gemacht, der mit vielen Symbolen arbeitet:
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; }
Eine Funktion, die prüft, ob es möglich ist, mit einem Symbol zu handeln:
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; }
Eine Funktion zur Erfassung eines Symbols, das nicht gehandelt werden kann:
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++; }
Wie Sie leicht erraten können, ist das Array g_marketClosedSymbols ein Array von Strukturen.
Ich habe den Expert Advisor in den OnTimer()-Modus geschaltet und jetzt, wenn der Markt geschlossen ist, versteht er das nicht und versucht zu handeln, kontaktiert im Allgemeinen den Server und erhält natürlich Fehler und verstopft die Logs. GetLastError() = Markt ist geschlossen. Welche anderen Bedingungen für die Überprüfung eines arbeitsfreien Tages oder eines geschlossenen Marktes können eingeführt werden?
die Zecken kommen nicht
die Serverzeit ändert sich nicht
wenn (DayOfWeek()==0 || DayOfWeek()==6) durch die Computerzeit +/- Serverzeit
Wenn es einen Fehler gibt, muss es das Wochenende sein
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(); }
Wenn es richtig ist, keine der oben genannten, da es unpraktisch ist, einen Code für jeden Makler (jeder hat seine eigenen Vorschriften) für verschiedene Zeichen zu machen.
Er ist eindeutig wie folgt definiert:
(1) JedeHandelsoperation wird durchgeführt.
2. Als Antwort auf den Vorgang erhalten wir den Fehlercode 132 (ERR_MARKET_CLOSED).
Um die Markteröffnung nicht zu verpassen, können Sie die Handelsoperationen mit einer gewissen Regelmäßigkeit wiederholen.
Ich habe dies zum Beispiel in einem Expert Advisor gemacht, der mit vielen Symbolen arbeitet:
Eine Funktion, die prüft, ob es möglich ist, mit einem Symbol zu handeln:
Eine Funktion zur Erfassung eines Symbols, das nicht gehandelt werden kann:
Wie Sie leicht erraten können, ist das Array g_marketClosedSymbols ein Array von Strukturen.
Nun eine Frage an die MK-Entwickler: Warum ein Ereignis schaffen, das nie funktionieren wird? https://docs.mql4.com/ru/dateandtime/dayofweek
if(DayOfWeek()==0 ||DayOfWeek()==6)return(0);
Wenn ich mit Ticks arbeite, gibt es keine Ticks und das Ereignis wird nicht eintreten; wenn ich mit Timer arbeite, gibt mir der Server die Ankunftszeit des letzten Nicks, d. h. die letzten Freitagsminuten, und das Ereignis wird auch nicht eintreten. Es stellt sich heraus, ich habe ein EA auf Timer und Server arbeitet auf Ticks wie vor, aber Server ist online, weil, wenn ich eine Anforderung senden es gibt mir Fehler 132. Bitte beheben Sie das Problem, oder der Server wird die Zeit auch auf dem Timer ändern, oder ich kann überprüfen, ob der Markt geschlossen ist, ohne einen Handelsauftrag zu senden. Dies ist ein schwerwiegender Fehler, ich hoffe auf Verständnis und Lösungen für das Problem.
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 час |
}
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Ich habe den Expert Advisor in den OnTimer()-Modus geschaltet und jetzt, wenn der Markt geschlossen ist, versteht er das nicht und versucht zu handeln, kontaktiert im Allgemeinen den Server und erhält natürlich Fehler und verstopft die Logs. GetLastError() = Markt ist geschlossen. Welche anderen Bedingungen können verwendet werden, um zu prüfen, ob der Markt geschlossen ist oder am Wochenende stattfindet?
MarketInfo(symbol,MODE_TRADEALLOWED) // не помогает, всегда возвращает True