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

 

La mia domanda è per un principiante:

Recentemente ho scoperto che MetaEditor non si apre nel terminale, e il comando "modifica" non funziona negli EA e negli indicatori ............. Per favore aiutatemi con questo. Per favore, aiutatemi a scoprirlo.

 
gnawingmarket:

La mia domanda è per un principiante:

Recentemente ho scoperto che MetaEditor non si apre nel terminale, e il comando "cambia" non funziona in Expert Advisors e indicatori ............. Per favore aiutatemi con questo. Grazie.


Cercherò di rispondere.

Nessuna possibilità di correggere i vecchi codici funziona più.

 
Ma avete un principe incoronato.
 
tara:
Almeno hai un principe da incoronare.


Tu sai tutto! Oggi non sono riuscito a prendere chi mi ha messo come amministratore, e non ho avuto la password, e non ho pensato di chiedere! Lo prenderò domani! Cosa fai in piedi?

Grazie Tara per la tua partecipazione! Mi sono fatto restaurare tutto dal mio vicino di casa! Esperto di informatica!

 
Top2n:

Sì, capisco che ci sono molte domande stupide. Onestamente, ho provato tutto il giorno, ma senza risultati.

Sto scrivendo i valori dei prezzi di diverse linee di tendenza sulla barra corrente in un array.

Come posso cancellare un valore dall'array se non c'è un oggetto?

artmedia70:

Se scorriamo i valori dei prezzi delle linee di tendenza ad ogni tick, inizializziamo l'array e aumentiamo la sua dimensione quando troviamo il prossimo prezzo necessario della linea di tendenza necessaria, allora non ci sarà bisogno di rimuovere i valori delle linee di tendenza eliminate dall'array. L'array sarà dinamico, e ogni volta ad ogni tick, conterrà solo i valori degli oggetti esistenti.


?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
double MassTrendNumber(double &array[], string tip) // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
ArrayResize(array,ObjectsTotal(OBJ_TREND));

 for (int i = 0, limit = ArrayResize(array,ObjectsTotal(OBJ_TREND)); i < limit; i++) 

 {
 string DWnem=ObjectName(i); 
  string DW="downtrendline"+IntegerToString(i); // существует два названия трендовых линий, первое
  string DW2="uptrendline"+IntegerToString(i); // второе
if(tip="Sell")   //первый массив цен на селл
  if(DWnem=DW)//если имя равно "downtrendline"
   if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
// Также существует три цвета
   array[i]=ObjectGetValueByShift(DWnem,1); //записываем
if(tip="Buy")   //второй массивцен на бай
 if(DWnem=DW2)
 if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
  array[i]=ObjectGetValueByShift(DWnem,1);

  }   return;
   }

	          
 

Sto cercando di fare un oscillatore intorno allo 0 dal prezzo di chiusura in una finestra separata, ma non ci riesco. Forse qualcuno l'ha già fatto, potreste dirmi la formula?

Cioè abbiamo il prezzo Close[i], ho bisogno che questo prezzo vada sopra/sotto lo zero come in MACD/CCI, in una finestra separata, ma per quanto mi sforzi, non posso farlo senza valori aggiuntivi come MA: ora ottengo qualcosa di simile se sottraggo iClose-iMA, ma forse ci sono varianti senza smoothing?

O nell'intervallo 0.0...1.0 se non c'è modo di aggirare lo zero...

[Eliminato]  
Top2n:

Il metodo di ricerca in quello che segue è leggermente diverso:

#property strict

/******************************************************************************/
bool AddValue(double &array[], const double value) {
  const int size = ArraySize(array);

  if (ArrayResize(array, size + 1) != size + 1) {
    return false; // Ошибка, значение не может быть добавлено к массиву
  }

  array[size] = value; //записываем
  return true; // Нет ошибки, значение добавлено к массиву
}

/******************************************************************************/
bool AddValueIfFound(double &array[], const string name) {
  const int type = ObjectType(name);

  if (type == OBJ_TREND) {
    switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switch
    case Goldenrod:
    case Gainsboro:
    case White:
      if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
        return false; // Ошибка, значение найдено, но не может быть добавлено к массиву
      }
    }
  }

  return true; // Нет ошибки, значение, если найдено, добавлено к массиву
}

/******************************************************************************/
bool MassTrendNumber(double &array[], const bool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
  const string subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второе

  if (ArrayResize(array, 0) != 0) {
    return false; // Ошибка, массив не может быть заполнен достоверно
  }

  for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
    if (!AddValueIfFound(array, subname + IntegerToString(i))) {
      return false; // Ошибка, массив, если и заполнен, то недостоверно
    }
  }

  return true; // Нет ошибки, массив заполнен достоверно
}

/******************************************************************************/
void FillAndPrint(double &array[], const bool buy) {
  if (MassTrendNumber(array, buy)) {
    const int limit = ArraySize(array);

    Print("Найдено объектов: ", limit);

    for (int i = 0; i < limit; i++) {
      Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
    }
  } else {
    Print("Чёрт!");
  }
}

/******************************************************************************/
void OnStart() {
  double masS[];
  double masB[];

  Print("Sell:");
  FillAndPrint(masS, false);

  Print("Buy:");
  FillAndPrint(masB, true);
}

Aggiungete due linee di tendenza bianche con i nomi corrispondenti al grafico ed ecco fatto:

04:14:34 Script 2 EURUSDm,H1: loaded successfully
04:14:34 2 EURUSDm,H1: initialized
04:14:34 2 EURUSDm,H1: Sell:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.36268
04:14:34 2 EURUSDm,H1: Buy:
04:14:34 2 EURUSDm,H1: Найдено объектов: 1
04:14:34 2 EURUSDm,H1: Price[0] = 1.35668
04:14:34 2 EURUSDm,H1: uninit reason 0
04:14:34 Script 2 EURUSDm,H1: removed

Non scrivere funzioni chilometriche, spezza il programma in brevi "frasi" - "mattoni". I piccoli "mattoni" ne fanno altri più grandi, e quelli più grandi ne fanno altri ancora più grandi. Vedete, è possibile.

Passare tutti i dati alle funzioni solo tramite parametri.

Assicuratevi di gestire gli errori se la funzione chiamata fallisce e ulteriori azioni se l'errore viene ignorato avranno gravi conseguenze. La stragrande maggioranza dei crash dei programmi (in generale) avviene perché la gestione degli errori non è programmata in alcun modo.

Per esempio, se ArrayResize(), chiamata per ingrandire la dimensione dell'array, restituisce un errore, e il programmatore non l'ha controllato e si riferisce all'array presumibilmente ingrandito, si verifica un errore che fa sì che il programma MQL4 smetta di funzionare successivamente. L'Expert Advisor, per esempio, ferma il trading lasciando le posizioni aperte. Non è fantastico?

Provate a inserire "array[0] = 0;" prima del ciclo nella funzione MassTrendNumber(), e assicuratevi che lo script finisca dopo l'errore di overrun dell'array.

 
evillive:

Sto cercando di fare un oscillatore intorno allo 0 dal prezzo di chiusura in una finestra separata, ma non ci riesco. Forse qualcuno l'ha già fatto, potreste dirmi la formula?

Cioè abbiamo il prezzo Close[i], ho bisogno che questo prezzo vada sopra/sotto lo zero come in MACD/CCI, in una finestra separata, ma per quanto ci provi, non posso farlo senza valori aggiuntivi come MA: ora ottengo qualcosa di simile se sottraggo iClose-iMA, ma forse ci sono varianti senza smoothing?

O nell'intervallo 0.0...1.0 se non c'è modo di aggirare lo zero...


https://www.mql5.com/ru/code/9340
 

Oh, è più o meno così. Niente è nuovo in questo mondo )))
 
simpleton:

Il metodo di ricerca qui sotto è leggermente diverso:

Aggiungete due linee di tendenza bianche con i nomi corrispondenti al grafico e il gioco è fatto:

Non scrivete funzioni chilometriche, spezzate il programma in brevi "frasi" - "mattoni". I piccoli "mattoni" ne fanno altri più grandi, e quelli più grandi ne fanno altri ancora più grandi. Vedete, è possibile.

Passare tutti i dati alle funzioni solo tramite parametri.

Assicuratevi di gestire gli errori se la funzione chiamata fallisce, e le azioni successive se l'errore viene ignorato avranno gravi conseguenze. La stragrande maggioranza dei crash dei programmi (in generale) avviene perché la gestione degli errori non è programmata in alcun modo.

Per esempio, se ArrayResize(), chiamata per ingrandire la dimensione dell'array, restituisce un errore, e il programmatore non l'ha controllato e si riferisce all'array presumibilmente ingrandito, si verifica un errore che fa sì che il programma MQL4 smetta di funzionare successivamente. L'Expert Advisor, per esempio, ferma il trading lasciando le posizioni aperte. Non è fantastico?

Provate a inserire "array[0] = 0;" prima del ciclo in MassTrendNumber() e assicuratevi che lo script termini dopo l'errore di overrun dell'array.


Sì, grazie mille, sei proprio oltre le parole come utile, così chiaro! Fantasticoooo!!!