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

 

Ragazzi, ho una funzione OnTimer() che dovrebbe essere eseguita all'inizio di ogni giorno e ad un certo risultato di esecuzione EA dovrebbe andare a dormire. Se imposto il tempo della prossima esecuzione per la funzione OnTimer() all'inizio del giorno successivo e dopo di esso l'EA andrà a dormire fino allo stesso momento (-1 secondo per esempio), il contatore del tempo sarà ancora in funzione e la funzione sarà eseguita dopo essere uscita dal sonno dopo 1 secondo?


P. S. Un'altra domanda leggermente preoccupante: come può la documentazione essere scritta in uno stile così dozzinale? Intendo gli spazi del codice e la messa in scena delle parentesi, non ho mai visto nessuno tranne "scolari in laboratori di programmazione" e ragazzi che scrivono in mql produrre qualcosa del genere

for(int x=0;x<10;x++)

{

}


Il sito si corregge in qualche modo, a proposito delle parentesi voglio dire che le parentesi si mettono con la tabulazione, cioè non si può risalire verticalmente in modo intuitivo dove va una parentesi.

 
ukrop1203:

Ragazzi, ho una funzione OnTimer() che dovrebbe essere eseguita all'inizio di ogni giorno e ad un certo risultato di esecuzione EA dovrebbe andare a dormire. Se imposto il tempo della prossima esecuzione per la funzione OnTimer() all'inizio del giorno successivo e dopo di esso l'EA andrà a dormire fino allo stesso momento (-1 secondo per esempio), il contatore del tempo sarà ancora in funzione e la funzione sarà eseguita dopo essere uscita dal sonno dopo 1 secondo?


P. S. Un'altra domanda leggermente preoccupante: come può la documentazione essere scritta in uno stile così dozzinale? Intendo gli spazi del codice e l'indicazione delle parentesi, non ho mai visto nessuno, tranne gli "scolari dei laboratori di programmazione" e i ragazzi che scrivono in mql, scrivere qualcosa del genere

for(int x=0;x<10;x++)

{

}


Per quanto riguarda le parentesi, voglio dire che le parentesi si mettono con la tabulazione, cioè è impossibile seguire intuitivamente dove va una parentesi in verticale.

Non puoi tracciare verticalmente dove va la parentesi, quindi non sarai in grado di vedere dove va. Potete metterlo a riposo per 5 minuti e mettere Print in OnTimer ogni 10 secondi. Questo risponderà alla vostra domanda. Perché andare a dormire se si può semplicemente cambiare la chiave che determina la modalità dell'algoritmo principale in qualsiasi altra funzione?

 

Ciao a tutti!


DOMANDA su MT5. I segni di testo (numeri) sono messi come una sottile barra grigia. I punti sono un buffer di controllo per visualizzare i bloopers di MT5 nella mia testa....


Rispetto alla documentazione per OBJ_TEXT, sembra essere lo stesso....

//| Вывод текстовой метки с размером интервала "тела" свечи          |
//+------------------------------------------------------------------+
void LabText(const long  chart_ID=0,
             string      name="Text", 
             string      text="text", // ТЕКСТ ДЛЯ ВЫВОДА НА ГРАФИК
             datetime    time=0, 
             double      price=0,
             int         fontsizes=0,
             color       clr=0)
  {
  if(ObjectFind(chart_ID,name)!=0)
     {
   ObjectCreate(chart_ID,name,OBJ_TEXT,0,0,0);
   ObjectSetInteger(chart_ID,name,OBJPROP_TIME,time);
   ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,price);
//--- установим угол наклона текста 
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,0.0); 
//--- установим способ привязки 
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,ANCHOR_LEFT); 
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,"Arial");
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,fontsizes);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов 
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,true);
     }
  }

********************** В КОДЕ *********************************
    

    double  LW=iLow(NULL,PERIOD_H1,i);  //   ЦИКЛ I

                        *********** 

   LabText(0,"NAME  ("+string(i)+")",DoubleToString(bbull[i],0),iTime(NULL,PERIOD_H1,i),
              LW-(8*_Point),12,clrWhite);
   ExtLineBuffer1[i]=iHigh(NULL,PERIOD_H1,i);


 
kopeyka2:

Ciao a tutti!


DOMANDA su MT5. I segni di testo (numeri) sono messi come una sottile barra grigia. I punti sono un buffer di controllo per visualizzare i bloopers di MT5 nella mia testa....


Rispetto alla documentazione per OBJ_TEXT, sembra essere lo stesso....


Vedere cosa si passa nel parametro fontsizes

 
Artyom Trishkin:

Vedere cosa si passa nel parametro fontsizes

GRAZIE!!! Ho inserito ledimensioni dei caratteri dalle variabili globali. Impostatelo nella funzione void LabText. Ha funzionato...


 

Voglio aggiungere e cancellare indicatori sul grafico con lo script, poiché applicando il modello si cancellano tutte le linee disegnate.


#property indicator_label1  "MA8"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1


int indicator_handle;

