Eu tentei FileOpen () um único arquivo (na pasta comum) em duas instâncias MT4 separadas, mas quando o arquivo é aberto pelo primeiro, o segundo não pode abri-lo e -1 é retornado por FileOpen (). Na verdade, eu quero manter o arquivo aberto para escrever em um deles e mantê-lo aberto para ler no outro. Acabei de testar pelo FILEREAD por enquanto. Você deve usar FILESHAREREAD e ou FILESHAREWRITE. O primeiro script mantém o arquivo. csv aberto para leitura. Segundo scripts, tenta abrir o arquivo e modificá-lo, mas retorna erro 5004: o arquivo não pode ser aberto mohammad: primeiro script mantém arquivo. csv aberto para leitura. Segundo scripts, tenta abrir o arquivo e modificá-lo, mas retorna erro 5004: o arquivo não pode ser aberto. Claro, seu primeiro script abre o arquivo para leitura. Você não pode então abri-lo para escrever com outro script. Se um arquivo estiver aberto para leitura, você não pode abri-lo para escrever de um outro código e, se aberto para escrever, você não pode abri-lo apenas para leitura. Dependendo da quantidade de informação disponível no arquivo, você pode tentar usar globals ou pipes nomeados. Claro, seu primeiro script abre o arquivo para leitura. Você não pode então abri-lo para escrever com outro script. Se um arquivo estiver aberto para leitura, você não pode abri-lo para escrever de um outro código e, se aberto para escrever, você não pode abri-lo apenas para leitura. Isso significa que dois scripts só podem compartilhar leitura ou compartilhamento de escrita (FILESHAREREAD amp FILESHAREWRITE) p. s: Desculpe, o método Stuart named pipes é muito complicado para mim, já vi isso:) no arquivo descritor retornado por FileOpen (). Na lista de parâmetros separados por vírgulas, para escrever no arquivo. O número de parâmetros escritos pode ter até 63. Número de bytes escritos ou 0 em caso de erro. Para obter informações sobre o erro, ligue para a função GetLastError (). Os números serão convertidos em um texto na saída (veja a função Print ()). Os dados do tipo duplo são emitidos com a precisão de 16 dígitos após o ponto decimal, e os dados podem ser exibidos em formato tradicional ou científico - dependendo do formato que será o mais compacto. Os dados do tipo flutuante são mostrados com 5 dígitos após o ponto decimal. Para exibir números reais com precisão diferente ou em um formato claramente especificado, use DoubleToString (). Os números do tipo bool são exibidos como quottruequot ou quotfalsequot strings. Os números do tipo de data e hora são exibidos como quotYYYY. MM. DD HH: MI: SSquot. -------------------------------------------------- ---------------- DemoFileWrite. mq4 Copyright 2014, MetaQuotes Software Corp. mql5 ----------------------- ------------------------------------------- propriedade copyright quotCopyright 2014, MetaQuotes Software Propriedade do Corp. quot quotmql5quot propriedade da propriedade quot1.00quot propriedade rigorosa --- mostre a janela dos parâmetros de entrada ao iniciar a propriedade do script scriptshowinputs --- parâmetros para receber dados da cadeia de entrada do terminal InpSymbolName quotEURUSDquot 1057 entrada de par de transição ENUMTIMEFRAMES InpSymbolPeriod PERIODH1 Time frame Input int InpFastEMAPeriod12 Entrada de período de EMA rápida int InpSlowEMAPeriod26 Entrada de período de EMA lento int InpSignalPeriod9 Entrada de período de média de diferença ENUMAPPLIEDPRICE InpAppliedPrice PRICECLOSE Tipo de preço --- parâmetros para escrever dados na string de entrada do arquivo InpFileName quotMACD. csvquot Nome do arquivo string de entrada InpDirectoryName quotDataquot Nome da pasta --- ------------------------ --------------------------------------- Função de início do programa de script ------- -------------------------------------------------- --------- vazio OnStart () bool signbuff array de sinal (true - buy, false-sell) timetime timebuff array of signals39 appear time int signsize0 sinal array tamanho double macdbuff array of indicator values datetime datebuff array of indicator dates Int macdsize0 tamanho das matrizes de indicadores --- definir indexação como série temporal ArraySetAsSeries (signbuff, true) ArraySetAsSeries (timebuff, true) ArraySetAsSeries (macdbuff, true) ArraySetAsSeries (datebuff, true) --- redefinir o último código de erro ResetLastError () - - copiando o tempo das últimas 1000 barras int copiado CopyTime (NULL, 0,0,1000, datebuff) se (copiedlt0) PrintFormat (quotFailed para copiar valores de tempo. Código de erro. GetLastError ()) return --- prepare macdbuff array ArrayResize (macdbuff, copiado) --- copie os valores da linha principal do indicador iMACD para (int i0iltcopiedi) macdbuffi iMACD (InpSymbolName, InpSymbolPeriod, InpFastEMAPeriod, InpSlowEMAPeriod, InpSignalPeriod, InpAppliedPrice, MODEMAIN, i) --- obter tamanho macdisk ArraySize (macdbuff) --- analisar os dados e salvar os sinais indicadores para as matrizes ArrayResize (signbuff, macdsize-1) ArrayResize (timebuff, macdsize-1) para (int i1iltmacdsizei) - - Comprar sinal se (macdbuffi-1lt0 ampamp macdbuffigt0) signbuffsignsize true timebuffsignsizedatebuffi signsize --- vender sinal se (macdbuffi-1gt0 ampamp macdbuffilt0) signbuffsignsize false timebuffsignsizedatebuffi signatário --- abra o arquivo para escrever os valores do indicador (se o arquivo estiver ausente , Ele será criado automaticamente) ResetLastError () int filehandle FileOpen (InpDirectoryName quotquot InpFileName, FILEREAD FILEWRITE FILECSV) se (filehandle INVALIDHANDLE) PrintFormat (quots fi Leu está disponível para escrever, InpFileName) PrintFormat (quotFile path: sFilesquot. TerminalInfoString (TERMINALDATAPATH)) --- primeiro, escreva o número de sinais FileWrite (filehandle, signsize) --- escreva o tempo e os valores dos sinais para o arquivo (int i0iltsignsizei) FileWrite (filehandle, timebuffi, signbuffi) --- Feche o arquivo FileClose (handhandle) PrintFormat (quotData é escrito, s file is closedquot, InpFileName) else PrintFormat (quotFailed to open s file, Código de erro, InpFileName, GetLastError ())
No comments:
Post a Comment