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

 
RostZ:

Ciao a tutti!

Aiutami con questo errore: "Non abbastanza diritti" o "Non abbastanza diritti" codice #7

Cosa succede: un Expert Advisor su una coppia EURCHFX M1 non può aprire una posizione, appare questo errore (trovato nel diario), ma allo stesso tempo, si apre senza problemi su altre coppie e EURCHF M5. Si apre a mano senza problemi. In un altro broker funziona. Quale può essere il problema?

Vi ringrazio in anticipo per il vostro aiuto.

Senza sapere cosa c'è scritto nel tuo EA è impossibile dire quale sia il problema. Come si comporta l'EA su EURCHFX M5 e EURCHF M1?
 
Top2n:


Questa funzione restituisce il numero di posizione della scadenza, non il numero stesso.

Diciamo che ho il numero di posizione, allora come faccio a rimuovere la posizione?

Ti ho dato un link all'aiuto, 6 righe sotto c'è un aiuto per StringSubstr, che estrae semplicemente una sottostringa da una stringa di testo a partire da una posizione specificata.
 
AlexeyVik:
Ti ho dato un link all'aiuto, 6 righe sotto c'è l'aiuto per StringSubstr, che estrae semplicemente una sottostringa da una stringa di testo a partire da una posizione specificata.