void OnStart()
  {

   indicator_handle = iMA(0,0,8,0,MODE_EMA,PRICE_CLOSE);

   Print(indicator_handle);

   //ChartIndicatorAdd(0,0,indicator_handle);

   
  }

Ricevo risposta

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) cannot load indicator 'Moving Average' [4302]

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) -1


Il codice si compila senza errori però.


 
psyman:

Voglio aggiungere e cancellare indicatori sul grafico con lo script, poiché applicando il modello si cancellano tutte le linee disegnate.


Ricevo risposta

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) cannot load indicator 'Moving Average' [4302]

2019.01.24 19:14:53.633 add_ind (EURJPY,H1) -1


Anche se il codice si compila senza errori.


ERRARE_MERCATO_NON_SELEZIONATO

4302

Simbolo non selezionato in MarketWatch


Perché metti 0 al posto del nome del simbolo? Se volete quello attuale, dovete scrivere NULL, o il suo nome, per esempio "EURUSD".

iMA

Restituisce la maniglia dell'indicatore della media mobile. Solo un buffer.

intiMA(
stringa simbolo, // nome del simbolo
ENUM_TIMEFRAMESperiodo, // periodo
int ma_periodo, // periodo medio
int ma_shift, // indicatore di spostamento orizzontale
ENUM_MA_METHODma_method, // tipo di lisciatura
ENUM_APPLIED_PRICE applied_price // tipo di prezzo o maniglia
);

Parametri

simbolo

[Nome del simbolo dello strumento i cui dati saranno utilizzati per calcolare l'indicatore. NULL significa simbolo corrente.

periodo

[in] Il valore del periodo può essere uno dei valori dell'enumerazione ENUM_TIMEFRAMES, 0 significa timeframe corrente.

ma_periodo

[Periodo di mediazione per il calcolo della media mobile.

ma_turno

[Spostamento dell'indicatore rispetto al grafico del prezzo.

ma_metodo

[Metodo di mediazione. Può essere uno qualsiasi dei valori di ENUM_MA_METHOD.

prezzo applicato

[Prezzo usato. Può essere una qualsiasi delle costanti di prezzo di ENUM_APPLIED_PRICE o un handle di un altro indicatore.

Valore restituito

Restituisce l'handle dell'indicatore tecnico specificato, in caso di fallimento restituisce INVALID_HANDLE. La funzione IndicatorRelease() è usata per liberare la memoria del computer da un indicatore che non è più in uso.

 
Ciao, potresti per favore dirmi come fare in modo che un array di maniglie MA restituisca prezzi normali, intendo il modo in cui dovrebbero, 5 cifre decimali, non 8
int OnInit()
  {
 ima1_handle        = iMA (Symbol(),0,14,0,MODE_EMA,PRICE_CLOSE);
 ima2_handle        =  iMA (Symbol(),0,64,0,MODE_EMA,PRICE_CLOSE);               //хендл
 Stoch_handle       = iStochastic (Symbol(),0,20,15,15,MODE_EMA,STO_CLOSECLOSE);//хендл
 ATR_handle         = iATR        (Symbol(),0,21);                              //хендл

   if(Digits==3 || Digits==5)
     {
      Slippage*=10;
      TrailingStop *= 10;
      TrailingStep *= 10;
     }
   return(0);
  }
void OnDeinit(const int reason)
  {

  }

void OnTick()
  { 
    double ima1_massiv [];                                          //динамический массив для быстрой машки
    ArraySetAsSeries(ima1_massiv, true);   
    int ima_count1 = CopyBuffer(ima1_handle,0,0,2,ima1_massiv);    //скопировал данные из 2х буферов быстрой машки
    //double ima1_normal = NormalizeDouble(ima1_massiv[0], Digits);
    string ima1_massiv_str0 = DoubleToString (ima1_massiv[0]);
    string ima1_massiv_str1 = DoubleToString (ima1_massiv[1]);
    printf ("сегодня = "+ ima1_massiv_str0 + " вчера = "+ ima1_massiv_str1);  
    
  }    
linguaggio mt5
 
Sergey Lobzankin:
Ciao, potresti per favore dirmi come fare in modo che un array di maniglie MA restituisca prezzi normali, intendo il modo in cui dovrebbero, 5 cifre dopo il punto decimale e non 8
if(Digits==3 || Digits==5)
     {
      Slippage*=10;
      TrailingStop *= 10;
      TrailingStep *= 10;
     }
   return(0);

cool)

double normalMA=NormalizeDouble(MA,_Digits);    
 

Ciao, potresti per favore dirmi come fare in modo che un array di maniglie MA restituisca prezzi normali, intendo il modo in cui dovrebbero, 5 cifre dopo il punto decimale e non 8

lingua mt5

DoubleToStr in mt5, non c'èDoubleToString(); ma non aiuta
DoubleToStr - Преобразование данных - Справочник MQL4
DoubleToStr - Преобразование данных - Справочник MQL4
  • docs.mql4.com
DoubleToStr - Преобразование данных - Справочник MQL4