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

 
wolfovik:

Aiuta a risolvere un problema!

L'EA nel tester si blocca quando si usa la funzione ICustom. Ci sono soluzioni al problema?

Inoltre, nello Strategy Tester, c'è un errore costante PB Trade EURUSD,H1: OrderSend error 130

Anche se le fermate sono a 300 punti!

ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-300*Point,Bid+300*Point);

Non funziona così!

RefreshRates();
ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,Bid-300*Point,Bid+300*Point);

Dove ho sbagliato?


 
Dmitry01110:
Ciao, potresti dirmi come modificare un file creato dalla funzione FileOpen, per esempio cancellare un byte dalla posizione corrente e inserirne un altro al suo posto!


Anch'io sto cercando di fare qualcosa di simile.

C'è un file *.csv con una sola colonna, cioè le cifre in esso vanno una sotto l'altra. Sto cercando di fare in modo che ogni volta che una cifra viene utilizzata, c'è un'icona accanto ad essa, che indica che questa cifra è già stata utilizzata dall'EA.

Potete preparare un file *.csv con due colonne - [NUMBER]; [SIGN].

 
wolfovik:

Anche nel tester c'è un errore costante PB Trade EURUSD,H1: OrderSend error 130

Anche se gli stop sono a 300 pips!

Non funziona così!

Dove ho sbagliato?


I prezzi calcolati nell'ordine di compravendita devono essere normalizzati in cifre:

ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,NormalizeDouble(Bid-300*Point,Digits),NormalizeDouble(Bid+300*Point,Digits));

È anche necessario controllare i valori degli ordini di stop per la validità rispetto ai requisiti di StopLevel:

input int  StopLoss    =  300;   // Значение Stop Loss в пунктах
input int  TakeProfit  =  300;   // Значение Take Profit в пунктах
int   level=0, spread=0;
//+------------------------------------------------------------------+
//|   Старт                                                          |
//+------------------------------------------------------------------+
void OnTick() {
   level=MarketInfo(Symbol(),MODE_STOPLEVEL);
   spread=MarketInfo(Symbol(),MODE_SPREAD);
   if(level==0) level=spread*2;
//---
   int    ticket=0;
   double sl=0, tp=0;
   if(StopLoss>0) sl=NormalizeDouble(MathMin(Bid-StopLoss*Point,Bid-(level+1)*Point),Digits);
   if(TakeProfit>0) tp=NormalizeDouble(MathMax(Bid+TakeProfit*Point,Bid+(level+1)*Point),Digits);
   ticket = OrderSend(Symbol(),OP_BUY,0.1,Ask,5,sl,tp);
   return;
}

Per Buy, circa così

 
Dmitry01110:
Ciao, potresti dirmi come modificare un file creato con la funzione FileOpen, ad esempio cancellare un byte dalla posizione corrente e inserirne un altro al suo posto!
Si chiama l'intero testo del file in una variabile stringa, lo si modifica come variabile semplice, poi si chiama il file solo in scrittura e si restituisce la variabile.
 
Roger:
Si chiama l'intero testo di un file in una variabile stringa, lo si modifica come una variabile semplice, poi si chiama quel file in sola scrittura e si restituisce quella variabile.

Cosa succede se il numero di caratteri nel file supera la dimensione massima di caratteri nella variabile stringa?
 
L'ho capito un po'! Per sostituire un valore in qualche posizione del file, basta mettere un puntatore al byte precedente usando FileSeek, e poi, usando FileWriteInteger, per esempio, scrivere lì un nuovo valore, che sovrascriverà quello vecchio. La cosa principale è che i valori vecchi e nuovi dovrebbero essere della stessa dimensione, ad esempio LONG_VALUE per int.
 
Oggi ho fatto aggiornare il mio terminale. Ora non può vedere gli indicatori... Cosa fare e se l'ho messo correttamente. Nella stessa cartella (percorso) di prima.
 

for(int l = StringLen(tfs)-1; l >= 0; l--) { int char = StringGetChar(tfs,l); }

C'è un errore nel codice. Perché "char" ha giurato? Come e con cosa posso sostituirlo?

 
artmedia70:
Cosa succede se il numero di caratteri nel file supera la dimensione massima di caratteri nella variabile stringa?

Non c'è limite alla variabile stringa. O meglio, c'è, ma è molto grande. Per MT4 dalla build 529 è 2147483647 caratteri e 2 volte meno se MT4 è in 32-bit OS. E non è sempre così. Ci sono diverse chiavi e PAE.

Dmitry01110:
L'ho capito un po'! Per sostituire un valore in qualche posizione del file, basta mettere un puntatore al byte precedente usando FileSeek e poi, usando FileWriteInteger, per esempio, scrivere lì il nuovo valore, che sovrascriverà quello vecchio. La cosa principale è che i valori vecchi e nuovi devono essere della stessa dimensione, ad esempio LONG_VALUE per int.
Sì, e per CSV il numero di caratteri deve corrispondere.

Zolotai:

for(int l = StringLen(tfs)-1; l >= 0; l--) { int nChar = StringGetChar(tfs,l); }

C'è un errore nel codice. Perché "char" ha giurato? Come e con cosa posso sostituirlo?

 
cp
Motivazione: