desenho H_line no ponto mais alto dos últimos 36 pontos altos - página 2

 

Não me importo com o fechamento do estojo, então apenas o K% atual é suficiente.

código para objetos de verificação:

 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);
  }
//+------------------------------------------------------------------+
 

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 :)

 
cichichan:

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 :)


datetime L=Time[low_nr];
string Ldate = TimeToStr(L,TIME_DATE|TIME_MINUTES);

é a hora em que você cria sua linha ??? como fazer isso ??

 int i, ot=ObjectsTotal()-1;
string id=ObjectName (i);

for (i=ot;i>=0;i--)
{
   if (StringSubstr(id,0,7)=="tomato ")
      {
       //  line found
      }
}

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

 
cichichan:

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.

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))
         {
         Print ("tomato valid");
         break;
         }
      }
}

 if (ot==-1)
      {
      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);
         }
      }  
//---


////////////////////////////////////////////////////////////////////////////////
for (i=ot;i>=0;i--)
{
 if (StringSubstr(id,0,6)=="olive ")
      {
      if (StringSubstr(id,6,16)<TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         ObjectDelete(id);
         }
      if (StringSubstr(id,6,16)>TimeToStr(Time[96],TIME_DATE|TIME_MINUTES))
         {
         Print ("olive valid");
         break;
         }   
      }  
 }      

///////////////////////////////////////////////////////////////////////////////
if (ot==-1)
{
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);
  }
 

isto funciona ?

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.

 

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:

void LevelSset()
{

stoch=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,0);


high_bar=iHighest(NULL,0,MODE_HIGH,34,2);
string H=TimeToStr(Time[high_bar],TIME_DATE|TIME_MINUTES);
LSell=High[iHighest(NULL,0,MODE_HIGH,34,2)];


if(Bid<LSell && High[0]<LSell && High[1]<LSell && stoch>75 && LevelSset==false)
         {
         ObjectCreate("tomato "+H,OBJ_ARROW,0,Time[high_bar],LSell+Point*20);
         ObjectSet("tomato "+H,OBJPROP_ARROWCODE,242);
         ObjectSet("tomato "+H,OBJPROP_COLOR,Tomato);
         LevelSset=true;
         Print("LevelSset on "+LSell);
         }
if (Close[2]>LSell && Close[1]>LSell && LevelSset==true)
   {
      LSell=0;
      LevelSset=false;
      Print ("LSell"+LSell+"expired due to close");
   }
}

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