[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 505

 
eugggy:
bar è lo spostamento della barra attuale rispetto al tempo impostato nelle impostazioni esterne (Start_Point).

bar = ?? al momento di cancellare cosa?
 
ask: Devi essere scortese?

Ora sei scortese: non c'è ancora una dichiarazione del problema, e quello che hai scarabocchiato non è niente, nemmeno uno pseudo-codice.

E pensi che ti abbia mandato dai telepati in modo sbagliato?

 
sergeev:

bar = ?? al momento di cancellare cosa?
Si spera al suo valore precedente. Cioè se non ho bisogno del documento alla scadenza della barra devo cancellarlo.
 
eugggy:
Spero che il suo valore precedente

Beh, speriamo solo che funzioni.

 
sergeev:

Beh, spera solo che funzioni.



:-) Non puoi semplicemente indicare l'errore?
 
eugggy:
:-) Non puoi semplicemente indicare l'errore?

:) ma per rispondere alla domanda che bar=??, non puoi farlo?
 
sergeev:

:) ma non puoi rispondere alla domanda quale barra=??, puoi farlo?
Beh, l'argomento è per i neofiti, e se fossi sicuro di cosa sia la barra al momento della cancellazione, allora forse l'EA funzionerebbe. Penso di sì: quando il documento viene chiuso, cioè appare una nuova barra, la variabile bar aumenta il suo valore di 1. Nella funzione di cancellazione, metto bar-1, cioè il numero del documento già chiuso e se la barra precedente non soddisfa il criterio specificato, il documento, nel cui valore il numero = il valore attuale della variabile bar meno 1, viene cancellato. L'errore potrebbe essere perché sto cancellando un documento già cancellato?
 

nessuno ha notato l'errore, quindi ancora una volta.

Potresti dirmi l'errore nel codice? grazie.

//+------------------------------------------------------------------+
//| line.mq4 |
//| |
//| ||
//+------------------------------------------------------------------+
//--- parametri di input
extern bool sell = 1; // permesso di vendere
extern bool buy = 1;
extern double lots = 0.1;
extern int sl = 50;
extern int tp = 150;

extern int order = 10; //

extern double bez = 15;
extern double tral_step = 15;
extern double tral_start = 10;

//+------------------------------------------------------------------+
//| funzione di inizializzazione esperto |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperta |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//|funzione di avvio esperto |
//+------------------------------------------------------------------+
int start()
{
//----
string sell_stop ="ss"; //nomina la linea manualmente
string buy_stop ="bs";

//buy------------------------------------------------------------------------------------------------

// trova la linea e piazza un ordine quando il prezzo tocca
if (ObjectFind (buy_stop) > 0 ) // se esiste la linea buy_stop
if ( ObjectGet (buy_stop, OBJPROP_PRICE1=Ask )// tocca la linea
{
OrderSend (Symbol(),OP_BUYSTOP, lots, Ask+Point*order,3, Bid-sl*Point, Bid+tp*Point );// invia ordine
ObjectDelete (buy_stop); // la linea viene rimossa
}


return(0);
}
//+-------------------------

 
TESKATLIPOKA:

Nessuno ha notato l'errore, quindi ancora una volta.

puoi dirmi l'errore nel codice? grazie.


Eccoli qui (ci sono molti più errori nel tuo codice, ma questi non passeranno nemmeno attraverso il compilatore):

.
if ( ObjectGet (buy_stop, OBJPROP_PRICE1=Ask )// касание линии
E anche se cambiate il codice in qualcosa di più sano dal punto di vista del compilatore:

if ( ObjectGet (buy_stop, OBJPROP_PRICE1) == Ask )// касание линии

Se non si conosce l'errore, sarà comunque teoricamente sbagliato senza una preventiva normalizzazione dei valori reali prima del confronto. Ancora peggio, la normalizzazione può fallire se il prezzo cambia di più di un pip in un tick e la tua condizione scivola via.

È più corretto trovare la condizione di attraversamento nel modo seguente:

if (ObjectGet (buy_stop, OBJPROP_PRICE1) <= High[0]) && (ObjectGet (buy_stop, OBJPROP_PRICE1) >= Low[0]))//  на текущей свече касание линии уже имело место


P.S. In MetaTrader, trovare il punto di errore dopo la compilazione è abbastanza facile:

1. Nella scheda "Toolbox", nel campo "File", specificate il numero di riga e il numero del simbolo in cui il compilatore ha rilevato un errore, separati da virgole.

2. Se fate doppio clic sul messaggio di errore nella colonna "Descrizione" della stessa scheda, il cursore nell'editor salterà al punto in cui il compilatore ha rilevato l'errore.

 
eugggy:
Beh, l'argomento è per i neofiti, e se fossi sicuro di cosa fosse la barra al momento della cancellazione, forse l'EA funzionerebbe.
Quindi chiedetemi come scoprire qual è la barra.
Motivazione: