Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 95

 
hoz:

Sì. Le variabili con i_ sono variabili di input (dalla parola intut, che può essere modificata dall'utente...), e pt è anche una variabile globale, che è visibile ovunque...

No, il lotto non è stato normalizzato. Non l'ho mai incontrato nel tester... E cosa c'entra il lotto con l'oggetto (errore 4200)?

Cosa c'entra il lotto? Se il lotto non è valido, viene chiamata la funzione di gestione degli errori, che causerà la costruzione di oggetti.

Se il lotto è sbagliato, ci sarà un errore nel tester. Voi dite che non costruite oggetti, ma nella funzione

void pr (string txt)

costruisce ancora oggetti:

if(info[i]!=""){
cm=info[i];
ObjectCreate ("txtw"+i,OBJ_LABEL,0,0,0);
ObjectSet    ("txtw"+i,OBJPROP_CORNER,1);
ObjectSet    ("txtw"+i,OBJPROP_XDISTANCE,10);
ObjectSet    ("txtw"+i,OBJPROP_YDISTANCE,30+15*i);
ObjectSetText("txtw"+i,cm, 10, "Times New Roman", Green);}

Probabilmente è lì che è sepolto il bug. Forse dovrete fare qualcosa lì. Commentate l'output del grafico in questa funzione. Se l'errore non c'è più, cercate la ragione che c'è dietro nella funzione.

void pr (string txt)
 
vovak_85:

Ciao, sono nuovo della programmazione mql. Ho un problema, ho un indicatore personalizzato, non scritto da me, genera segnali di acquisto e vendita sotto forma di frecce, per questo scopo ci sono due buffer nell'indicatore, il problema è che non riesco a leggere correttamente i segnali dall'indicatore all'Expert Advisor per fare un acquisto o una vendita.

Il codice dell'indicatore:

...

Per incollare correttamente il codice nel forum cliccate sull'SRC e poi copiate il codice.

 

Ciao, sono nuovo della programmazione mql. Ho un problema, ho un indicatore personalizzato, non scritto da me, genera segnali di acquisto e vendita sotto forma di frecce, per questo scopo ci sono due buffer nell'indicatore, il problema è che non riesco a leggere correttamente i segnali dall'indicatore all'Expert Advisor per fare un acquisto o una vendita.

Codice indicatore:

#property indicator_chart_window

#property indicator_buffers 7

#property indicator_color1 Red

#property indicator_color2 MediumBlue

#property indicator_color3 Red

#property indicator_color4 MediumBlue

#property indicator_color5 Blue

#property indicator_color6 Red

#property indicator_color7 Blue


extern int MM = 3;

extern int MP = 20;

double a[];

double b[];

double c[];

double d[];

double e[];

double g[];

double h[];

int x = 0;


int init() {

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 1, Red);

SetIndexBuffer( 0, a );

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 1, MediumBlue);

SetIndexBuffer(1, b);

SetIndexStyle(2, DRAW_HISTOGRAM, STYLE_SOLID, 2, Red);

SetIndexBuffer(2, c);

SetIndexStyle(3, DRAW_HISTOGRAM, STYLE_SOLID, 2, MediumBlue);

SetIndexBuffer(3, d);

SetIndexStyle(4, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(4, e);

SetIndexArrow(4, 233);

SetIndexStyle(5, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer( 5, g );

SetIndexArrow(5, 234);

SetIndexStyle(6, DRAW_ARROW, STYLE_SOLID, 3);

SetIndexBuffer(6, h);

SetIndexArrow(6, 233);

SetIndexDrawBegin(0, 5);

SetIndexBuffer( 0, a );

SetIndexBuffer(1, b);

SetIndexBuffer(2, c);

SetIndexBuffer(3, d);

return (0);

}


int deinit() {

return (0);

}


int start() {

double qw;

double qe;

double qr;

double qt;

double as;

double ad;

double af;

double ag;

int i,razmer;


if (Bars <= 10) return (0);

x = IndicatorCounted();

if (x < 0) return (-1);

if (x > 0) x--;

for (int zx = Bars - x - 1; zx >= 0; zx--) {

qw = iMA(NULL, 0, MP, 0, MM, PRICE_CLOSE, zx);

qe = iMA(NULL, 0, MP, 0, MM, PRICE_LOW, zx);

qr = iMA(NULL, 0, MP, 0, MM, PRICE_OPEN, zx);

qt = iMA(NULL, 0, MP, 0, MM, PRICE_HIGH, zx);

as = (c[zx + 1] + (d[zx + 1])) / 2.0;

ag = (qw + qt + qr + qe) / 4.0;

ad = MathMax(qt, MathMax(as, ag));

af = MathMin(qr, MathMin(as, ag));

if (as < ag) {

a[zx] = af;

if (a[zx] < b[zx] && a[zx + 1] < b[zx + 1] && a[zx + 2] > b[zx + 2] && a[zx + 3] > b[zx + 3])

e[zx] = af - 10.0 * Point;

else{

razmer=ArrayRange(4,1);

for (i=1;i<razmer;i++)

e[i]=0; }

b[zx] = ad;

} else {a[zx] = ad;

b[zx] = af;

if (a[zx] > b[zx] && a[zx + 1] > b[zx + 1] && a[zx + 2] < b[zx + 2] && a[zx + 3] < b[zx +

3]) g[zx] = af + 10.0 * Point;

}

c[zx] = as;

d[zx] = ag;

}

return (0);

}
Код советника для получения значений из индикатора и совершения сделки
double L_B=iCustom(0,0,"Makedonskii",MM,MP,0,4);

double L_S=iCustom(0,0,"Makedonskii",MM,MP,0,5);

if (L_B!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Ask, 10, Bid - 15*Point, Ask + 15*Point, "", MagicNumber, 0, Green);

if (L_S!=0) Ticket=OrderSend (Symbol(), OP_BUY, Lot, Bid, 10, Ask + 15*Point, Bid - 15*Point, "", MagicNumber, 0, Green);
Кому несложно подскажите как правильно получать значения на покупку и продажу
 
vovak_85:
Lo saprò, grazie! Sistemare?
Corretto nel tuo post precedente.
 
vovak_85:
Lo saprò, grazie! Sistemare?
Certo! Eliminando un inutile guastafeste!
 
hoz:

pr è una funzione di stampa. E l'errore, questo è già una costante standard. Logicamente, questo non è assolutamente accettabile. Se sospettate ancora della funzione pr, eccola qui:


Bene, sostituiscilo con la solita stampa e guarda il registro.

lì oggetto viene creato, il nome dell'oggetto non è unico, ecco perché c'è un errore quando si crea un oggetto.

 
artmedia70:

Cosa c'entra questo con il lotto? Se il lotto è sbagliato, allora la funzione di gestione degli errori viene chiamata e causerà la costruzione di oggetti.

Se il lotto è sbagliato, ci sarà un errore anche nel tester. Voi dite che non costruite oggetti, ma nella funzione

gli oggetti sono ancora in costruzione:

Probabilmente è qui che si trova il problema. Forse dovrete fare qualcosa lì. Commentate l'output del grafico in questa funzione. Se l'errore è sparito, cercate la causa dell'errore nella funzione



Ci avevo già pensato anch'io, e la tua risposta ha colpito lo stesso punto. Il problema è scomparso commentando i posti con questa funzione. A quanto pare, quando lo si usa, bisogna cancellare tutti gli oggetti nell'input in una volta sola, giusto? Cioè all'inizio della funzione pr, voglio dire.
 
hoz:

Ci avevo già pensato anch'io, e solo ora la tua risposta ha colpito lo stesso punto. Il problema è scomparso commentando i posti con questa funzione. A quanto pare, quando lo si usa, bisogna cancellare tutti gli oggetti sull'input in una volta sola, giusto? Cioè all'inizio della funzione pr, voglio dire...

Sinceramente non conosco la logica della vostra funzione. Se debba cancellare gli oggetti o costruirli, non lo so. Dimmi cosa vuoi che faccia e vedremo dove la logica è sbagliata. Tuttavia, se la funzione cerca di costruire un oggetto grafico ma fallisce, significa che esiste già. Qual è il prossimo passo logico nel suo programma? Potete costruire un nuovo oggetto con un nome diverso (per esempio, aggiungete l'ora corrente al nome dell'oggetto (TimeToStr(TimeCurrent()))) o, se avete già un oggetto ma dovete cambiare le sue proprietà, non costruitelo di nuovo, ma cambiate semplicemente le sue proprietà. Poi l'errore non apparirà più.

È così semplice. La cosa principale è sapere cosa vuoi. :)

 
vovak_85:

Ciao, sono nuovo della programmazione mql. Ho un problema, ho un indicatore personalizzato, non scritto da me, genera segnali di acquisto e vendita sotto forma di frecce, per questo scopo ci sono due buffer nell'indicatore, il problema è che non riesco a leggere correttamente i segnali dall'indicatore all'Expert Advisor per fare un acquisto o una vendita.

Codice indicatore:


Sei sicuro di avere tutte le parentesi graffe al loro posto. Mancano in alcuni punti. Ecco perché la tua logica è difettosa. E molto probabilmente il risultato non è quello che vi aspettavate.
Motivazione: