[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 317
Peço desculpas aos administradores por me repetir, mas ainda ninguém me disse meia palavra. A idéia é emitir mensagens armazenadas em logs, ou seja, aquelas que não podem ser corrigidas corretamente pela função IsConnected() - falhas de conexão, solicitações. Caso contrário, não está claro por que a EA não está fazendo nada no momento.
Sugira o código abaixo para ler o arquivo de log. Lê automaticamente o arquivo de registro atual por data e o envia para a impressora.
Onde:
while (result>0) {
Um arquivo está sendo montado a partir de peças. Mas eu não preciso do arquivo completo, apenas da última linha. Ajude a corrigi-lo, por favor.
void ReadWrite() {
string tekTime=TimeStr1(CurTime(),1);
string path=TerminalPath()+"\\logs\\"+tekTime+".log";
string title="Чтение из файла";
string msg;
int result;
int handle=_lopen(path,4);
if (handle<0) {
msg="Ошибка открытия файла";
Print(msg);
return;
}
result=_llseek (handle,0,0);
string buffer="";
//string char="x ";stringchar="x ";
int count=0;
result=_lread (handle,char,250);
while (result>0) {
buffer=buffer+char;
char="x ";
count++;
result=_lread (handle,char,250);
}
result=_lclose (handle);
msg=StringTrimRight(buffer);
Print(msg);
}
//------------------расчет времени----------------string TimeStr1(int taim,int tip)
{
string sTaim;
string sTaim1,sTaim2,sTaim3;
if (tip==1)
{
int GD=TimeYear(taim);
int MN=TimeMonth(taim);
int DD=TimeDay(taim);
sTaim1 = DoubleToStr(GD,0);
if (MN<10) sTaim2 = StringConcatenate(sTaim2,"0"+DoubleToStr(MN,0));
else sTaim2 = StringConcatenate(sTaim2,DoubleToStr(MN,0));
if (DD<10) sTaim3 = StringConcatenate("0",DoubleToStr(DD,0));
else sTaim3 = DoubleToStr(DD,0);
sTaim=sTaim1+sTaim2+sTaim3;
}
return(sTaim);
}
Esta é a função que responderá se o último comércio foi lucrativo ou não lucrativo:
Então, ao comparar sua resposta com zero, você decide se deixa TP/SL o mesmo ou os altera.
Sua função é a de devolver a última encomenda? Ou será que vai devolver o primeiro pedido que não estava perdendo? Por que há um cheque no bilhete?
Eu o faria desta maneira:
//+----------------------------------------------------------------------------+double LastOrderProfit() {
double Profit=0;
datetime t;
int i, j;
for (i=0; i<OrdersHistoryTotal(); i++) {
if (!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
if (OrderMagicNumber()!=Magic) continue;
if (OrderSymbol()!=Symbol()) continue;
if (OrderType()>1) continue;
if (t<OrderCloseTime()) {
t=OrderCloseTime();
j=i;
}
}
if (OrderSelect(j,SELECT_BY_POS,MODE_HISTORY)
Profit=OrderProfit()+OrderSwap()+OrderCommission();
return(Profit);
}
//+----------------------------------------------------------------------------+
Este é um redesenho de sua função para encontrar exatamente a última ordem fechada.
Tem a desvantagem de que, se não houver nenhuma ordem fechada, ela retornará zero. Assim, usando-o, é impossível saber ao certo se há ou não ordens fechadas na história. Afinal, o zero devolvido não indica que não há ordem alguma, mas que está fechado a zero.
está interessado em renderizar o valor do indicador somente para último (atual) bar. Entretanto, ao abrir uma nova barra, os valores antigos permanecem no gráfico.... Como posso remover este lixo à força? É possível especificar a condição de que para a barra [0] os valores indicadores sejam calculados e mostrados, e para as barras de [1] a [Bar-1] esses valores sejam zerados?
double Buffer [1];
int init()
{
IndicatorBuffers(1);
SetIndexStyle(0,DRAW_ARROW);
.........
return(0);
}
int deinit()
{
return(0);
}
int start()
{
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars<0) counted_bars=0;
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
for(int i=limit;i>=0;i--)
{
Buffer [0] = ............;
}
return(0);
}
Tem a desvantagem de que se nenhuma ordem tiver sido fechada, ela retornará zero. Assim, usando-o, é impossível saber ao certo se há ou não ordens fechadas na história. Afinal, o retorno nulo não significa que não há ordem alguma, mas mostra que foi fechado a zero.
Obrigado! Embora você não me tenha respondido, você respondeu minha pergunta anterior sobre o cálculo correto do lucro:
está interessado em renderizar o valor do indicador somente para último (atual) bar. Entretanto, ao abrir uma nova barra, os valores antigos permanecem no gráfico.... Como posso remover este lixo à força? É possível especificar a condição de que para a barra [0] os valores indicadores sejam calculados e mostrados, e para as barras de [1] a [Bar-1] esses valores sejam zerados?
No início de Start(), inicialize o buffer com o valor EMPTY_VALUE. Ou seja, faça-o com a aparência de uma nova barra, verifique o tempo de abertura da barra zero e faça sua lógica de desobstrução do lixo.
Sua função é a de devolver a última encomenda? Ou o primeiro encontrado não é não lucrativo? Por que há um cheque no bilhete?
Eu o faria desta maneira:
Esta é uma conversão de sua função para encontrar exatamente a última ordem fechada.
Tem uma desvantagem - se não houvesse nenhuma ordem fechada, ela retornaria zero. Assim, ao utilizá-lo, não podemos saber ao certo se existem ou não ordens fechadas na história. O retorno nulo não indica a ausência da ordem, mas indica que ela foi fechada a zero.
1. A função encontra a ordem com o maior ticker da história, o que significa a última ordem fechada (a menos, é claro, que tomemos algum caso excepcional, para o qual sua variante com o tempo máximo de fechamento é preferível).
2. De acordo com as condições , a primeira ordem é aberta com o TP/SL especificado e somente a segunda ordem pode ser aberta com o novo TP/SL, o que significa que a função pode retornar zero somente se a primeira ordem foi zero, mas não se não houver ordens fechadas na história.
Uma última coisa. Em sua variante, o uso de j e outro SELECT na função é redundante.
é suficiente:
if (t<OrderCloseTime()) {
t=OrderCloseTime();
Profit=OrderProfit()+OrderSwap()+OrderCommission();
}
return(Profit);
.
em inserção. problemas com o ciclo e restabelecimento dos valores iniciais após a saída do ciclo
Esta é a função que responderá se o último comércio foi lucrativo ou não lucrativo:
Então, ao comparar sua resposta com zero, você decide se deixa TP/SL o mesmo ou os altera.
Olá a todos. Estou interessado no indicador IN10TION NewsReader. Quero anexá-lo ao meu EA.
Se aparecer uma linha vermelha (Market.TdOpen) e Market.Price.DOWN(vermelho), então venda
Se aparecer uma linha vermelha (Market.TdOpen) e Market.Price.UP(verde) então compre
Que ações posso tomar? Eu tentei o iCustom, mas não funciona!
_yIN10TIONfNewsReaderov09.99kblite.ex4 (115.59 KB) apagar
Peço desculpas aos administradores por me repetir, mas ainda ninguém me disse meia palavra. A idéia é emitir mensagens armazenadas em logs, ou seja, aquelas que não podem ser corrigidas corretamente pela função IsConnected() - falhas de conexão, solicitações. Caso contrário, não está claro por que a EA não está fazendo nada no momento.
Sugira o código abaixo para ler o arquivo de log. Lê automaticamente o arquivo de registro atual por data e o envia para a impressora.
Onde:
Um arquivo está sendo montado a partir de peças. Mas eu não preciso do arquivo completo, apenas da última linha. Ajude a corrigi-lo, por favor.
Precisa de ajuda para mudar uma EA
O Consultor Especialista deve fazer o contrário.
Em vez de vender ordens de limite de compra
e comprar ordens de limite de venda
Esta é a função que responderá se o último comércio foi lucrativo ou não lucrativo:
Então, ao comparar sua resposta com zero, você decide se deixa TP/SL o mesmo ou os altera.
Sua função é a de devolver a última encomenda? Ou será que vai devolver o primeiro pedido que não estava perdendo? Por que há um cheque no bilhete?
Eu o faria desta maneira:
Este é um redesenho de sua função para encontrar exatamente a última ordem fechada.
Tem a desvantagem de que, se não houver nenhuma ordem fechada, ela retornará zero. Assim, usando-o, é impossível saber ao certo se há ou não ordens fechadas na história. Afinal, o zero devolvido não indica que não há ordem alguma, mas que está fechado a zero.
Por favor, informe:
está interessado em renderizar o valor do indicador somente para último (atual) bar. Entretanto, ao abrir uma nova barra, os valores antigos permanecem no gráfico.... Como posso remover este lixo à força? É possível especificar a condição de que para a barra [0] os valores indicadores sejam calculados e mostrados, e para as barras de [1] a [Bar-1] esses valores sejam zerados?
artmedia70:
Tem a desvantagem de que se nenhuma ordem tiver sido fechada, ela retornará zero. Assim, usando-o, é impossível saber ao certo se há ou não ordens fechadas na história. Afinal, o retorno nulo não significa que não há ordem alguma, mas mostra que foi fechado a zero.
Obrigado! Embora você não me tenha respondido, você respondeu minha pergunta anterior sobre o cálculo correto do lucro:
Por favor, informe:
está interessado em renderizar o valor do indicador somente para último (atual) bar. Entretanto, ao abrir uma nova barra, os valores antigos permanecem no gráfico.... Como posso remover este lixo à força? É possível especificar a condição de que para a barra [0] os valores indicadores sejam calculados e mostrados, e para as barras de [1] a [Bar-1] esses valores sejam zerados?
Sua função é a de devolver a última encomenda? Ou o primeiro encontrado não é não lucrativo? Por que há um cheque no bilhete?
Eu o faria desta maneira:
Esta é uma conversão de sua função para encontrar exatamente a última ordem fechada.
Tem uma desvantagem - se não houvesse nenhuma ordem fechada, ela retornaria zero. Assim, ao utilizá-lo, não podemos saber ao certo se existem ou não ordens fechadas na história. O retorno nulo não indica a ausência da ordem, mas indica que ela foi fechada a zero.
1. A função encontra a ordem com o maior ticker da história, o que significa a última ordem fechada (a menos, é claro, que tomemos algum caso excepcional, para o qual sua variante com o tempo máximo de fechamento é preferível).
2. De acordo com as condições , a primeira ordem é aberta com o TP/SL especificado e somente a segunda ordem pode ser aberta com o novo TP/SL, o que significa que a função pode retornar zero somente se a primeira ordem foi zero, mas não se não houver ordens fechadas na história.
Uma última coisa. Em sua variante, o uso de j e outro SELECT na função é redundante.
é suficiente:
No início de Start() inicialize o buffer com o valor VAZIO_VALOR.
Como é isso? Tenho isto em configurações de linha indicadora após int init()
SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,165); SetIndexBuffer(0,Buffer); SetIndexEmptyValue(0,0.0);