Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 147

 

A EA deve ler de um arquivo um array de dados na forma: data inteiro1 inteiro2 inteiro3 inteiro4, pode ser de qualquer tipo de arquivo, exceto bin.

файл скопировал в папку C:\Users\Михаил\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv

é deletado desta pasta.

aqui está o código.


int File()
{
int P=0;

int filehandle=FileOpen("qqq.csv",FILE_READ|FILE_CSV,","); 
if(filehandle!=INVALID_HANDLE) 
     { 
     datetime d = FileReadDatetime(filehandle);
   int I=FileReadNumber(filehandle);
     FileClose(filehandle);
     Comment(d+" "+I);
     }
     else {Comment("qqq.csv");}
return P;

}

você pode especificar o caminho para a pasta da qual o arquivo não será excluído pelo testador? Eu entendi que todos os arquivos são excluídos desta pasta durante os testes, mas quando o arquivo é criado programmaticamente, ele é colocado nesta pasta

 
Mikhail Simakov:

A EA deve ler de um arquivo um array de dados na forma: data inteiro1 inteiro2 inteiro3 inteiro4, pode ser de qualquer tipo de arquivo, exceto bin.

файл скопировал в папку C:\Users\Михаил\AppData\Roaming\MetaQuotes\Tester\1B9501BF48F2354A4685940A72752910\Agent-127.0.0.1-3000\MQL5\Files\qqq.scv

é deletado desta pasta.

Aqui está o código.

Talvez especificar o caminho para a pasta da qual o arquivo não será apagado pelo testador? Entendi que todos os arquivos são excluídos desta pasta ao testar, mas ao criar um arquivo programmaticamente, ele é colocado nesta pasta

Talvez devêssemos usar FileCopy com a bandeira FILE_COMMON. O novo teste funciona do zero, isto pode ser uma falha.

 
Konstantin Nikitin:

Talvez você deva usar FileCopy com a bandeira FILE_COMMON. O novo teste funciona do zero, isto pode ser uma falha.

funciona se você copiar o arquivo para uma pasta durante o teste )) agora para descobrir o delimitador

 

Comecei a escrever um painel comercial na MQL4 e aqui está o paradoxo. Tudo parece bem, mas toda vez que mudo o TF, linhas e textos de outros indicadores são desenhados no topo do meu painel.

Aqui está o que verifiquei: ao mudar o TF, parâmetro OBJPROP_BACK = falso. Isso significa que tudo está bem neste lado.

Alguma idéia sobre este assunto?

P.S. De fato, eu verifiquei agora e o código fonte (que tomei como protótipo) se comporta da mesma maneira. Depois de mudar o TF, ele desenha linhas normais no topo do painel e as linhas criadas por indicadores que não usam o OOP.
https://www.mql5.com/ru/code/19220
Infopanel
Infopanel
  • www.mql5.com
Пример создания простого и быстрого меню с поддержкой нескольких языков. В примере выводится информация о цене, времени до следующего бара, балансе счета, количестве ордеров. Данный пример можно использовать в качестве шаблона для создания своих разработок. Минус данного метода при добавлении, удалении или редактировании объектов необходимо...
 
Goya7:

Comecei a escrever um painel comercial na MQL4 e aqui está o paradoxo. Tudo parece bem, mas toda vez que mudo o TF, linhas e textos de outros indicadores são desenhados no topo do meu painel.

Aqui está o que verifiquei: ao mudar o TF, parâmetro OBJPROP_BACK = falso. Portanto, tudo está bem neste lado.

Alguma idéia sobre este assunto?

P.S. De fato, eu verifiquei agora, o código fonte (que tomei como protótipo) comporta-se da mesma maneira. Depois de mudar o TF, ele desenha linhas normais no topo do painel e as linhas criadas por indicadores que não usam o OOP.
https://www.mql5.com/ru/code/19220

Ao mudar o cronograma, os objetos criados por outros programas são excluídos e novos objetos são criados imediatamente. No painel, os objetos não são excluídos, portanto são "velhos". Na tabela, aplica-se o princípio "quem for o último, está no topo".

Você precisa apagar objetos no painel com DeInit(), e criar novos objetos novamente

 
Goya7:

