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

 
Artyom Trishkin:

Per staccare completamente le funzioni per ottenere frattali arbitrari dall'indicatore, non dovremmo passare per riferimento gli array high[] e low[] e il valore limite in essi.

Poiché il nostro codice è molto vicino a MQL5, dovremo rifiutare le funzioni High[], Low[], iHigh() e iLow(). Ecco come apparirà in questo indicatore:

Anche se, si dovrebbe anche controllare per -1 dalle funzioni GetPriceHigh() e GetPriceLow()
Grazie.
 
strongflex:
La RSI dovrebbe essere di 15 minuti. Abbiamo bisogno che l'EA controlli ogni 20 minuti dall'apertura del mercato (9-00, 9-20, 9-40 ecc.) Diciamo che al 10-20 c'è stato un cross sotto il livello 70, ricorda il prezzo e al 10-40 controlla se il prezzo è inferiore al 10-20 e apre uno short.

Beh, per prima cosa devi far tornare il tempo a un determinato numero di minuti. Ecco uno script di prova:

//+------------------------------------------------------------------+
//|                                                sTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input ENUM_TIMEFRAMES   TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int               MinutesBefore  =20;           // Количество минут назад
int minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   datetime time_before=TimeCurrent()-minutesBefore*PeriodSeconds(PERIOD_M1);
   int shift=Bars(Symbol(),TimeframeRSI,TimeCurrent(),time_before);
   double value=iRSI(Symbol(),TimeframeRSI,14,PRICE_CLOSE,shift);
   Comment("\nCurrent time: ",TimeToString(TimeCurrent()),
           "\nВремя ",minutesBefore," минут назад: ",TimeToString(time_before),
           "\nБар времени ",TimeToString(time_before)," = ",shift," на таймфрейме ",EnumToString(TimeframeRSI),
           "\nЗначение RSI на баре ",shift," периода ",EnumToString(TimeframeRSI),": ",DoubleToString(value,Digits()));
  }
//+------------------------------------------------------------------+

Questo script fa il conto alla rovescia dall'ora corrente del server - prova solo a ottenere i dati RSI un dato numero di minuti fa.

 

Poi, abbiamo bisogno di sapere l'ora corrente, e se il suo valore è un multiplo dei minuti dell'intervallo di controllo. L'ho trasformato in un EA di prova:

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES      TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int                  PeriodRSI      = 14;          // Период расчёта RSI
input ENUM_APPLIED_PRICE   PriceRSI       = PRICE_CLOSE; // Цена расчёта RSI
input int                  MinutesBefore  =20;           // Количество минут назад
//--- global variables
int      minutesBefore; // Количество минут назад
int      periodRSI;     // Период расчёта RSI
double   prevRSIValue;  // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад
   periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   MqlDateTime server_time;
   TimeToStruct(TimeCurrent(),server_time);
   if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
   Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
  }
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
                      int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
  {
   datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
   int shift=Bars(symbol_name,timeframe,start_time,time_before);
   return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
  }
//+------------------------------------------------------------------+

Poi, cosa dobbiamo sapere?

 
Buon pomeriggio. Sono nuovo del trading, quindi ho un sacco di domande, comprese quelle sul software, nel mio caso è MT4. È possibile mettere uno spread di coppia di valute, per esempio, su una finestra del grafico sotto forma di numeri e allo stesso modo un indicatore di ATR? Penso che sarebbe conveniente usare questo modo di presentare le informazioni sulla situazione del mercato, è più comodo e veloce da calcolare e valutare in base alle medie. Il secondo punto è lo stop mobile basato sull'ATR. È possibile renderlo automatico? Se sei seduto in una posa, allora grazie alla calcolatrice e alla buona vista, puoi calcolare e impostare una fermata manualmente - nessun problema. E renderlo automatico è una bella idea per un trader, anche se ha i suoi svantaggi, ma in un buon trend un trailing stop ridurrà il rischio di uno stop sbagliato da parte di un principiante. Grazie in anticipo.
 
Artyom Trishkin:

Poi, abbiamo bisogno di sapere l'ora corrente, e se il suo valore è un multiplo dei minuti dell'intervallo di controllo. L'ho trasformato in un EA di prova:

//+------------------------------------------------------------------+
//|                                               exTestValueRSI.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
//--- input parameters
input ENUM_TIMEFRAMES      TimeframeRSI   = PERIOD_M15;  // Таймфрейм RSI
input int                  PeriodRSI      = 14;          // Период расчёта RSI
input ENUM_APPLIED_PRICE   PriceRSI       = PRICE_CLOSE; // Цена расчёта RSI
input int                  MinutesBefore  =20;           // Количество минут назад
//--- global variables
int      minutesBefore; // Количество минут назад
int      periodRSI;     // Период расчёта RSI
double   prevRSIValue;  // Значение RSI xxx минут назад
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   minutesBefore=(MinutesBefore<1?1:MinutesBefore);  // Количество минут назад
   periodRSI=(PeriodRSI<1?1:PeriodRSI);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   MqlDateTime server_time;
   TimeToStruct(TimeCurrent(),server_time);
   if(server_time.min%minutesBefore==0) prevRSIValue=GetLastDataRSI(Symbol(),TimeframeRSI,TimeCurrent(),minutesBefore);
   Comment("\nТекущее время: ",TimeCurrent(),"\nМинуты текущего времени: ",server_time.min,"\nЗначение RSI: ",DoubleToString(prevRSIValue,Digits()));
  }
//+------------------------------------------------------------------+
double GetLastDataRSI(string symbol_name, ENUM_TIMEFRAMES timeframe, datetime start_time, int minutes_before,
                      int period_rsi=14, ENUM_APPLIED_PRICE price_rsi=PRICE_CLOSE)
  {
   datetime time_before=start_time-minutes_before*PeriodSeconds(PERIOD_M1);
   int shift=Bars(symbol_name,timeframe,start_time,time_before);
   return(iRSI(symbol_name,timeframe,period_rsi,price_rsi,shift));
  }
//+------------------------------------------------------------------+

Poi, cosa dobbiamo sapere?

Poi, se c'è una croce del livello RSI di 20 minuti fa, controlliamo il prezzo, cioè, per uno short, il prezzo dovrebbe essere più basso di 20 minuti fa. Grazie mille. Se funziona, ti devo una promessa))
 
Vladymyr Glushko:
Buona giornata. Sono nuovo del trading, per questo ho un sacco di domande, compreso il software, nel mio caso è MT4. È possibile visualizzare lo spread della coppia di valute nel grafico come un numero e l'indicatore ATR allo stesso modo? Penso che sarebbe conveniente usare questo modo di presentare le informazioni sulla situazione del mercato, è più comodo e veloce da calcolare e valutare in base alle medie. Il secondo punto è lo stop mobile basato sull'ATR. È possibile renderlo automatico? Se sei seduto in una posa, allora grazie alla calcolatrice e alla buona vista, puoi calcolare e impostare una fermata manualmente - nessun problema. E renderlo automatico è una bella idea per un trader, anche se ha i suoi svantaggi, ma in un buon trend un trailing stop ridurrà il rischio di uno stop sbagliato da parte di un principiante. Grazie in anticipo.

È semplice e diretto: visualizzate gli oggetti grafici, in particolare le etichette di testo con i dati richiesti sul grafico, e aggiornateli ad ogni tick.

Se non sapete cosa fare con loro, cercate di trovare quello giusto ;)

 
strongflex:
Poi se il livello RSI è stato attraversato 20 minuti fa controlliamo il prezzo, cioè per uno short il prezzo dovrebbe essere più basso di 20 minuti fa. Grazie mille. Se tutto va bene, la promessa mi sarà addebitata))
Saremo solo in grado di controllare il prezzo "ora" "allora" con l'apertura/chiusura/alto/basso della candela corrispondente a quel momento - nessuna storia di tick in MT4. Quindi abbiamo bisogno di trovare un crossover sui minuti per la più accurata determinazione del prezzo disponibile. Ma cosa intendi per crossover RSI?
 

Artyom Trishkin:
Мы сможем "сейчас" проверить цену "тогда" лишь только открытия/закрытия/хай/лоу свечи, соответствующей тому времени - нету в МТ4 тиковой истории. Поэтому нужно найти пересечение на минутках для наиболее точного определения цены из имеющихся в наличии возможностей. Но что вы имеете в виду под пересечением RSI ?

RSI che attraversa il livello 70 diciamo che RSI a 10-00 era sotto 70 a 10-20 sopra 70 e a 10-40 controllare il 10-20 dovrebbe essere più alto che a 10-40
 
Artyom Trishkin:

È semplice e diretto - si visualizzano oggetti grafici, in particolare etichette di testo con i dati richiesti sul grafico, e li si aggiorna ad ogni tick.

E i diversi traini in kodobase sono una dozzina - cercate quello giusto ;)

Grazie mille ...... lo cercheremo))

 
Artyom Trishkin:

Tutto è facile e semplice - visualizzare oggetti grafici, in particolare - etichette di testo con i dati richiesti sul grafico, e aggiornarle ad ogni tick.

E i diversi traini in kodobase sono una dozzina - trova quello giusto per te ;)

Ma come fare passo dopo passo? ..... oggetti grafici (cos'è e come impostarli), mettere etichette con i dati sul grafico (dove inserire e con quali dati) ...... scusate le domande stupide.
Motivazione: