Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 823

 

Veterros:
Ребят подскажите, почему 4202 выдаёт (Объект не существует). Правильно что не существует его создать надо, а он мне (не существует)! Чего можно с ним сделать? Или я где-то опять накосячил?

else aggiungere dopo la parentesi graffa di chiusura, o dentro questa parentesi spostare gli operatori di modifica dell'oggetto.

 
tara:

Grazie, ma il problema non è sparito.

 

Qualcuno può suggerire se queste espressioni sono equivalenti o no?

1) double BarN=NormalizeDouble(iHigh(Symbol(),5,iHighest(Symbol(),5,MODE_HIGH,num,1)),Digits) 

2) double BarN=NormalizeDouble(High[iHighest(Symbol(),5,MODE_HIGH,num,1)],Digits)
 
Veterros:
Potete dirmi perché il 4202 cede (l'oggetto non esiste). Esatto, non esiste, deve essere creato, ma io (non esiste)! Cosa ci si può fare? O ho sbagliato da qualche altra parte?

Ho provato frettolosamente la tua versione come script, sostituendo il tempo e i segni e controllando gli oggetti, ma non ha restituito errori.

Forse, per risparmiare la fatica, provare a formare oggetti freccia considerando il nuovo linguaggio MQL4?

Ecco il "corpo" dello script che crea gli oggetti freccia che hai specificato, tenendo conto del nuovo linguaggio (i tempi e i segni sono arbitrari, invece di SignalBarsTime, Hi2, SignalBarsTime, Lo2, che conosci solo finora):

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(ObjectFind(0,"Продажа")<0)
     {
      ArrowDownCreate(0,"Продажа",0,Time[2],High[2],
                      ANCHOR_BOTTOM,clrRed,STYLE_SOLID,5,false,false,true,0);
     }
   if(ObjectFind(0,"Покупка")<0)
     {
      ArrowUpCreate(0,"Покупка",0,Time[1],Low[1],
                    ANCHOR_TOP,clrGreen,STYLE_SOLID,5,false,false,true,0);
     }
  }
//+------------------------------------------------------------------+
//| Создает знак "Стрелка вниз"  https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_arrow_down
//+------------------------------------------------------------------+
bool ArrowDownCreate(const long              chart_ID=0,           // ID графика
                     const string            name="ArrowDown",     // имя знака
                     const int               sub_window=0,         // номер подокна
                     datetime                time=0,               // время точки привязки
                     double                  price=0,              // цена точки привязки
                     const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // способ привязки
                     const color             clr=clrRed,           // цвет знака
                     const ENUM_LINE_STYLE   style=STYLE_SOLID,    // стиль окаймляющей линии
                     const int               width=3,              // размер знака
                     const bool              back=false,           // на заднем плане
                     const bool              selection=true,       // выделить для перемещений
                     const bool              hidden=true,          // скрыт в списке объектов
                     const long              z_order=0)            // приоритет на нажатие мышью
  {
//--- установим координаты точки привязки, если они не заданы
   //ChangeArrowEmptyPoint(time,price);
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим знак
   if(!ObjectCreate(chart_ID,name,OBJ_ARROW_DOWN,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": не удалось создать знак \"Стрелка вниз\"! Код ошибки = ",GetLastError());
      return(false);
     }
//--- способ привязки
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- установим цвет знака
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль окаймляющей линии
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим размер знака
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
//| Создает знак "Стрелка вверх" https://docs.mql4.com/ru/constants/objectconstants/enum_object/obj_arrow_up
//+------------------------------------------------------------------+
bool ArrowUpCreate(const long              chart_ID=0,           // ID графика
                   const string            name="ArrowUp",       // имя знака
                   const int               sub_window=0,         // номер подокна
                   datetime                time=0,               // время точки привязки
                   double                  price=0,              // цена точки привязки
                   const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // способ привязки
                   const color             clr=clrRed,           // цвет знака
                   const ENUM_LINE_STYLE   style=STYLE_SOLID,    // стиль окаймляющей линии
                   const int               width=3,              // размер знака
                   const bool              back=false,           // на заднем плане
                   const bool              selection=true,       // выделить для перемещений
                   const bool              hidden=true,          // скрыт в списке объектов
                   const long              z_order=0)            // приоритет на нажатие мышью
  {
//--- установим координаты точки привязки, если они не заданы
   //ChangeArrowEmptyPoint(time,price);
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим знак
   if(!ObjectCreate(chart_ID,name,OBJ_ARROW_UP,sub_window,time,price))
     {
      Print(__FUNCTION__,
            ": не удалось создать знак \"Стрелка вверх\"! Код ошибки = ",GetLastError());
      return(false);
     }
//--- установим способ привязки
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- установим цвет знака
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- установим стиль окаймляющей линии
   ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style);
//--- установим размер знака
   ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width);
