desenho H_line no ponto mais alto dos últimos 36 pontos altos

 

Olá

Eu tentei escrever em código isto:

quando K% linha de estocástico(80,30,30) > 75, olhe para trás 36 barras (34,turno 2) e desenhe uma linha H_line "tomate" da maior altura para a barra atual.

quando K% linha de estocástico(80,30,30) < 25, olhe para trás 36 barras (34,turno 2) e desenhe uma linha H_line "oliveira" da barra mais baixa baixa para a barra atual.

int start()
  {

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];

/////////////////////////////////////////////////////////////////////////////////
for(high_nr=2;high_nr<36;high_nr++)
{

   if(Bid<high_price && stoch>75)
     {
      ObjectCreate("tomato",OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato",OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+high_price);
     }
       
}
///////////////////////////////////////////////////////////////////////////////
for(low_nr=2;low_nr<36;low_nr++)
{
if(Bid>low_price && stoch<25)
   {
   ObjectCreate("olive",OBJ_TREND,0,Time[low_nr],low_price,Time[0],low_price);
   ObjectSet("olive",OBJPROP_COLOR,Olive);
   Print ("olive ON"+low_price);
   }
}   
   
   
//----
   
//----
   return(0);
  }

quando eu executar isto eu recebo a primeira configuração para o tomate e para a azeitona ok, então mesmo se no diário eu recebo "tomate ON" diferente preço lvl, eu não recebo nova linha de tomate no gráfico. o mesmo para a azeitona.

a idéia da ea é usar esta linha para abrir negócios. então o que eu finalmente vou querer é ter isto:

quando K%>75

linha de traço o mais alto(depois de 36 barras).

se linha ON, não desenhar mais linhas, até que a linha seja apagada.

se um comércio estiver aberto, apagar a linha

se nenhum comércio estiver aberto e 24 barras passadas da barra que determinou k%>75 também apagar a linha

:)

como é meu primeiro código que escrevi em minha vida de buraco, as pls me ensinam a olhar para o problema.

Obrigado.

 

precisam de um nome diferente

      ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato " + high_nr,OBJPROP_COLOR,Tomato);
 

depois de

   ObjectCreate("olive"+low_nr,OBJ_TREND,0,Time[low_nr],low_price,Time[0],low_price);
   ObjectSet("olive"+low_nr,OBJPROP_COLOR,Olive);

o código coloca 25 linhas, no mesmo preço, mas começando não a partir da vela low_nr (que é sempre 10, não importa qual é o número real após a estocagem <25), mas a partir da vela 35.

o mesmo para o tomate.

:(

 

Uma vez criado um objeto, não se pode criar outro objeto com o mesmo nome.

É por isso que ele funciona bem pela primeira vez, mas não depois disso (em seu código original).

Se você quiser ter apenas a última linha que atende aos critérios mostrados em seu gráfico, crie a linha no init e depois use ObjectMove para mover o objeto para suas novas coordenadas.

Se você quiser que todas as linhas passadas sejam mostradas,

ObjectCreate("tomato " + high_nr,OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);

Como o high_nr é o bar shift, ele provavelmente será replicado em um momento posterior, portanto, não funcionará corretamente. Use a data/hora no nome e então ela será única

 
vocêpode especificar o que você está tentando realizar ?
 
cichichan:

Olá

Eu tentei escrever em código isto:

quando K% linha de estocástico(80,30,30) > 75, olhe para trás 36 barras (34,turno 2) e desenhe uma linha H_line "tomate" da maior altura para a barra atual.

quando K% linha de estocástico(80,30,30) < 25, olhe para trás 36 barras (34,turno 2) e desenhe uma linha H_line "oliveira" da barra mais baixa baixa para a barra atual.

quando eu executar isto eu recebo a primeira configuração para o tomate e para a azeitona ok, então mesmo se no diário eu recebo "tomate ON" diferente preço lvl, eu não recebo nova linha de tomate no gráfico. o mesmo para a azeitona.

a idéia da ea é usar esta linha para abrir negócios. então o que eu finalmente vou querer é ter isto:

quando K%>75

linha de traço o mais alto(depois de 36 barras).

se linha ON, não desenhar mais linhas, até que a linha seja apagada.

se um comércio estiver aberto, apagar a linha

se nenhum comércio estiver aberto e 24 barras passadas da barra que determinou k%>75 também apagar a linha

:)

como é meu primeiro código que escrevi em minha vida de buraco, as pls me ensinam a olhar para o problema.

Obrigado.

Começamos no início .....

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

No bar 0 stoch pode chegar a algum lugar com valor de bar 0 > 75 e terminar com valor mais baixo

Tem de traçar uma linha nesse caso ?? ou é apenas para fins estocásticos de preço fechado ??

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];

alguma vez usado iHighest e/ou iLowest ??? Veja como fazer o iHighest e o iLowest

if(stoch > 75) high_price = High[iHighest(NULL,0,MODE_HIGH,......

if(stoch < 25) low_price = Low[iLowest(........

//-----

for(high_nr=2;high_nr<36;high_nr++)   // why do you repeat this ??
{

   if(Bid<high_price && stoch>75)
     {
      ObjectCreate("tomato",OBJ_TREND,0,Time[high_nr],high_price,Time[0],high_price);
      ObjectSet("tomato",OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+high_price);
     }
       
}

criar uma vez é suficiente .... o laço só faz repetir o que está dentro { }

portanto, não é necessário um loop para isso ....

então antes de você criar

  • verificação de operações em andamento
  • verificar se já existe um objeto com nome começando por "tomate" e se ele existe, então verifique se você tem que apagar o antigo

criar um momento de nome que você faça

linenamehigh =     "tomato  "+ TimeToStr(Time[0],TIME_DATE|TIME_MINUTES)

verificando sua lata de objetos com

//----
   int i, ot=ObjectsTotal()-1;
   string id;
//----
   for(i=ot;i>=0;i--)
    {id=ObjectName(i);
     if(StringSubstr(id,0,7)=="tomato ")
      {
      //check when created 
      if(StringSubstr(id,8,...)< TimeToStr(Time[24],........)){ObjectDelete(id);}
      }  
     if(StringSubstr(id,0,6)=="olive ")
         {
         //.....
         }
    }

Klick nos links e tente entender o que acontece

lugares com ....... dentro do código que você pode tentar preencher você mesmo

 
qjol:
vocêpode especificar o que você está tentando realizar ?


a idéia final:

Sinal 1 = quando K%>75 e alta de barra[1] e barra atual[0] menor que a maior alta dos últimos 36 bar(ponto_alto)

traçar linha de tomate em High_point

se a linha do tomate já estiver traçada, não desenhar mais linhas, até que a linha seja apagada.

se um comércio estiver aberto usando a linha de tomate, delete a linha

se nenhum comércio estiver aberto e 96 barras passadas da barra que determinou o ponto_alto apagar a linha.

agora, eu recebo apenas uma linha em cada Sinal 1(função de impressão envia 36 "tomate ON" cada tick válido, acho eu), então eu tenho que dizer ao código para parar o loop depois que ele encontrar a linha do tomate. eu vou cozinhar um pouco de esparguete e pensar como eu deveria escrever isso... na minha cabeça este deveria ser o próximo passo.... espero não estar perdendo algo :)

estou no caminho certo? muito obrigado por sua ajuda e conselhos.

o código até agora:

//+------------------------------------------------------------------+
//|                                                      1expert.mq4 |
//|                                                              ant |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "ant"
#property link      ""

#property indicator_chart_window

extern int Kperiod = 80;
extern int Dperiod = 30;
extern int Stochshift = 30;


//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

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];
datetime L=Time[low_nr];

/////////////////////////////////////////////////////////////////////////////////
for(high_nr=2;high_nr<36;high_nr++)
{

   if(Bid<high_price && High[0]<high_price && High[1]<high_price && stoch>75)
     {
      ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[0],high_price);
      ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+H);
     }
       
}
///////////////////////////////////////////////////////////////////////////////
for(low_nr=2;low_nr<36;low_nr++)
{
if(Bid>low_price && Low[0]>low_price && Low[1]>low_price && stoch<25)
   {
   ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[0],low_price);
   ObjectSet("olive"+L,OBJPROP_COLOR,Olive);
   Print ("olive ON"+low_price);
   }
}   
   
   
//----
   
//----
   return(0);
  }
 

afixei ao mesmo tempo com o correio deVries.

i go read :)

 
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];
datetime L=Time[low_nr];

if (stoch > 75 && High[1] < High[high_nr] && High[0] < High[high_nr])
   {
   ObjectCreate("tomato"+H,OBJ_TREND,0,Time[H],high_price,Time[0],High[0]);
   ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
   Print ("tomato ON"+H);   
   }

B.T.W. não precisa de uma linha para fazer isso

 

O caso de você estar falando de cichichan raramente vai acontecer, então você tem que usar um índice para que você possa ver o que você faz :

http://charts.mql5.com/3/799/eurusd-h1-fxpro-financial-services.png

A seta_para baixo não aparece, há um bug em alguns lugares onde ....

//+------------------------------------------------------------------+
//|                                                      lexpert.mq4 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "ant"
#property link      ""

#property indicator_chart_window
#property indicator_buffers 8
#property  indicator_color1 YellowGreen  
#property  indicator_color2 Coral


extern int Kperiod = 80;
extern int Dperiod = 30;
extern int Stochshift = 30;

 double arrow_up[];
 double arrow_down[];
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   //-------- 
   SetIndexBuffer(0, arrow_up );
   SetIndexStyle(0, DRAW_ARROW, STYLE_SOLID,2);
   SetIndexArrow(0,233);
   SetIndexEmptyValue(0,0.0);
//-------- 
   SetIndexBuffer(1,arrow_down);
   SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID,2);
   SetIndexArrow(1,234 );
   SetIndexEmptyValue(1,0.0);

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

   int    limit;
   int    counted_bars=IndicatorCounted();

   //---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars;
   //---- macd counted in the 1-st additional buffer
   for(int i=limit; i>=0; i--)
      { 

double stoch_1, stoch_2;
stoch_2=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+2);
stoch_1=iStochastic(NULL,0,Kperiod,Dperiod,Stochshift,MODE_SMA,1,MODE_MAIN,i+1);

double high_price,low_price;
int high_nr,low_nr;
high_nr=iHighest(NULL,0,MODE_HIGH,34,i+2);
high_price=High[high_nr];
low_nr=iLowest(NULL,0,MODE_LOW,34,i+2);
low_price=Low[low_nr];
datetime H=Time[high_nr];
datetime L=Time[low_nr];

/////////////////////////////////////////////////////////////////////////////////


   if(Bid<high_price && High[i]<high_price && High[i+1]<high_price && stoch_2<75 && stoch_1 >75)
     {
     arrow_down[i] =  High[i] + 5*iATR(NULL,0,200,i);
      ObjectCreate("tomato"+H,OBJ_TREND,0,H,high_price,Time[i],high_price);
      ObjectSet("tomato"+H,OBJPROP_RAY_RIGHT, false);
      ObjectSet("tomato"+H,OBJPROP_WIDTH,5 ); 
      ObjectSet("tomato"+H,OBJPROP_COLOR,Tomato);
      Print ("tomato ON"+H);
     }
    else    arrow_down[i] = 0.0;

///////////////////////////////////////////////////////////////////////////////

if(Bid>low_price && Low[i]>low_price && Low[i+1]>low_price &&  stoch_2>25 && stoch_1 < 25)
   {
   arrow_up[i] = Low[i] - 5*iATR(NULL,0,200,i);
   ObjectCreate("olive"+L,OBJ_TREND,0,L,low_price,Time[i],low_price);
   ObjectSet("olive"+L,OBJPROP_COLOR, Yellow );
   ObjectSet("olive"+L,OBJPROP_WIDTH,5 );
   ObjectSet("olive"+L,OBJPROP_RAY_RIGHT, false);
   Print ("olive ON"+low_price);
   }
   else  arrow_up[i] = 0.0;
   
//----
  } 
//----
   return(0);
  }
 
ffoorr its n indicatornot n EA