[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non potrei andare da nessuna parte senza di te - 2. - pagina 53

 

Ho notato una tale sfumatura quando prescrivo una stampa nel mio EA, cioè:

double Up = iCustom(NULL, 0, "best div original", "*** CCI-OnArray Settings ***", 12, 3, 5, 25, "*** Indicator Settings ***", false, false, false, 0, 1);

Stampa ("+++++++++++++", Su);

l'Expert Advisor mostra il seguente risultato - ++++++++++++++ 2147483647. Vedo lo stesso numero anche per i buffer up e down. Per favore, consigliate che tipo di codice è questo? E come "ottenere" il valore da Ikastom esattamente quando appare la freccia?

 

Chiedo un piccolo aiuto alle persone competenti: per favore, consigliatemi il codice corretto per creare un Expert Advisor/Utility il cui algoritmo è il seguente:

- l'apertura di una doppia operazione in UNA direzione (lotti 0.1 e 0.1) viene effettuata al momento dell'incrocio basso (vendita) / alto (acquisto) dell'ultima candela formata nel grafico corrente / time frame corrente con uno stop vicino all'alto / basso della candela, all'incrocio della quale ha aperto una determinata operazione e ponendo nello stesso punto l'ordine pendente doppia operazione in una direzione con lotti, come 0.2 e 0.1.

 

Domanda:

C'è un codice

int start()

se (H==TimeHour(TimeCurrent()) && M==TimeMinute(TimeCurrent()) && S==TimeSeconds(TimeCurrent())

{+ alcune condizioni

Poi l'ordine viene aperto

Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,2,SL,TP);
if (Ticket > 0)
Alert ("Buy order opened ",Ticket);

return;}

Ma se in questo momento non c'è nessun tick non si attiva

Ma se gli do più tempo per pensare può aprire diversi ordini.

Dovrei avere un solo ordine senza prestare attenzione agli ordini già aperti.

Si prega di consigliare cosa fare

 
v2812:

Ho notato una tale sfumatura quando prescrivo una stampa nel mio EA, cioè:

double Up = iCustom(NULL, 0, "best div original", "*** CCI-OnArray Settings ***", 12, 3, 5, 25, "*** Indicator Settings ***", false, false, false, 0, 1);

Stampa ("+++++++++++++", Su);

l'Expert Advisor mostra il seguente risultato - ++++++++++++++ 2147483647. Vedo lo stesso numero anche per i buffer up e down. Per favore, consigliate che tipo di codice è questo? E come "ottenere" il valore da Ikastom esattamente quando appare la freccia?


Provate a passare i valori degli indicatori non attraverso iCustom() ma attraverso le variabili globali del terminale. Questi sono quelli che si possono vedere da F3. La questione è che non è una situazione rara quando è l'unico modo normale di trasmissione dei dati. Ho avuto casi simili.

È molto probabile che nel vostro indicatore alcuni tipi di frecce siano disegnati attraverso il buffer dell'indicatore, mentre altri sono creati come oggetti. Questa è l'unica ragione per cui non ci possono essere i prezzi delle frecce nella finestra dei dati - i dati vengono emessi in questa finestra dai buffer degli indicatori.

 
palesandr:

Domanda:

C'è un codice

int start()

se (H==TimeHour(TimeCurrent()) && M==TimeMinute(TimeCurrent()) && S==TimeSeconds(TimeCurrent())

{+ alcune condizioni

Poi l'ordine viene aperto

Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,2,SL,TP);
if (Ticket > 0)
Alert ("Buy order opened ",Ticket);

return;}

Ma se in questo momento non c'è nessun tick non si attiva

Ma se gli do più tempo per pensare può aprire diversi ordini.

Dovrei avere un solo ordine senza prestare attenzione agli ordini già aperti.

Si prega di consigliare cosa fare


Il codice EA si attiva SOLO quando arriva un nuovo tick. Viene aperto più di un ordine perché al prossimo tick il segnale di setup è anche vero e non c'è controllo sul numero di ordini. Dobbiamo ricalcolare gli ordini.
 
drknn:


Provate a passare i valori degli indicatori non attraverso iCustom(), ma attraverso variabili di livello globale del terminale. Questi sono quelli che possono essere visualizzati da F3. La questione è che non è una situazione rara quando è l'unico modo normale di trasmissione dei dati. Ho avuto situazioni simili.

È possibile che nel vostro indicatore alcuni tipi di freccia siano disegnati attraverso un buffer dell'indicatore e altri siano creati come oggetti. Questa è l'unica ragione per cui non ci possono essere prezzi impostati con la freccia nella finestra dei dati - i dati vengono emessi in questa finestra dai buffer degli indicatori.


Grazie mille! Ora cercherò di prescrivere come hai detto tu.
 
palesandr:
Ma se non c'è nessun tick a questo punto, non viene attivato

e se gli dai più tempo per pensare, può aprire diversi ordini.

Ma ne ho bisogno solo di uno e non voglio che presti attenzione agli ordini che sono già aperti.

Puoi dirmi cosa fare
?


1. Il datetime globale last_dt;


2. Fare il tempo corretto

datetime dt=StrToTime(H+": "+M+": "+S);


3.

if (TimeCurrent()>=dt && last_dt<dt) // il tempo giusto è arrivato ed è il giorno successivo

{

// aprire l'ordine

if (ticket>0) last_dt=TimeCurrent(); // ricorda il tempo di apertura

}

 
v2812:

allora l'EA dà il seguente risultato - ++++++++++++++ 2147483647. E lo stesso numero per entrambi i buffer di salita e di discesa.

2147483647 - questa è la costante EMPTY_VALUE
 

Lo capisco.

Devo essere più specifico sul ricalcolo dell'ordine. Forse un esempio (in forma di codice) o un link.

Ho provato così

if (Ticket > 0)
Alert ("Opened Buy order ",Ticket);

sleep (10000)
return;}

fallito per qualche motivo

drknn:

Il codice EA si attiva SOLO quando arriva un nuovo tick. L'ordine ne apre più di uno perché al prossimo tick anche il segnale impostato è vero e non c'è nessun controllo del numero di ordini. Dobbiamo ricalcolare gli ordini.
 

Voglio che il software ignori la data, solo l'ora è importante

Il tuo consiglio funzionerà in questo caso?

sergeev:


1. Dataetime globale last_dt;


2. rendere il tempo corretto

datetime dt=StrToTime(H+": "+M+": "+S);


3.

if (TimeCurrent()>=dt && last_dt<dt) // è l'ora giusta ed è il giorno successivo

{

//ordine aperto

if (ticket>0) last_dt=TimeCurrent(); // ricorda l'ora di apertura

}