Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 737
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Qual é a dimensionalidade da matriz NewsArr na segunda dimensão?
Infelizmente, eu não entendo. Qual é a segunda dimensão?
Ah, eu acho que entendi: NewsArr assume valores 0,1,2 e 3. Isto?
Isto deve ser: string NewsArr[4][1000];
Infelizmente, eu não entendo. Qual é a segunda dimensão?
Ah, acho que entendi: NewsArr assume valores 0,1,2 e 3. Isto?
Isto deve ser: string NewsArr[4][1000];
Primeira dimensão e segunda dimensão.
Mas provavelmente é a resposta errada.A primeira dimensão e a segunda dimensão.
Mas você deve ter respondido algo errado.Onde procuro a dimensionalidade da segunda dimensão?
Ou a dimensionalidade da primeira dimensão 4 e da segunda dimensão 1000?E onde você procura a dimensionalidade da segunda dimensão?
Ou a primeira dimensão é a 4 e a segunda 1000?Sim. Mas algo está bagunçado neste posto
Fórum sobre comércio, sistemas automatizados de comércio e testes estratégicos
Qualquer dúvida que os novatos tenham sobre MQL4, ajuda e discussão sobre algoritmos e códigos
novichok2018, 2019.01.16 15:52
Provavelmente uma pergunta boba, já que ninguém responde, mas como lidar com a parada e retomada da EA após a compilação?
A plataforma dá uma mensagem:matriz fora do alcance (284,17).
linha 284: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh); aposição 17 abre um colchete com o NomNews, que é iniciado globalmente por 0.
Mudei de 0 para 1, sem sucesso.
Mudou a linha se (NomNews==300) quebrar; 300 a 360000, sem sucesso.
Eu o compenso - funciona bem por alguns minutos. E o que fazer?
Quando o número de valores na segunda dimensão é 1000 e
Não pode haver uma matriz ultrapassada na segunda dimensão.Eu não tenho pontos de ancoragem, apenas movimento vertical, e eu defino a horizontal uma vez em toda a largura da tela. Não é um problema contar do outro lado, mas é surpreendente que a mesma ação seja realizada de forma diferente em funções diferentes.
E outra pergunta - se eu quiser produzir Bid como um texto de etiqueta, qual função devo usar para fazê-lo de forma otimizada -OnChartEvent ouOnCalculate?
OBJ_LABEL tem um ponto de ancoragem mesmo que você não o tenha definido. Por padrão, é o canto superior esquerdo. A Licitação é alterada na OnCalculate e você pode alterar o texto no rótulo lá.
Sim. Mas há algo de errado com esta mensagem
Quando o número de valores na segunda dimensão é 1000 e
Não pode haver uma matriz fora de alcance na segunda dimensão.Não, não parece haver confusão. Aqui está a mensagem copiada: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).
Não, acho que não tenho nada de errado. Aqui está a mensagem copiada: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).
A posição 17 abre um colchete com o NomNews, que é iniciado globalmente por 0.
Portanto, você tem um tamanho de célula de matriz zero-dimensional na segunda dimensão.
Portanto, o tamanho da célula de sua matriz na segunda dimensão é zero.
É aqui que está localizado oNomNews:
dataHoraNewsFunck(int nomf)
{
string s=NewsArr[0][nomf];
string time=StringConcatenate(StringSubstr(s,0,4),"",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4));
return((datetime)(StringToTime(time) + GMTplus*3600))
}
//345678901234567890////////////////////////////////////////////////////////////////////////////////
nulo UpdateNews()
{
string TEXT=ReadCBOE();
int sh = StringFind(TEXTO, "pageStartAt>")+12;
int sh2= StringFind(TEXT,"</corpo>");
TEXT=StringSubstr(TEXT,sh,sh2-sh);
sh=0;
while(!IsStopped())
{
sh = StringFind(TEXT, "event_timestamp",sh)+17;
sh2= StringFind(TEXT, "onclick",sh)-2;
if(sh<17 || sh2<0)break;
NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
sh = StringFind(TEXT,flagCur,sh)+10;
sh2= sh+3;
if(sh<10 || sh2<3)break;
NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][NomNews])<0)continue;
sh = StringFind(TEXTO, "título",sh)+7;
sh2= StringFind(TEXT, "Volatilidade",sh)-1;
if(sh<7 || sh2<0)break;
NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(StringFind(NewsArr[2][NomNews], "High")>=0 && !HighNews)continue;
if(StringFind(NewsArr[2][NomNews], "Moderado")>=0 && !MidleNews)continue;
if(StringFind(NewsArr[2][NomNews], "Low")>=0 && !LowNews)continue;
sh=StringFind(TEXTO, "evento à esquerda",sh)+12;
int sh1=StringFind(TEXT, "Fala",sh);
sh2=StringFind(TEXT,"<",sh);
if(sh<12 || sh2<0)break;
if(sh1<0 || sh1>sh2)NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
else NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh);
NomNews++;
if(NomNews==300)break;
}
}
Valores de 0 a 300. Ajustado globalmente para 4?
Valores de 0 a 300. Devo definir globalmente para 4?
Ainda dá uma mensagem em 12 minutos.
Ainda dá uma mensagem no 12º minuto de operação.
Eu posso dizer de tudo isso que o NomNews entra no loop já em um estado superior a 999. Então você precisa descobrir o que está causando isto e reiniciar esta variável em algum lugar.
Para verificar isso, escreva-o no início do laço: