Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 317

 
voron_026:

CiaoAleksey Vyazmikin Ho recentemente iniziato a programmare. Mi sto lentamente addentrando nell'argomento.

Ho provato a farlo in questo modo:

Il primo rettangolo viene disegnato, gli altri non vengono disegnati. Sto ancora cercando di capire come farlo. Grazie per i consigli e cosa intendi per stile non tipico?


Siete sicuri che viene disegnato un solo oggetto e non molti alle stesse coordinate?

Avete punti costanti.

datetime time0 = iTime(Symbol(),PERIOD_H4,0);
datetime time1 = iTime(Symbol(),PERIOD_H4,1);
double open0 = iOpen(Symbol(), PERIOD_H4,0);
double open1 = iOpen(Symbol(), PERIOD_H4,1);
double close1 = iClose(Symbol(), PERIOD_H4,1);
double high1 = iHigh(Symbol(), PERIOD_H4,1);
double low1 = iLow(Symbol(), PERIOD_H4,1);

Definiscili o in una funzione o direttamente nel codice quando crei un oggetto...

Sulla tipicità - la tua funzione di calcolo è contorta e tale espressione if(!...) non è usata da molti principianti secondo le mie osservazioni.

 

Ciao!


Potete per favore consigliare:

Come si può calcolare la posizione di un indicatore (I-1), rispetto ad un altro indicatore (I-2) costruito su di esso (I-1).


Per esempio:

La posizione di RSI rispetto a Bollinger.

Ho pensato che si possono sostituire i dati al posto dei calcoli dei prezzi

 RSI = iRSI(Symbol(), TimeFrame, 14, PRICE_CLOSE, 1);
 BB  = iBands(Symbol(), TimeFrame, 34, 1, 0, RSI, MODE_UPPER, 1);
Ma mi dà un errore.
 
Ras al Ghul:

Ciao!


Potete per favore consigliare:

Come si può calcolare la posizione di un indicatore (I-1), rispetto ad un altro indicatore (I-2) costruito su di esso (I-1).


Per esempio:

La posizione di RSI rispetto a Bollinger.

Ho pensato che fosse possibile sostituire i dati invece del prezzo di calcolo

ma c'è un errore.

Non è nemmeno chiaro come hai costruito il bb su RSI, cioè il quadro è chiaro come fatto...


double  iBands( 
   string       symbol,           // имя символа 
   int          timeframe,        // таймфрейм 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          applied_price,    // тип цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );

il vostro tipo di prezzo non è corretto - dovete farlo con

double  iBandsOnArray( 
   double       array[],          // массив 
   int          total,            // количество элементов 
   int          period,           // период 
   double       deviation,        // кол-во стандартных отклонений 
   int          bands_shift,      // сдвиг относительно цены 
   int          mode,             // индекс линии 
   int          shift             // сдвиг 
   );
 
Aleksey Vyazmikin:

Sulla tipicità - la tua funzione di calcolo è contorta e una tale espressione if(!...) è usata da pochissimi principianti secondo le mie osservazioni.


Capisco cosa intendi. Forse sto sviluppando il mio stile personale. Mi piace usare l'operatore if(!...) in questo formato. E ho preso la funzione di calcolo da qualcun altro, ma mi piace questa logica

 
Aleksey Vyazmikin:

Non è nemmeno chiaro come hai costruito il bb RSI, cioè l'immagine è chiara come fatta...


Il tuo tipo di prezzo non è corretto - devi farlo attraverso

Grazie per la vostra risposta!

È diventato chiaro dove sono diretti i miei pensieri.


L'immagine è a scopo illustrativo con gli strumenti standard di MT4 (secondo il precedente/primo indicatore).


Ho familiarità con gli array solo da java... Ho familiarità con gli array in Java.

Come lo creo e cosa devo metterci?

F1 in MetaEditor e MQLQL-Tutorial non mi hanno dato alcuna chiarezza...

 
voron_026:

Capisco il tuo punto di vista. Forse sto sviluppando il mio stile personale. Mi piace usare l'operatore if(!...) in questo formato. Ho preso la funzione di calcolo da qualcun altro, ma mi piaceva la sua logica.


Vedo che sei un pensatore profondo - buona fortuna!

 
Ras al Ghul:

Grazie per la vostra risposta!

È diventato chiaro dove dirigere i miei pensieri.


L'immagine è a scopo illustrativo con gli strumenti standard di MT4 (secondo il precedente/primo indicatore).


Ho familiarità con gli array solo da java... Ho familiarità con gli array in Java, e solo di sfuggita.

Come lo creo e cosa devo metterci?

F1 in MetaEditor e MQLQL-learning non mi hanno dato alcuna chiarezza...


Creare un array e attraverso un ciclo (per esempio, for) riempirlo con il valore dell'indicatore. E poi usare la funzioneiBandsOnArray().

 
Aleksey Vyazmikin:

Create un array e usate un ciclo (per esempio, for) per riempirlo con il valore dell'indicatore. E poi usare la funzioneiBandsOnArray().


O la tua versione è molto complessa o non capisco il valore di cui parli...


double Array[], BB;  


 Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array[1],0,34,1,0,MODE_UPPER,1);

La mia variante genera un errore sul frammento selezionato:

'Array' - array richiesto.

Non è così che si ottiene il valore di un indicatore in un array?


 
Aleksey Vyazmikin:

Siete sicuri che si sta disegnando un solo oggetto e non molti alle stesse coordinate?



Sì, hai ragione. I rettangoli sono disegnati sulle stesse coordinate. Ho risolto il problema nel modo seguente:

void OnTick()
{
Fun_New_Bar();

   if(UseDojiCandles = true && Doji() == 1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);

      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вверх");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 
         
         DojiCandle ++;
     }
   

   
   if(UseDojiCandles = true && Doji() == -1 && New_Bar == true)
     {
      datetime time0 = iTime(Symbol(),TimeFrame,0);
      datetime time1 = iTime(Symbol(),TimeFrame,1);
      double open0 = iOpen(Symbol(), TimeFrame,0);
      double open1 = iOpen(Symbol(), TimeFrame,1);
      
      if(!ObjectCreate(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJ_RECTANGLE,0,time1,open1,time0,open0))
         {
         Print("Не удалось создать метку вниз");
         }
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_COLOR,clrRed);//--- установим цвет прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_STYLE,STYLE_SOLID);//--- установим стиль линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_WIDTH,1);//--- установим толщину линий прямоугольника 
         ObjectSetInteger(ChartID(),"Doji_"+IntegerToString(DojiCandle),OBJPROP_BACK,false);//--- отобразим на переднем (false) или заднем (true) плане 

         DojiCandle ++;
     }
     

   
}
Ho aggiunto una variabileTimeFrame, per cambiare rapidamente il timeframe calcolato
 
Ras al Ghul:

O la tua variante è molto complicata, o non capisco il valore di cui parli...


Nella mia variante, il pezzo evidenziato è giurato:

'Array' - array richiesto.

Non è così che si ottiene il valore di un indicatore in un array?


Array[1] = iRSI(Symbol(),TimeFrame,14,PRICE_CLOSE,1);
BB = iBandsOnArray(Array,0,34,1,0,MODE_UPPER,1);