int i, ot=ObjectsTotal()-1;
string id=ObjectName (i);
for (i=ot;i>=0;i--)
{
if (StringSubstr(id,0,7)=="tomato ")
{
if (StringSubstr(id,7,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
{
ObjectDelete(id);
}
if (StringSubstr(id,7,16)>TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
}
if (StringSubstr(id,0,6)=="olive ")
{
if (StringSubstr(id,6,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
{
ObjectDelete(id);
}
}
}
isto apaga a linha de identificação após 96 velas. como eu preciso
o que eu tenho que fazer agora é impedir que ea desenhe novas linhas de tomate se uma linha de tomate já estiver na tabela.
Estou pensando em acrescentar
if (StringSubstr(id,7,16)>TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
{
..............
}
......... = parar e desde o início (mas ainda ler as condições da azeitona)
código agora:
int start()
{
/////////// K% over >75 or under <25 (no waiting for close)double stoch;
stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);
double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
string Hdate = TimeToStr(H,TIME_DATE|TIME_MINUTES);
datetime L=Time[low_nr];
string Ldate = TimeToStr(L,TIME_DATE|TIME_MINUTES);
///////////////////////////////////////////////////////////////////////////////////---int i, ot=ObjectsTotal()-1;
string id=ObjectName (i);
for (i=ot;i>=0;i--)
{
if (StringSubstr(id,0,7)=="tomato ")
{
if (StringSubstr(id,7,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
{
ObjectDelete(id);
}
if (StringSubstr(id,7,16)>TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
}
if (StringSubstr(id,0,6)=="olive ")
{
if (StringSubstr(id,6,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
{
ObjectDelete(id);
}
}
}
//---////////////////////////////////////////////////////////////////////////////////if(Bid<high_price && High[0]<high_price && High[1]<high_price && stoch>75)
{
ObjectCreate("tomato "+Hdate,OBJ_TREND,0,H,high_price,Time[0],high_price);
ObjectSet("tomato "+Hdate,OBJPROP_COLOR,Tomato);
//Print ("tomato ON"+high_price);
}
///////////////////////////////////////////////////////////////////////////////if(Bid>low_price && Low[0]>low_price && Low[1]>low_price && stoch<25)
{
ObjectCreate("olive "+Ldate,OBJ_TREND,0,L,low_price,Time[0],low_price);
ObjectSet("olive "+Ldate,OBJPROP_COLOR,Olive);
//Print ("olive ON"+low_price);
}
//----//----return(0);
}
//+------------------------------------------------------------------+
eu estava pensando em mudar o nome do objeto como inicial para impedir que o roteiro traçasse linhas devido à limitação do mesmo nome... mas eu não tenho nenhuma função para mudar o nome.
hmm.... i dont get it.
minha mente está presa! sinto-me estúpido e frustrado
eu estava pensando em mudar o nome do objeto como inicial para impedir que o roteiro traçasse linhas devido à limitação do mesmo nome... mas eu não tenho nenhuma função para mudar o nome.
hmm.... i dont get it.
minha mente está presa! sinto-me estúpido e frustrado
quando você cria uma nova linha ??
não no momento do bar que você encontra mais alto ou mais baixo
e você só tem que criar se não houver linha
portanto, se você criar uma nova linha use o tempo de tempo[0].
se você encontrar seu objeto, qual é o nome do objeto ?? ==> string id=ObjectName (i);
então o que você precisa fazer ?? obter este nome quando ele tem StringSubstr(id,0,7)=="tomate".
"quando faço isso eu recebo a primeira configuração para o tomate e para a azeitona ok, então mesmo que no diário eu receba "tomate ON" preço diferente lvl, eu não recebo nova linha de tomate na tabela. o mesmo para a azeitona".
Você não recebe uma nova linha porque a antiga já existe. Apague-a e uma nova linha será desenhada.
if (StringSubstr(id,7,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
as cordas podem ser < ou > uma para a outra, isso é uma questão, eu não sei.
Você está complicando, porque giol lhe diz que se você quiser várias linhas, você tem que dar às linhas um nome diferente. E ele estava certo naquela época.
Se ele soubesse que você quer apenas uma linha, ele não terá dito isso. A solução que os devries deram é muito boa no caso de se ter várias linhas, obrigado devries
Mas se você quiser apenas uma linha chamá-la de "tomate" ou "oliva", então o ObjectFind("tomate") ObjectDelete ("tomate"), resolve os problemas de tempo separado com Time[96] e Time[0] armazenado quando a linha é desenhada.
O próximo problèm que acontecerá é que a estocagem de condição> 75 poderia durar 20 Bars ou 50 Bars, então, quando você apagará sua linha, a condição para desenhar a linha ainda será válida e assim que a linha tiver sido apagada, ou uma ordem tomada, uma nova linha será desenhada. boa sorte, não é tão difícil.
como o objeto parecia complicado para minhas duas semanas de leitura do código, decidi estabelecer um preço nivelado para venda e compra. neste processo, encontro um problema:
o "se (Close[2]>LSell && Close[1]>LSell && LevelSset==verdadeiro) não funciona.
se eu remover o if (Close[2]>LSell && Close[1]>LSell) e sair (LevelSset===verdadeiro), ou se eu mudar (Close[2]<LSell && Close[1]<1) a função parece funcionar corretamente.
Não me importo com o fechamento do estojo, então apenas o K% atual é suficiente.
código para objetos de verificação:
isto apaga a linha de identificação após 96 velas. como eu preciso
o que eu tenho que fazer agora é impedir que ea desenhe novas linhas de tomate se uma linha de tomate já estiver na tabela.
Estou pensando em acrescentar
......... = parar e desde o início (mas ainda ler as condições da azeitona)
código agora:
para reformular a frase:
quero que na tabela haja no máximo uma linha de tomate.
Se essa linha for usada para OrderSend, apague a linha.
se ela expirar (96), apagar a linha.
o mesmo para a azeitona.
portanto, se a linha de tomate já estiver na tabela, não mais linhas de tomate até que não haja tomate na tabela.
Espera-se que a reformulação da frase ajude a encontrar a solução :)
para reformular a frase:
quero que na tabela tenha no máximo uma linha de tomate.
Se essa linha for usada para OrderSend, apague a linha.
se ela expirar (96), apagar a linha.
o mesmo para a azeitona.
portanto, se a linha de tomate já estiver na tabela, não mais linhas de tomate até que não haja tomate na tabela.
esperava que a reformulação ajudasse a encontrar a solução :)
é a hora em que você cria sua linha ??? como fazer isso ??
Então como você pode evitar desenhar outras linhas....???
eu estava pensando em mudar o nome do objeto como inicial para impedir que o roteiro traçasse linhas devido à limitação do mesmo nome... mas eu não tenho nenhuma função para mudar o nome.
hmm.... i dont get it.
minha mente está presa! sinto-me estúpido e frustrado
eu estava pensando em mudar o nome do objeto como inicial para impedir que o roteiro traçasse linhas devido à limitação do mesmo nome... mas eu não tenho nenhuma função para mudar o nome.
hmm.... i dont get it.
minha mente está presa! sinto-me estúpido e frustrado
quando você cria uma nova linha ??
não no momento do bar que você encontra mais alto ou mais baixo
e você só tem que criar se não houver linha
portanto, se você criar uma nova linha use o tempo de tempo[0].
se você encontrar seu objeto, qual é o nome do objeto ?? ==> string id=ObjectName (i);
então o que você precisa fazer ?? obter este nome quando ele tem StringSubstr(id,0,7)=="tomate".
Volte ao seu primeiro posto :
"quando faço isso eu recebo a primeira configuração para o tomate e para a azeitona ok, então mesmo que no diário eu receba "tomate ON" preço diferente lvl, eu não recebo nova linha de tomate na tabela. o mesmo para a azeitona".
Você não recebe uma nova linha porque a antiga já existe. Apague-a e uma nova linha será desenhada.
no momento eu o fiz assim :
e parece que funciona como deveria, apenas uma linha, e depois de 96 barras apagadas, o redesenho quando a condição reaparece.
isto funciona ?
as cordas podem ser < ou > uma para a outra, isso é uma questão, eu não sei.
Você está complicando, porque giol lhe diz que se você quiser várias linhas, você tem que dar às linhas um nome diferente. E ele estava certo naquela época.
Se ele soubesse que você quer apenas uma linha, ele não terá dito isso. A solução que os devries deram é muito boa no caso de se ter várias linhas, obrigado devries
Mas se você quiser apenas uma linha chamá-la de "tomate" ou "oliva", então o ObjectFind("tomate") ObjectDelete ("tomate"), resolve os problemas de tempo separado com Time[96] e Time[0] armazenado quando a linha é desenhada.
O próximo problèm que acontecerá é que a estocagem de condição> 75 poderia durar 20 Bars ou 50 Bars, então, quando você apagará sua linha, a condição para desenhar a linha ainda será válida e assim que a linha tiver sido apagada, ou uma ordem tomada, uma nova linha será desenhada. boa sorte, não é tão difícil.
oi
como o objeto parecia complicado para minhas duas semanas de leitura do código, decidi estabelecer um preço nivelado para venda e compra. neste processo, encontro um problema:
o "se (Close[2]>LSell && Close[1]>LSell && LevelSset==verdadeiro) não funciona.
se eu remover o if (Close[2]>LSell && Close[1]>LSell) e sair (LevelSset===verdadeiro), ou se eu mudar (Close[2]<LSell && Close[1]<1) a função parece funcionar corretamente.
Obrigado
algumas idéias, o que está errado... qualquer um?
obrigado