Se è corretto, nessuno dei precedenti, dato che è scomodo fare un codice per ogni broker (ognuno ha i suoi regolamenti) per diversi personaggi.
È definito in modo inequivocabile come segue:
1. Viene effettuata qualsiasioperazione di trading.
2. In risposta all'operazione, otteniamo il codice di errore 132 (ERR_MARKET_CLOSED).
Inoltre, per non perdere l'apertura del mercato, potete ripetere le operazioni di trading con una certa periodicità.
Per esempio, ho fatto questo in un Expert Advisor che lavora con molti simboli:
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; }
Una funzione per controllare se è possibile fare trading su un simbolo:
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; }
Una funzione per registrare un simbolo che non può essere scambiato:
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++; }
Come si può facilmente intuire, l'array g_marketClosedSymbols è un array di strutture.
Ho commutato l'Expert Advisor in modalità OnTimer() e ora quando il mercato è chiuso non lo capisce e cerca di fare trading, in generale contatta il server e ovviamente riceve errori e intasa i log. GetLastError() = Il mercato è chiuso. Quali altre condizioni per controllare un giorno di riposo o un mercato chiuso possono essere implementate?
le zecche non vengono
l'ora del server non cambia
se (DayOfWeek()==0 || DayOfWeek()==6) per l'ora del computer +/- ora del server
Se c'è un errore, deve essere il fine settimana
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(); }
Se è corretto, nessuno dei precedenti, dato che è scomodo fare un codice per ogni broker (ognuno ha i suoi regolamenti) per caratteri diversi.
È definito in modo inequivocabile come segue:
1. Viene effettuata qualsiasioperazione di trading.
2. In risposta all'operazione, otteniamo il codice di errore 132 (ERR_MARKET_CLOSED).
Inoltre, per non perdere l'apertura del mercato, potete ripetere le operazioni di trading con una certa periodicità.
Per esempio, ho fatto questo in un Expert Advisor che lavora con molti simboli:
Una funzione per controllare se è possibile fare trading su un simbolo:
Una funzione per registrare un simbolo che non può essere scambiato:
Come si può facilmente intuire, l'array g_marketClosedSymbols è un array di strutture.
Ora una domanda agli sviluppatori di MK, perché fare un evento che non funzionerà mai? https://docs.mql4.com/ru/dateandtime/dayofweek
if(DayOfWeek()==0 ||DayOfWeek()==6)return(0);
Se sto lavorando con i tick, non c'è nessun tick e l'evento non accadrà; se sto lavorando con il timer, il server mi dà il tempo di arrivo dell'ultimo nick ad esso, cioè gli ultimi venerdì minuti e anche l'evento non accadrà mai. Risulta che ho un EA su timer e il server sta lavorando su ticks come prima, ma il server è online perché quando invio una richiesta mi dà errore 132. Per favore correggetelo o il server cambierà anche il tempo sul timer o posso controllare se il mercato è chiuso senza inviare un ordine di compravendita. Questo è un bug feroce, speranza di comprensione e soluzioni al problema.
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 час |
}
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Ho commutato l'Expert Advisor in modalità OnTimer() e ora quando il mercato è chiuso non lo capisce e cerca di fare trading, in generale contatta il server e ovviamente riceve errori e intasa i log. GetLastError() = Il mercato è chiuso. Quali altre condizioni possono essere utilizzate per controllare se il mercato è chiuso o in un fine settimana?
MarketInfo(symbol,MODE_TRADEALLOWED) // не помогает, всегда возвращает True