//--- отобразим на переднем (false) или заднем (true) плане
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- включим (true) или отключим (false) режим перемещения знака мышью
//--- при создании графического объекта функцией ObjectCreate, по умолчанию объект
//--- нельзя выделить и перемещать. Внутри же этого метода параметр selection
//--- по умолчанию равен true, что позволяет выделять и перемещать этот объект
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
//--- скроем (true) или отобразим (false) имя графического объекта в списке объектов
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
//--- установим приоритет на получение события нажатия мыши на графике
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
//--- успешное выполнение
   return(true);
  }
//+------------------------------------------------------------------+
 
P./S.: Ho corretto la linea nel mio post sopra, sostituendo ANCHOR_BOTTOM con ANCHOR_TOP:
 if(ObjectFind(0,"Покупка")<0)
     {
      ArrowUpCreate(0,"Покупка",0,Time[1],Low[1],
                    ANCHOR_TOP,clrGreen,STYLE_SOLID,5,false,false,true,0);
     }
 
DiPach:
P./S.: Ho corretto la linea nel mio post sopra, sostituendo ANCHOR_BOTTOM con ANCHOR_TOP:
Grazie mille, molto utile. Vorrei ancora trovare un modo per fare in modo che i nomi degli oggetti siano assegnati automaticamente, devo ridisegnarli ogni volta. Forse consigliare dove imparare a conoscerlo e in quale area cercare?
 
Veterros:
Grazie mille, molto utile. Mi piacerebbe scoprire come nominare automaticamente gli oggetti, perché devo ridisegnarli ogni volta. Forse puoi dirmi dove trovarlo e dove cercare?
Aggiungere il tempo al nome dell'oggetto.
 
Veterros:

Sì. Il nome individuale può essere scritto in modi diversi.

Per esempio, la funzione per formare nomi individuali per gli oggetti può apparire così:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string nameNi(string PrefixN, datetime TimeN)
  {
   string textn=NULL;
   textn=StringConcatenate(PrefixN,TimeToString(TimeN,TIME_DATE|TIME_MINUTES));
   return (textn);
  }

E nel corpo del programma può essere emesso così (avendo scritto prima nelle condizioni ciò che servirà come prefisso):

...

string nameobj=nameNi(prefixX,timeX);

Inoltre, per un oggetto appena creato potrebbe apparire così

if(ObjectFind(0,nameobj)<0)
     {
      ArrowDownCreate(0,nameobj,0,timeX,HiN,
                      ANCHOR_BOTTOM,clrRed,STYLE_SOLID,5,false,false,true,0);
     }


Ora non riesco a pensare dove esattamente si possa cercare nell'aiuto o nel sito, ma il tutorial mi ha ricordato questa pagina: https://book.mql4.com/ru/functions/strings

Lì potete trovare informazioni e un esempio di codice. Basta usare TimeToString invece di TimeToStr. Tuttavia, può essere di grande aiuto quando si padroneggia il nuovo linguaggio MQL4. Anche in combinazione con l'aiuto per la lingua aggiornata.

 
evillive:
Aggiungere il tempo al nome dell'oggetto.
Grazie mille!
 
DiPach:

Sì. Il nome individuale può essere scritto in modi diversi.

Per esempio, la funzione per formare nomi individuali per gli oggetti può apparire così:

E nel corpo del programma può essere emesso così (avendo scritto prima nelle condizioni ciò che servirà come prefisso):

Inoltre, per un oggetto appena creato potrebbe apparire così


Ora non riesco a pensare dove esattamente si possa cercare nell'aiuto o nel sito, ma il tutorial mi ha ricordato questa pagina: https://book.mql4.com/ru/functions/strings

Lì potete trovare informazioni e un esempio di codice. Basta usare TimeToString invece di TimeToStr. Tuttavia, può essere di grande aiuto quando si padroneggia il nuovo linguaggio MQL4. Anche in combinazione con l'aiuto per la lingua aggiornata.


Ciao, tesoro ;) Immaginate, da quanto tempo scrivo codice per diversi oggetti e non ho mai pensato di fare una funzione separata per creare i nomi - l'ho sempre fatto direttamente nel codice. Ho lavorato troppo. Grazie per il suggerimento. E dappertutto, dove rilevante, per compattezza, scrivo le funzioni, ma qui qualcosa di tormentato tutto il tempo.

ZS. Ci hai detto ciao Lyov ;).

Motivazione: