Se correto, nenhum dos itens acima, pois é inconveniente fazer um código para cada corretor (cada um tem seus próprios regulamentos) para caracteres diferentes.
Ela é definida sem ambigüidade da seguinte forma:
1. qualqueroperação comercial é realizada.
2. Em resposta à operação, obtemos o código de erro 132 (ERR_MARKET_CLOSED).
Mais adiante, para não perder a abertura do mercado, você pode repetir as operações comerciais com alguma periodicidade.
Por exemplo, fiz isso em um consultor especializado que trabalha com muitos símbolos:
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; }
Uma função para verificar se é possível negociar em um símbolo:
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; }
Uma função para registrar um símbolo que não pode ser comercializado:
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++; }
Como você pode facilmente adivinhar, o array g_marketClosedSymbols é um array de estruturas.
Mudou o Expert Advisor para o modo OnTimer() e agora quando o mercado está fechado ele não entende isso e tenta negociar, em geral entra em contato com o servidor e, é claro, recebe erros e entupimentos nos logs. GetLastError() = O mercado está fechado. Que outras condições para verificar um dia de folga ou um mercado fechado podem ser implementadas?
carrapatos não estão chegando
o tempo do servidor não muda
se (DayOfWeek()==0 || DayOfWeek()==6) pelo tempo comp +/- tempo do servidor
Se houver um erro, deve ser o fim de semana
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 correto, nenhum dos anteriores, pois é inconveniente fazer um código para cada corretor (cada um tem seus próprios regulamentos) para caracteres diferentes.
Ela é definida sem ambigüidade da seguinte forma:
1. qualqueroperação comercial é realizada.
2. Em resposta à operação, obtemos o código de erro 132 (ERR_MARKET_CLOSED).
Mais adiante, para não perder a abertura do mercado, você pode repetir as operações comerciais com alguma periodicidade.
Por exemplo, fiz isso em um consultor especializado que trabalha com muitos símbolos:
Uma função para verificar se é possível negociar em um símbolo:
Uma função para registrar um símbolo que não pode ser comercializado:
Como você pode facilmente adivinhar, o array g_marketClosedSymbols é um array de estruturas.
Agora uma pergunta aos desenvolvedores da MK, por que fazer um evento que nunca vai funcionar? https://docs.mql4.com/ru/dateandtime/dayofweek
if(DayOfWeek()==0 ||DayOfWeek()==6)return(0);
Se eu estiver trabalhando com carrapatos, não há carrapatos e o evento não vai acontecer; se eu estiver trabalhando com timer, o servidor me dá o horário de chegada do último carrapato, ou seja, os últimos minutos da sexta-feira e o evento também nunca vai acontecer. Acontece que eu tenho um EA no timer e o servidor está trabalhando em ticks como antes, mas o servidor está online porque quando eu envio um pedido, ele me dá erro 132. Por favor, conserte-o ou o servidor também mudará o tempo no timer ou posso verificar se o mercado está fechado sem enviar uma ordem comercial. Este é um insecto feroz, esperança de compreensão e soluções para o 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 час |
}
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Mudou o Expert Advisor para o modo OnTimer() e agora quando o mercado está fechado ele não entende isso e tenta negociar, em geral entra em contato com o servidor e, é claro, recebe erros e entupimentos nos logs. GetLastError() = O mercado está fechado. Que outras condições podem ser usadas para verificar se o mercado está fechado ou em um fim de semana?
MarketInfo(symbol,MODE_TRADEALLOWED) // не помогает, всегда возвращает True