[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 137

 
hoz:

Al momento il compito è il seguente: fastMa ha attraversato slowMa verso l'alto... quindi stiamo cercando dove comprare. Poi aspettiamo fino a quando il prezzo cioè Ask (dal momento che consideriamo l'acquisto) raggiunge fastMa ( beh, credo che non ci sarà un valore esatto, abbiamo bisogno di +- qualche deviazione, e questo è cambiato da i_thresholdFromMa) e non appena il prezzo raggiunge fastMa +- i_thresholdFromMa l'Expert Advisor dovrebbe impostare BUYSTOP a (fastMa + buyHear * pt).

Quello che ho trovato non funziona in un terminale e non funziona sempre in un altro. C'è qualcosa che non va in generale.

L'ultima variante della funzione buyHear qui:

Ecco i parametri di input:

Gli errori possono essere visti nello screenshot (in OrderSend() il prezzo è alimentato sopra la bacchetta rossa, e l'ordine come si vede nello screenshot è sotto....):

Sono stato via per qualche giorno... Mi sto chiedendo - gli stessi parametri hanno le bacchette lanciate sul grafico come le bacchette usate nei calcoli? Forse è lì che è sepolto il cane?

(Non ho ancora avuto il tempo di approfondire il codice e smontarlo).

Io farei una funzione, per esempio:

//-----------------------------------------------------------------------------+
double ma(int MAperiod, int MAmethod, int MAshift) {return (iMA(Symbol(), Period(), MAperiod, 0, MAmethod, PRICE_OPEN,MAshift));}
//-----------------------------------------------------------------------------+

e chiamarlo per ottenere i parametri

 

Ciao, potresti per favore consigliare! Un segnale di indicatore è scattato per comprare, apro un ordine solo dopo aver confermato le due candele successive al rialzo.

 
Top2n:

Ciao, potresti per favore consigliare! Un segnale di indicatore per comprare è scattato, apro un ordine solo dopo aver confermato le due candele successive verso l'alto.


Quindi controlla che le ultime due candele in alto e la condizione di aprire un ordine due barre fa allo stesso tempo.
 
Roger:

Quindi controlla che le ultime due candele in alto e la condizione per aprire un ordine due barre indietro allo stesso tempo.

come faccio?

 if (bay_min == true) сработал сигнал на покупку ждем подтверждение
  
 if (Open[1]<Close[1] && Open[2]<Close[2] )
   
 if (Bars(2).............


E se è così, il segnale viene attivato attendere la conferma, solo dopo una barra su o giù 2 barre.

Abbiamo bisogno di ricordare la barra sul segnale, la barra dopo il segnale, confrontarle se le due sono ascendenti o discendenti, poi .....

 
Top2n:

come faccio?


Se il segnale ha funzionato, aspettiamo la conferma, ma dopo che la barra sale o scende.

Dovrebbe ricordare la barra sul segnale, la barra dopo il segnale, confrontarle se le due sono ascendenti o discendenti, poi .....

Mostra come hai ottenuto bay_min.
 
Top2n:

come faccio?


Se il segnale ha funzionato, aspettiamo la conferma, ma dopo che la barra sale o scende.

Dovrebbe ricordare la barra sul segnale, la barra dopo il segnale, confrontarle se le due sono ascendenti o discendenti, poi .....



if (bay_min == true)   datetime T=Time[0] //сработал сигнал на покупку запоминаем время  бара

if(iBarShift(NULL,0,T)==2) //по времени, сигнал был на 2 баре
   {   
  if (Open[1]<Close[1] && Open[2]<Close[2] )   //и эти бары бичьи 
     { 
    // что-то делаем
     }
   }
   
// я думаю, как-то так.
 
Domanda per i consulenti esperti

Sto scrivendo un semplice Expert Advisor e mi imbatto in molti problemi.

La condizione è

Ricordo il prezzo di chiusura della barra corrente e lo inserisco nella variabile Startprice se la quarta barra precedente era nella barra scorrevole.


Se la condizione è soddisfatta, allora disegna un'icona che mostra il prezzo di chiusura della barra, cioè Startprice.

Quello che ho ottenuto è che l'icona viene disegnata, ma solo una volta, mentre io ne ho bisogno ogni volta.

Il prezzo di chiusura della barra non coincide con il prezzo di Startprice a 0,00001. Perché e come lo risolvo?

Ho provato ad arrotondare e a tagliare a 5 cifre, ma non è servito a niente (vedi

Nel registro usando la stampa chiamo il valore Startprice, mostra il numero solo fino a 4 cifre e meno.

Come ottenere la stessa precisione della finestra dei dati del terminale?

Questo problema del punto decimale si applica anche al cursore stesso. Se richiamate i suoi valori tramite stampa, non potete ottenere più di 4 cifre nel registro.



#property copyright "Zuly"


 extern int MA_Period = 50; //периуд Ма
extern int MA_Method =MODE_SMA;     //Метод усреднения скользящего среднего. Может быть любым из значений методов скользящего среднего (Moving Average):
                              //*MODE_SMA 
                              
 extern int Maximum_History = 0;         //Ограничение истории для расчетов, если 0 то расчет всей истории
 
   
    
   //начало кода советника
int start()


{      
    double MA4;                                // Значение МА на 4 баре 
    
    double Startprice;
    
   { 
   MA4=iMA(NULL,0,MA_Period,0,MA_Method,PRICE_CLOSE,4); 
 
   
                       if  (Low[4]< MA4 && MA4 < High[4]) //условия если 4-я свеча лежит в скользящей
  
  {    
  
   Startprice=Close[0];
  
    //   Startprice=NormalizeDouble(Close[0],5); // пробуем округлить до 5-го знака, не помогло 
 
    //  Startprice=MathFloor(Close[0]*100000)/100000; // пробуем обрезать до 5-го знака не помогло
      
  
  
     
      //Print (Startprice); // распечатаем Startprice
     
      
   datetime TmR1=Time[0]; // запоминаем время текущего бара? 

   

   
       ObjectCreate("Rep1",OBJ_ARROW, 0, TmR1, Startprice); // создаем обьект 
      ObjectSet("Rep1", OBJPROP_COLOR, White); // устанавливаем обьект на график
       ObjectSet("Rep1", OBJPROP_ARROWCODE,71); 
      
     return(0); 
 
 
 
}} }    
   
parametri di prova e tempo
 
Usate DoubleToStr(number, Digits) per l'output. Invece di Cifre, puoi scrivere la precisione che vuoi. Aggiungi al nome dell'icona l'ora della barra in cui stai impostando l'icona.
 
artmedia70:
Usate DoubleToStr(number, Digits) per l'output. Al posto di Cifre potete scrivere la precisione che volete. Aggiungi al nome dell'icona l'ora della barra in cui stai impostando l'icona.


se è così

Startprice=DoubleToStr(Close[0],5);

non funziona, dà la colpa a '=' - tipi incompatibili C:fortest\experts\sve.mq4 (34, 14)

Come si scrive correttamente?

Grazie per la risposta, ho lottato con questo per una settimana )

 
artmedia70:
Usate DoubleToStr(number, Digits). Potete scrivere la precisione che volete al posto di Digits. Aggiungete il tempo della barra al nome dell'icona dove state impostando l'icona.

ma per l'output, capisco che la stampante stampa solo 4 o meno cifre.

allora se Print (DoubleToStr(Startprice,5)); // stampa Startprice

dà 5.

Ma ecco come aggiungere il tempo della barra.

Questa linea non aggiunge il tempo della barra?

  datetime TmR1=Time[0];