tracciando la H_line sul massimo più alto degli ultimi 36 massimi

 

Ciao

ho provato a scrivere nel codice questo:

quando la linea K% dello stocastico(80,30,30) > 75, guarda indietro di 36 barre (34,shift 2) e disegna una H_line "pomodoro" dal massimo più alto alla barra attuale.

quando la linea K% dello stocastico(80,30,30) < 25, guarda indietro di 36 barre (34,shift 2) e disegna una H_line "oliva" dal minimo più basso alla barra corrente.

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 eseguo questo ottengo il primo setup per il pomodoro e per l'oliva ok, poi anche se in journal ottengo "tomato ON" diverso lvl di prezzo, non ottengo nuova linea di pomodoro sul grafico. stesso per l'oliva.

l'idea dell'ea è di usare queste linee per aprire operazioni. quindi quello che voglio alla fine è avere questo:

quando K%>75

disegna la linea o più alta (dopo 36 barre).

se la linea è ON, non disegna altre linee, fino a quando la linea viene cancellata.

se un trade è aperto cancella la linea

se nessun trade è aperto e sono passate 24 barre dalla barra che ha determinato k%>75 cancella anche la linea

:)

come è il mio primo codice che ho scritto nella mia vita buca, pls insegnarmi come guardare il problema.

grazie

 

bisogno di un nome diverso

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

dopo

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

il codice mette 25 linee, sullo stesso prezzo, ma partendo non dalla candela low_nr (che è sempre 10, non importa quale sia il numero reale dopo stoch <25), ma dalla candela 35.

lo stesso per il pomodoro.

:(

 

Una volta che un oggetto è stato creato, non si può creare un altro oggetto con lo stesso nome.

Ecco perché funziona bene la prima volta, ma non dopo (nel tuo codice originale)

Se volete che solo l'ultima linea che soddisfa i criteri venga mostrata sul vostro grafico, create la linea in init e poi usate ObjectMove per spostare l'oggetto alle sue nuove coordinate.

Se volete che tutte le linee passate vengano mostrate,

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

Poiché high_nr è lo spostamento della barra, sarà probabilmente replicato in un momento successivo, quindi non funzionerà correttamente. Usa il datetime nel nome e allora sarà unico

 
Puoi specificare cosa stai cercando di ottenere?
 
cichichan:

Ciao

ho provato a scrivere nel codice questo:

quando la linea K% dello stocastico(80,30,30) > 75, guarda indietro di 36 barre (34,shift 2) e disegna una H_line "pomodoro" dal massimo più alto alla barra attuale.

quando la linea K% dello stocastico(80,30,30) < 25, guarda indietro di 36 barre (34,shift 2) e disegna una H_line "oliva" dal minimo più basso alla barra attuale.

quando eseguo questo ottengo il primo setup per il pomodoro e per l'oliva ok, poi anche se in journal ottengo "tomato ON" diverso lvl di prezzo, non ottengo nuova linea di pomodoro sul grafico. stesso per l'oliva.

l'idea dell'ea è di usare queste linee per aprire operazioni. quindi quello che voglio alla fine è avere questo:

quando K%>75

disegna la linea o più alta (dopo 36 barre).

se la linea è ON, non disegna altre linee, fino a quando la linea viene cancellata.

se un trade è aperto cancella la linea

se nessun trade è aperto e sono passate 24 barre dalla barra che ha determinato k%>75 cancella anche la linea

:)

come è il mio primo codice che ho scritto nella mia vita buca, pls insegnarmi come guardare il problema.

grazie

Partiamo dall'inizio .....

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

A barra 0 stoch può ottenere da qualche parte a barra 0 valore > 75 e finire con valore inferiore

Ha per disegnare una linea in quel caso ?? o è solo per chiudere prezzo stocastico finisce ??

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

ha mai usato iHighest e/o iLowest? Vedere come fare iHighest e iLowest

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

se(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);
     }
       
}

una volta la creazione è sufficiente .... il ciclo fa solo ripetere ciò che è dentro { }

quindi nessun ciclo necessario per questo ....

poi prima di creare

  • controlla le compravendite in corso
  • controlla se l'oggetto con il nome che inizia con "tomato" esiste già e se esiste allora controlla se devi cancellare quello vecchio

creare un nome nel momento in cui lo fai come

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

controllare i vostri oggetti possono con

//----
   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 ")
         {
         //.....
         }
    }

Clicca sui link e cerca di capire cosa succede

posti con ....... all'interno del codice potete provare a riempire voi stessi

 
qjol:
puoi specificare cosa stai cercando di realizzare?


l'idea finale:

Segnale 1 = quando K%>75 e il massimo della barra[1] e della barra attuale[0] è più piccolo del massimo più alto delle ultime 36 barre (High_point)

disegna la linea del pomodoro su High_point

se la linea del pomodoro è già disegnata, non disegna altre linee, finché la linea non viene cancellata.

se una negoziazione è aperta usando la linea del pomodoro cancella la linea

se nessuna operazione è aperta e sono passate 96 barre dalla barra che ha determinato il Punto_Alto cancella la linea.

Ora, ottengo solo una linea su ogni Signal 1(la funzione Print invia 36 "tomato ON" ogni tick valido credo), quindi devo dire al codice di fermare il ciclo dopo aver trovato la linea tomato. vado a cucinare qualche spaghetto e penso a come dovrei scriverlo... nella mia testa questo dovrebbe essere il prossimo passo.... spero di non essermi perso qualcosa :)

Sono sulla strada giusta? Grazie mille per il vostro aiuto e consiglio.

il codice fino ad ora:

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

Ho postato nello stesso tempo con il post di deVries.

Vado a leggere :)

 
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. non ha bisogno di una linea per farlo

 

Il caso di cui stai parlando cichan accadrà raramente, quindi devi usare un indice in modo da poter vedere cosa fai:

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

La freccia_giù non appare, c'è un bug da qualche parte ....

//+------------------------------------------------------------------+
//|                                                      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);
  }
 
per il suo n indicatornot n EA
Motivazione: