Pergunte! - página 21

 
billworld2:
Existe uma maneira de excluir objetos com base em uma seqüência de texto selecionada dentro do nome do objeto?

Aqui está o exemplo:

data/hora atualDia = StrToTime(Ano()+". "+Mês()+". "+Dia()+" 00.00");

for(int i=0;i<ObjectsTotal();i++)

{

nome da cadeia = ObjectName(i);

if( ObjectGet(name,OBJPROP_TIME1) < currentDay && ObjectGet(name,OBJPROP_TIME2) < currentDay && ObjectGet(name,OBJPROP_TIME3) < currentDay)

{

ObjectDelete(ObjectName(i));

return (falso);

}

}

retorno(verdadeiro);

 
billworld2:
Um dos meus projetos de aprendizagem é a personalização do tester.tpl que rege a opção de exibição de gráficos para o Testador de Estratégias. Acho o estilo padrão do gráfico muito difícil de visualizar. Então, criei um novo modelo e depois construí um script para substituir todas as setas por setas mais atraentes.

Entretanto, eu também gostaria de pegar informações nos nomes das setas e exibi-las como texto no gráfico. Os nomes das setas incluem coisas como "#62 comprar" ou "73 vender fechar". Assim, você pode olhar para o gráfico e ver exatamente quando um determinado número de comércio é inserido/exidido. Não sei por que isto não está incluído por padrão com o Strategy Tester como está com outras plataformas (por exemplo, TradeStation).

De qualquer forma, eu gostaria de pegar o texto em questão e inserir novos objetos de texto logo abaixo das setas existentes no gráfico. Mas, não estou descobrindo como realizar isto.

Como posso fazer isto?

Obrigado

Projeto de lei

Bem, você pode escrever um roteiro, ou funcionar com a seta para ler informações e fazer um rótulo de texto abaixo. Em seguida, execute o script cada vez que uma nova seta for desenhada. Ou simplesmente coloque a função no final da função principal da ea. Eu não sei porque esta informação não é padrão no metatrader, mas é simples codificar este tipo de funcionalidade.

 
Kalenzo:
U deve ler sobre as funções Data e Hora, e usar a função iBarShift para obter o turno da primeira barra a partir do mês especificado a partir do período de tempo especificado.

Eu sei que deve ser trivial para você. Só não estou conseguindo ainda seguindo a documentação limitada (não há muitos exemplos fornecidos ali). Você poderia gentilmente dar um exemplo de como fazer isso?

Obrigado

Projeto de lei

 
Kalenzo:
Bem, você pode escrever um roteiro, ou funcionar com a seta para ler informações e fazer um rótulo de texto abaixo. Em seguida, execute o script cada vez que uma nova seta for desenhada. Ou simplesmente coloque a função no final da função principal da ea. Eu não sei porque esta informação não é padrão no metatrader, mas é simples codificar este tipo de funcionalidade.

Obrigado, mas, estou preso especificamente a como codificar o roteiro. Se você tiver tempo para dar um pequeno exemplo, isso seria muito apreciado.

Mais uma vez, obrigado.

Projeto de lei

 

Não tenho certeza se estou seguindo. Para ser claro, estou procurando uma maneira de fazer uma combinação de sub-cordas baseada em um nome de objeto. Digamos, por exemplo, que tenho um grupo de objetos com a corda "-206" (junto com outro texto). Quero localizar e excluir todos os objetos que contêm "-206" em seu nome.

O que está me confundindo no exemplo abaixo é a associação com OBJPROP_TIME1, OBJPROP_TIME2 e OBJPROP_TIME3. Sei que os objetos podem ter até três coordenadas de tempo. Não estou seguindo como isso se encaixa no que estou tentando fazer.

Kalenzo:
Aqui está o exemplo:

data/hora atualDia = StrToTime(Ano()+". "+Mês()+". "+Dia()+" 00.00");

for(int i=0;i<ObjectsTotal();i++)

{

nome da cadeia = ObjectName(i);

if( ObjectGet(name,OBJPROP_TIME1) < currentDay && ObjectGet(name,OBJPROP_TIME2) < currentDay && ObjectGet(name,OBJPROP_TIME3) < currentDay)

{

ObjectDelete(ObjectName(i));

return (falso);

}

}

retorno(true);
 
