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
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
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); }
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); }
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
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.
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