Comecei a escrever um painel comercial na MQL4 e aqui está o paradoxo. Tudo parece bem, mas toda vez que mudo o TF, linhas e textos de outros indicadores são desenhados no topo do meu painel.

Eis o que verifiquei: quando a TF é alterada, o parâmetro OBJPROP_BACK = falso. Portanto, tudo está bem neste lado.

Alguma idéia sobre este assunto?

P.S. De fato, eu verifiquei agora, o código fonte (que tomei como protótipo) comporta-se da mesma maneira. Depois de mudar o TF, ele desenha linhas normais no topo do painel e as linhas criadas por indicadores que não usam o OOP.
https://www.mql5.com/ru/code/19220
Vitaly Muzichenko:

Ao mudar o cronograma, os objetos criados por outros programas são excluídos e novos objetos são criados imediatamente. No painel, os objetos não são excluídos, portanto são "velhos". Na tabela, aplica-se o princípio "quem for o último, está no topo".

Você precisa apagar objetos no painel usando DeInit(), e criar novos objetos novamente

é melhor pegar a criação de um novo objeto em Eventos e redesenhar o painel

 
Vitaly Muzichenko:

Ao mudar os horários, os objetos criados por outros programas são eliminados e novos são criados imediatamente. No painel, os objetos não são apagados, portanto, são "velhos". O princípio de "O último por cima é o último por cima" aplica-se no gráfico.

Você precisa apagar objetos no painel usando DeInit(), e criar novos objetos novamente

Obrigado pela sua reflexão. No DeInit() eles são excluídos, é claro. Ao mudar a TF o procedimento Init() passa, mas algo me diz que o painel não está redesenhado. Nomeadamente, eu experimentei e instalei outro painel, que é territorialmente onde está o meu e depois o apaguei. A minha também desapareceu (antes da mudança da TF) - portanto, não está sendo redesenhada. ((
Você pode me dizer um pouco mais sobre como redesenhá-lo?


Taras Slobodyanik:

é melhor pegar a criação de um novo objeto em Eventos e redesenhar o painel

Diga-me como fazer isso, estou apenas meia hora como programador. :)
 
int OnInit()
{
ChartSetInteger(0,CHART_EVENT_OBJECT_CREATE,true);
}


void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
//событие создания нового объекта на чарте
if(id==CHARTEVENT_OBJECT_CREATE && StringFind(sparam, prefix, 0)<0)
   {
   //удаляем панель и рисуем заново

   ChartRedraw();
   }
}

ps. que me faz lembrar - você também precisa verificar o nome do objeto criado para ter certeza de que não é "seu" objeto (prefira o nome de seus objetos).
ou ao invés do nome, compare o tipo de objeto.

 
Cidadãos, digam-me se eu estou fazendo certo!!! Preciso do consultor especializado para negociar quando ele não tiver entrado na zona 30 ou 70, e quando tiver entrado, ele não negociará!!! Esta é a maneira correta de fazer isso?

RSI3 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 1);
RSI4 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 2);

bool RSItf = RSI3 > 30 && 30 > RSI4;
if(RSItf == true)
{
}
else
{
orderend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
}
bool RSItf = RSI3 > 70 && 70> RSI4;
if(RSItf == true)
{
}
else
{
orderend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}
 
ponochka:
Cidadãos, digam-me se eu estou fazendo certo!!! Preciso do consultor especializado para negociar quando ele não tiver entrado na zona 30 ou 70, e quando tiver entrado, ele não negociará!!! Esta é a maneira correta de fazer isso?

É algo assim, tanto quanto eu entendo que você precisa

int RSIPeriod = 0, Slippage = 5, Magic = 1234;
double lot = 0.1;

void OnStart()
{
     double RSI3 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 1),
            RSI4 = iRSI(_Symbol, _Period, RSIPeriod, PRICE_CLOSE, 2);
     int ticket = 0;
     
     if(RSI3 <= 30 && RSI4 <= 30)
          ticket = OrderSend(_Symbol, OP_SELL, lot, Bid, Slippage, 0, 0, NULL, Magic, 0, clrRed);
     
     if(RSI3 >= 70 && RSI4 >= 70)
          ticket = OrderSend(_Symbol, OP_BUY, lot, Ask, Slippage, 0, 0, NULL, Magic, 0, clrBlue);
}