sc=ObjectsTotal(OBJ_LABEL);
for(int i=0;i<sc;i++) 
 {
 Neme=ObjectName(i);
 
 if(Neme="lTrend_Power") //Если имя объекта OBJ_LABEL то самое,
{
  NemeText="Trend Power: "; // часть описания из строки текст
  for(int il=0;il<=99;il++) // перебираем 1-99
  {
NemeTextPol = StringFind(NemeText+il+"%",il,0); //Полное имя строки текст "Trend Power: 99%". (99% меняется от 1 до 99)

Kon = StringSubstr(NemeText+il+"%",13,3);
  }
}
Cosa sto facendo di sbagliato? Il compito è quello di estrarre 99 (cifra) dalla stringa
 
Top2n:

Cosa sto facendo di sbagliato? Il compito è quello di estrarre 99 (cifra) da una stringa

sc=ObjectsTotal(OBJ_LABEL);

Questo è il numero di oggetti etichetta, ma se qualche altro oggetto è presente, ci sarà un errore nel ciclo degli oggetti.

Poi, se non avete altre etichette con lo stesso nome, non avete bisogno di passare attraverso tutti gli oggetti. Basta tirare fuori OBJPROP_TEXT e lavorarci.


string NameText = ObjectGetString(0, "lTrend_Power", OBJPROP_TEXT);

stringa Kon = StringSubstr(NameText, 13, 2);

e poi convertire la stringa contenente il numero in formato stringa nel tipo richiesto.

Beh, a giudicare da questo esempio, siete troppo lontani dalla comprensione dell'intero processo di programmazione.

NemeText="Trend Power: "; // часть описания из строки текст

Questo non fa parte della descrizione dell'oggetto, a questa variabile NemeText è assegnato un valore "Trend Power:".

Leggete tutta la guida, e poi vi ricorderete di aver visto la soluzione... e sarà più facile trovare tutto ciò di cui avete bisogno nella documentazione.

 
paladin80:
Senza sapere cosa c'è scritto nel tuo EA è impossibile dire quale sia il problema. Come si comporta l'EA su EURCHFX M5 e EURCHF M1?

Funziona ovunque, eccetto EURCHFX M1. Non mi è chiaro cosa sia il "diritto insufficiente" e non ho trovato da nessuna parte una spiegazione più dettagliata, in quali casi appare questo messaggio; come reazione a ciò che... Methaquotes dovrebbe sapere cosa significa.
 
AlexeyVik:

Questo è il numero di oggetti etichetta, ma se qualche altro oggetto è presente, ci sarà un errore nel ciclo degli oggetti.

Poi, se non avete altre etichette con lo stesso nome, non avete bisogno di passare attraverso tutti gli oggetti. Basta tirare fuori OBJPROP_TEXT e lavorarci.


string NameText = ObjectGetString(0, "lTrend_Power", OBJPROP_TEXT);

stringa Kon = StringSubstr(NameText, 13, 2);

e poi convertire la stringa contenente il numero in formato stringa nel tipo desiderato.

In realtà siete lontani dal capire l'intero processo di programmazione, a giudicare da questo esempio.

Questo non fa parte della descrizione dell'oggetto, a questa variabile NemeText è assegnato un valore "Trend Power:".

Leggete tutta la guida, e poi vi ricorderete di aver visto la soluzione... e vi sarà più facile trovare ciò che vi serve nella documentazione.


Grazie, sì hai ragione, farò qualche lettura questo fine settimana, vado all'arkaim)))
 

Potete dirmi se qualcuno ha provato INDICATOR_COLOR_INDEX per colorare un buffer di indicatori con diversi colori? O non funziona ancora in MT4?

Esempio >>>

In MT5 questo codice funziona così:

//+------------------------------------------------------------------+
//|                                                        #Test.mq5 |
//|                        Copyright 2010, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
#property indicator_color1  clrRoyalBlue,clrRed
//--- Индикаторные буферы
double indicator_buffer[];
double color_indicator_buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Установка буферов
   SetIndexBuffer(0,indicator_buffer,INDICATOR_DATA);
   SetIndexBuffer(1,color_indicator_buffer,INDICATOR_COLOR_INDEX);
//--- Свойства
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,5);
   PlotIndexSetInteger(0,PLOT_ARROW,159);
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_COLOR_ARROW);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//--- Инициализация буфера
   ArrayInitialize(indicator_buffer,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int      rates_total,
                const int      prev_calculated,
                const datetime &time[],
                const double   &open[],
                const double   &high[],
                const double   &low[],
                const double   &close[],
                const long     &tick_volume[],
                const long     &volume[],
                const int      &spread[])
  {
   int limit=0;
//--- Если первый вызов
   if(prev_calculated==0)
     {
      limit=0;
      ArrayInitialize(indicator_buffer,0);
     }
   else
      limit=prev_calculated-1;
//--- Основной цикл
   for(int i=limit; i<rates_total && !IsStopped(); i++)
     {
      indicator_buffer[i]=rand()%3;
      color_indicator_buffer[i]=(indicator_buffer[i]==1) ? 0 : 1;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+

//---

In MT4 un codice simile, ma con alcune correzioni per MQL4, mostra questo risultato:

//+------------------------------------------------------------------+
//|                                                        #Test.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1  clrRoyalBlue,clrRed
//--- Индикаторные буферы
double indicator_buffer[];
double color_indicator_buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Установка буферов
   SetIndexBuffer(0,indicator_buffer,INDICATOR_DATA);
   SetIndexBuffer(1,color_indicator_buffer,INDICATOR_COLOR_INDEX);
//--- Свойства
   SetIndexStyle(0,DRAW_ARROW,EMPTY,5);
   SetIndexArrow(0,159);
   SetIndexEmptyValue(0,0);
//--- Инициализация буфера
   ArrayInitialize(indicator_buffer,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int      rates_total,
                const int      prev_calculated,
                const datetime &time[],
                const double   &open[],
                const double   &high[],
                const double   &low[],
                const double   &close[],
                const long     &tick_volume[],
                const long     &volume[],
                const int      &spread[])
  {
   int limit=0;
//--- Если первый вызов
   if(prev_calculated==0)
     {
      limit=0;
      ArrayInitialize(indicator_buffer,0);
     }
   else
      limit=prev_calculated-1;
//--- Основной цикл
   for(int i=limit; i<rates_total && !IsStopped(); i++)
     {
      indicator_buffer[i]=rand()%3;
      color_indicator_buffer[i]=(indicator_buffer[i]==1) ? 0 : 1;
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

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 faccio a cancellare il valore dall'array se non c'è un oggetto?

 
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 faccio a cancellare il valore dall'array se non c'è un oggetto?

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.
 
Top2n:

Come posso rimuovere un valore da un array se non c'è un oggetto?


Specificando un prezzo pari a zero.