billworld2:
Não tenho certeza se estou seguindo. Para ser claro, estou procurando uma maneira de fazer uma combinação de sub-cordas baseada em um nome de objeto. Digamos, por exemplo, que tenho um grupo de objetos com a corda "-206" (junto com outro texto). O que está me confundindo no exemplo abaixo é a associação com OBJPROP_TIME1, OBJPROP_TIME2 e OBJPROP_TIME3. Eu sei que os objetos podem ter até três coordenadas de tempo. Não estou seguindo como isso se encaixa no que estou tentando fazer.

Ok, tente isto:

for(int i=0;i<ObjectsTotal();i++)

{

nome da cadeia = ObjectName(i);

if(StringSubstr( nome, 0, 3)==206)

{

ObjectDelete(ObjectName(i));

}

}

Se os 3 primeiros caracteres do nome do objeto forem 206, o objeto será apagado.

 
billworld2:
Obrigado, mas, estou preso especificamente em como codificar o script. Se você tiver tempo para dar um pequeno exemplo, isso seria muito apreciado.

Mais uma vez, obrigado.

Projeto de lei

primeiro declarar variável global (global para o roteiro) int objectCount;

depois no final do processo ea todos os objetos (u pode por exemplo pesquisá-los pelo nome)

for(int i=0;i>=ObjectsTotal(OBJ_ARROW) ;i++)

{

//então se a etiqueta do objeto não existir desenhá-la, digamos que vamos tomar o

//nome da seta existente e adicionar a ela a etiqueta L, para identificá-la

if(ObjectFind(ObjectName(i)+"L")== -1)

{

ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i),(OBJPROP_PRICE1+3*Point)));

// e é isso

}

}

Este é apenas um exemplo, não tenho tempo para verificar possíveis erros mas isto deve funcionar, e você sabe agora o caminho certo.

 

Certo. Entendi. Eu realmente precisava usar o StringFind(). Obrigado pelas dicas!

#property show_inputs

stringname="blá";

//+------------------------------------------------------------------+

//| função de início do programa de script |

//+------------------------------------------------------------------+

int start()

{

//----

for(int i=0;i<ObjectsTotal();i++)

if(StringFind(ObjectName(i),stringname,0)>0)

{

ObjectDelete(ObjectName(i));

}

Kalenzo:
Ok, tente isto:

for(int i=0;i<ObjectsTotal();i++)

{

nome da cadeia = ObjectName(i);

if(StringSubstr( nome, 0, 3)==206)

{

ObjectDelete(ObjectName(i));

}

}

Se as 3 primeiras letras do nome do objeto forem 206, o objeto será apagado.
 

Obrigado, mas, isto não funciona. Primeiro, mudei "i>=ObjectsTotal" para "i<=ObjectsTotal" (erro de digitação). Depois, notei que você está criando outro objeto de flecha onde queremos criar um novo objeto de texto que inclua o nome do objeto de flecha. De qualquer forma, o código abaixo está criando um monte de flechas (cerca de 50) todas sobrepostas nas mesmas coordenadas.

Ainda perdido neste. Se você tiver a chance de dar outra olhada, isso seria muito apreciado. Para ser claro, estou procurando criar um novo objeto de texto que seja posicionado abaixo de cada objeto de seta existente onde a descrição do texto do objeto de texto seja igual ao nome do objeto de seta.

Projeto de lei

Kalenzo:
primeiro declarar variável global (global para o roteiro) int objectCount;

então no final do processo de e-a todos os objetos (por exemplo, pode procurá-los pelo nome)

for(int i=0;i>=ObjectsTotal(OBJ_ARROW) ;i++)

{

//então se a etiqueta do objeto não existir desenhá-la, digamos que vamos tomar o

//nome da seta existente e adicionar a ela a etiqueta L, para identificá-la

if(ObjectFind(ObjectName(i)+"L")== -1)

{

ObjectCreate(ObjectName(i)+"L",OBJ_ARROW,0,ObjectGet(ObjectName(i), OBJPROP_TIME1),ObjectGet(ObjectName(i),(OBJPROP_PRICE1+3*Point)));

// e é isso

}

}

Este é apenas um exemplo, não tenho tempo para verificar possíveis erros mas isto deve funcionar, e você sabe agora o caminho certo.
 

eliminação de objetos com base no conteúdo

Existe uma maneira de excluir objetos com base em uma seqüência de texto selecionada dentro do nome do objeto?

Editar: Descoberto com o ponteiro de Kalenzo. A resposta está no post #212.