[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 233

 
hoz:

Quante volte ho usato il punto automatico, ma la prima volta non funziona.

Ecco Init()

Lo metto in qualsiasi posto del programma (in questo caso, anche nell'inizio dell'esperimento):

La funzione ritorna al registro:

Dov'è la logica?

VladislavVG mi ha detto:Perché alla funzione init() non è garantito il caricamento dei dati dello strumento finanziario.
 
GaNDarM:
VladislavVG me l'ha suggerito:perché nella fase della funzione init() non è garantito il caricamento dei dati dello strumento finanziario.

Quindi, il valore della variabile Point senza Init() dovrebbe restituire lo stesso...
 
hoz:
Perché dovrebbe esserci un'assurdità se la funzione restituisce specificamente il nome di un oggetto?
E siete sicuri al 100% che questa funzione funzionerà sempre e ovunque correttamente, non si bloccherà da qualche parte o si bloccherà su qualche nome di oggetto complicato, o voi stessi non ci inserirete accidentalmente il numero di un oggetto inesistente, tutto ad un tratto? E il risultato restituito dalla funzione non può essere usato per giudicare se ha lavorato correttamente o no. Questo è ciò che dice la documentazione. L'unico modo corretto è quello di ottenere il codice di errore e poi lavorarci intorno. Questo è il modo in cui ci si protegge dai propri (o altrui) errori.
 
hoz:

Quante volte ho usato il punto automatico, ma la prima volta non funziona.


Dov'è la logica?

Prova così:

int init()
{
   if (Digits == 2 || Digits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (Digits == 1 || Digits == 3 || Digits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Nemmeno così, ma così:

int init()
{
   int MyDigits = MarketInfo(Symbol(), MODE_DIGITS)
   if (MyDigits == 2 || MyDigits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (MyDigits == 1 || MyDigits == 3 || MyDigits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Perché Digits è una variabile interna, proprio come Piont.

Dovrebbe funzionare :)



 
hoz:

Quindi il valore della variabile Point senza Init() dovrebbe restituire lo stesso...

Non è un fatto... Point è una variabile interna del processore MQL e richiede un po' di tempo e alcune azioni di inizializzazione. Tutto questo di solito avviene solo prima che il processore chiami start() e nella fase di init() i valori delle variabili interne del processore potrebbero non essere impostati.
 
GaNDarM:


"Piangere" per questo:

ed ecco il registro:

18:25:09 IndikatorZZ GBPJPY,Daily: F_CYF INIT: DownL = 0 UpL = 0


Le variabili non sono int per caso?


Mi sono sorpreso così un paio di volte

 
ilunga:

Variabili per caso int?


Mi sono sorpreso a farlo un paio di volte


No, doppio. Cosa c'è di sbagliato nell'int, mi chiedo?
 
Salve, il giorno precedente si è verificata una situazione. Il 19.03.2013 intorno alle 17-00 GMT ho piazzato un ordine di Sell stop. Il prezzo aperto era 1,2903, Stop loss 1,2913, trailing stop 15 pips, M15, lotto -0,5. Come mostra la cronologia del conto, la posizione è stata aperta a 17-49. La posizione è stata chiusa alle 21:15 sempre da GMT con il profitto meno 90. Quando ho visto la storia, ho avuto un sacco di domande nella mia mente. Per esempio, perché la posizione è stata chiusa in cima al picco (vedi foto). Perché non è stato attivato il trailing stop, perché se avesse funzionato, il profitto sarebbe stato positivo, perché il movimento del prezzo era corretto. Dopo il trailing stop, uno stop loss non sarebbe stato 90 USD. E ancora - perché la posizione è stata chiusa in cima al rialzo. Da punto a punto. Non ho contattato il centro dealing per questo problema. Probabilmente non risponderanno. Mi sono ricordato di questo forum e spero che i professionisti siano in grado di spiegare la ragione di questa anomalia in un linguaggio semplice. Ho iniziato a fare trading su MT4 non molto tempo fa. Sto ancora annusando e guardandomi intorno.
 
Salve. Puoi dirmi per favore se un EA è collegato a diverse finestre di coppie di valute contemporaneamente, allora i cambiamenti nell'EA in una finestra influenzano l'EA nell'altra finestra??? cioè le variabili locali sono cambiate o no???
 

Signori, per favore, datemi un suggerimento!

Sto cercando di implementare una semplice idea che è descritta nei commenti al programma.

Il programma apre ordini nel TESTER ad un prezzo che non coincide con quello specificato nel codice.

Per esempio, l'ordine si apre al prezzo di 0,86084, mentre il valore più vicino nell'array è 0,85375.

La differenza è positiva mentre il codice specifica di aprire gli ordini se la differenza è < 0,00000, cioè negativa.


Per favore avvisateci dove si trova l'errore.

Grazie.

int start()
{
 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);    
 #include <MASSIV.mqh> //объявление массива типа double (неповторяющиеся значения цены с пятью знаками после точки)
 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика

 int S = ArrayBsearch(  massiv,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000


{
                        
 OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыть
  }                                  

   }
Motivazione: