staticdatetime t;
if (условие)
{
Opn_B = true;
t=Time[0];
minimum = iLow(Symbol(),Period(),0);
}
if (Time[33]>t)
{
Cls_B=true;
}
No real e no testador, ele saiu em 43 barras. Tentei definir os parâmetros de saída na quinta barra, tudo é normal. Na sua opinião, qual pode ser o problema?
No real e no testador, ele saiu em 43 barras. Tentei definir os parâmetros de saída na quinta barra, tudo é normal. Na sua opinião, qual pode ser o problema?
Talvez se (condição) fosse executada várias vezes (mais uma vez a 10 bares, por exemplo) e esta execução atrasasse a vida útil?
Forexman77: Uma profissão: entrada 15:37, saída 16:19. Saída a 41 barras, para ser mais correto.
E se o substituirmos por iBarShift, eu me pergunto se o erro permanecerá ??? Talvez barras em falta na história (certamente não há buracos?) ?
Depois que a condição for preenchida, entre nas barras abertas, veja quantas delas realmente se abriram, pois a referência ao horário não é muito correta.
Se o substituirmos por iBarShift, eu me pergunto se o erro permanecerá? Talvez haja barras de saltar na história (certamente não há buracos?) ?
Depois que a condição for preenchida, entre em uma contagem de barras abertas e veja quantas barras estão realmente abertas, porque a referência ao tempo não parece correta
O código deveria ser assim?
staticdatetime t;
datetime s=Time[33]>t;
if (условие)
{
Opn_B = true;
t=Time[0];
int shif= iBarShift(Symbol(),PERIOD_M1,t,false);
minimum = iLow(Symbol(),Period(),0);
}
if (iBarShift(Symbol(),PERIOD_M1,s,false))
{
Cls_B=true;
}
Este tipo de código irá bloquear o Expert Advisor.
No real e no testador, ele saiu em 43 barras. Tentei definir os parâmetros de saída na quinta barra, tudo é normal. Qual você acha que pode ser o problema?
Vamos começar com a cabeça fria.
A hora da bandeira Opn_B = true não significa nada, porque a ordem pode não abrir no mesmo segundo.
Você pode usar o tempo de abertura do pedido OrderOpenTime, ou pode atribuir à variável t o valor do tempo após a abertura bem sucedida.
A seguir: você já usou
minimum = iLow(Symbol(),Period(),0);
1) Você precisa de iLow, ou seria melhor usar apenas Low, se você usar a mesma moeda e o mesmo cronograma?
2) Os valores de Símbolo() e Período() são melhores para serem colocados em variáveis quando usados repetidamente. Tudo afeta o desempenho - habitue-se a ele.
A tabela de minutos - se por um minuto não houve um único tique - uma nova barra não é desenhada (pode ser um truque).
E quanto ao iBarShift?
staticdatetime t;
if (условие)
{
Opn_B = true;
t=Time[0];
minimum = iLow(Symbol(),Period(),0);
}
if (iBarShift(Symbol(),1,t,false)>33)
{
Cls_B=true;
}
A string tf = Period() afeta o desempenho em execuções de loop 1000000, ou a int tf = Period() é mais correta? Eu não me conheço.
Esta condição é correta? E se o loop tiver 4 picos?
Aqui temos mais um problema. Isto é, se a condição para a primeira linha se mantiver, será obviamente falsa para a segunda e o alerta não surgirá,
Ela nem mesmo aparecerá no próximo tique, porque o tempo de abertura da vela só mudará com a chegada de uma nova.
int start()
{
string scrdate,nametf;
if (Period()==PERIOD_M1) nametf="9_M1";
if (Period()==PERIOD_M5) nametf="8_M5";
if (Period()==PERIOD_M15) nametf="7_M15";
if (Period()==PERIOD_M30) nametf="6_M30";
if (Period()==PERIOD_H1) nametf="5_H1";
if (Period()==PERIOD_H4) nametf="4_H4";
if (Period()==PERIOD_D1) nametf="3_D1";
if (Period()==PERIOD_W1) nametf="2_W1";
if (Period()==PERIOD_MN1) nametf="1_Monthly";
///////////////// for(int i = ObjectsTotal()-1; i >= 0; i--)//мониторим все объекты
{
string name = ObjectName(i);//имя объектов берем из i переменной
scrdate=StringConcatenate(Symbol()," ",TimeToStr(TimeCurrent(), TIME_DATE),"_",Hour(),".",Minute()," ",nametf," ",".jpg");//,nameif(ObjectType(name) == OBJ_TREND)//отбираем тип по имени
{
double value = ObjectGetValueByShift(name, 0);//функция для объектовComment("\n\n Alert running \n ", TimeToStr(TimeLocal(), TIME_DATE|TIME_SECONDS),"\n\n M",Period()," ",name);
if(Bid <= value + Point && Bid >= value - Point)
{
if (LastAlertTime < Time[0]){
LastAlertTime = Time[0];
Alert(Symbol()," M",Period()," ",name);
/////////////////////////////////////////////////
WindowScreenShot(scrdate,1920,1200,0,-1,-1);
////////////////////////////////////////////////////////
}
}
}
}
return(0);
}
1. removido
2. eu concordo se a lacuna não for um sinal (deve ser) sem sinal -> sem preço -> sem comércio
A EA sai em 33 bares após uma troca:
No real e no testador, ele saiu em 43 barras. Tentei definir os parâmetros de saída na quinta barra, tudo é normal. Na sua opinião, qual pode ser o problema?
A EA sai em 33 bares após uma troca:
No real e no testador, ele saiu em 43 barras. Tentei definir os parâmetros de saída na quinta barra, tudo é normal. Na sua opinião, qual pode ser o problema?
Talvez se (condição) fosse executada várias vezes (mais uma vez a 10 bares, por exemplo) e esta execução atrasasse a vida útil?
Talvez se (condição) fosse executada várias vezes (mais uma vez a 10 barras, por exemplo) ? e esta execução atrasasse o tempo de vida
Uma profissão: entrada 15:37, saída 16:19. Saída a 41 barras, para ser mais correto.
E se o substituirmos por iBarShift, eu me pergunto se o erro permanecerá ??? Talvez barras em falta na história (certamente não há buracos?) ?
Depois que a condição for preenchida, entre nas barras abertas, veja quantas delas realmente se abriram, pois a referência ao horário não é muito correta.
Se o substituirmos por iBarShift, eu me pergunto se o erro permanecerá? Talvez haja barras de saltar na história (certamente não há buracos?) ?
Depois que a condição for preenchida, entre em uma contagem de barras abertas e veja quantas barras estão realmente abertas, porque a referência ao tempo não parece correta
O código deveria ser assim?
Este tipo de código irá bloquear o Expert Advisor.
Olá, você pode me ajudar a fazer o alerta passar uma vez por barra em cada linha, e não apenas na primeira,
Limitei o número de alertas por tempo, mas não entendo como fazer um buffer para uma barra
datetime LastAlertTime = 0;A EA sai em 33 bares após uma troca:
No real e no testador, ele saiu em 43 barras. Tentei definir os parâmetros de saída na quinta barra, tudo é normal. Qual você acha que pode ser o problema?
Vamos começar com a cabeça fria.
A hora da bandeira Opn_B = true não significa nada, porque a ordem pode não abrir no mesmo segundo.
Você pode usar o tempo de abertura do pedido OrderOpenTime, ou pode atribuir à variável t o valor do tempo após a abertura bem sucedida.
A seguir: você já usou
1) Você precisa de iLow, ou seria melhor usar apenas Low, se você usar a mesma moeda e o mesmo cronograma?
2) Os valores de Símbolo() e Período() são melhores para serem colocados em variáveis quando usados repetidamente. Tudo afeta o desempenho - habitue-se a ele.
A tabela de minutos - se por um minuto não houve um único tique - uma nova barra não é desenhada (pode ser um truque).
E quanto ao iBarShift?
O mais adequado no momento parece ser
Olá, você pode me ajudar a fazer o alerta passar uma vez por barra em cada linha, e não apenas na primeira,
Limitei o número de alertas por tempo, mas não entendo como proteger uma barra
Vale a pena re-valorizar as variáveis a cada tick?
A string tf = Period() afeta o desempenho em execuções de loop 1000000 ou é int tf = Period() mais correto? Eu não me conheço.
Esta condição é correta? E se o loop tiver 4 picos?
Aqui temos mais um problema. Ou seja, se a condição para a primeira linha se mantiver, será obviamente falsa para a segunda e o alerta não surgirá,
Ela nem mesmo aparecerá no próximo tique, porque o tempo de abertura da vela só mudará com a chegada de uma nova.
A opção mais apropriada no momento parece ser
Desculpe, mas tentar calcular o número de barras por tempo é uma abordagem muito inadequada.
Vale a pena recodificar as variáveis a cada tick?
A string tf = Period() afeta o desempenho em execuções de loop 1000000, ou a int tf = Period() é mais correta? Eu não me conheço.
Esta condição é correta? E se o loop tiver 4 picos?
Aqui temos mais um problema. Isto é, se a condição para a primeira linha se mantiver, será obviamente falsa para a segunda e o alerta não surgirá,
Ela nem mesmo aparecerá no próximo tique, porque o tempo de abertura da vela só mudará com a chegada de uma nova.
1. removido
2. eu concordo se a lacuna não for um sinal (deve ser) sem sinal -> sem preço -> sem comércio
3. Isto é o que eu disse acima, mas o que fazer
PS obrigado pela resposta