Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 637

 
RostZ:

Hallo zusammen!

Helfen Sie mir bei diesem Fehler: "Nicht genug Rechte" oder "Nicht genug Rechte" Code #7

Was passiert: Ein Expert Advisor auf einem EURCHFX M1-Paar kann keine Position öffnen, dieser Fehler erscheint (gefunden im Journal), aber gleichzeitig öffnet er ohne Probleme auf anderen Paaren und EURCHF M5. Es lässt sich problemlos von Hand öffnen. Bei einem anderen Makler funktioniert es. Was könnte das Problem sein?

Ich danke Ihnen im Voraus für Ihre Hilfe.

Ohne zu wissen, was in Ihrem EA geschrieben steht, ist es unmöglich zu sagen, was das Problem ist. Wie verhält sich der EA bei EURCHFX M5 und EURCHF M1?
 
Top2n:


Diese Funktion gibt die Positionsnummer der Frist zurück, nicht die Nummer selbst.

Angenommen, ich habe die Positionsnummer, wie kann ich dann die Position entfernen?

Ich habe Ihnen einen Link zur Hilfe gegeben, 6 Zeilen weiter unten gibt es eine Hilfe für StringSubstr, die einfach eine Teilzeichenkette aus einer Textzeichenfolge ab einer bestimmten Position extrahiert.
 
AlexeyVik:
Ich habe Ihnen einen Link zur Hilfe gegeben, 6 Zeilen weiter unten befindet sich die Hilfe für StringSubstr, die einfach eine Teilzeichenkette aus einer Textzeichenfolge ab einer bestimmten Position extrahiert.


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);
  }
}
Was mache ich falsch? Die Aufgabe besteht darin, die Zahl 99 (Ziffer) aus der Zeichenkette
 
Top2n:

Was mache ich falsch? Die Aufgabe besteht darin, 99 (Ziffer) aus einer Zeichenkette zu extrahieren

sc=ObjectsTotal(OBJ_LABEL);

Dies ist die Anzahl der Etikettenobjekte, aber wenn ein anderes Objekt vorhanden ist, tritt ein Fehler in der Objektschleife auf.

Wenn Sie keine anderen Etiketten mit demselben Namen haben, brauchen Sie nicht alle Objekte durchzugehen. Ziehen Sie einfach OBJPROP_TEXT heraus und arbeiten Sie damit.


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

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

und konvertieren Sie dann die Zeichenkette, die die Zahl im String-Format enthält, in den gewünschten Typ.

Nun, nach diesem Beispiel zu urteilen, sind Sie zu weit davon entfernt, den gesamten Programmierprozess zu verstehen.

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

Dies ist nicht Teil der Objektbeschreibung, dieser Variable NemeText ist der Wert "Trend Power:" zugewiesen.

Lesen Sie die gesamte Hilfe, und dann werden Sie sich daran erinnern, dass Sie die Lösung gesehen haben... und es wird Ihnen leichter fallen, alles, was Sie brauchen, in der Dokumentation zu finden.

 
paladin80:
Ohne zu wissen, was in Ihrem EA geschrieben steht, ist es unmöglich zu sagen, was das Problem ist. Wie verhält sich der EA bei EURCHFX M5 und EURCHF M1?

Es funktioniert überall, außer bei EURCHFX M1. Es ist mir nicht klar, was das "Unzureichende Recht" ist und ich konnte nirgends eine genauere Erklärung finden, in welchen Fällen diese Meldung erscheint; als Reaktion auf... Methaquotes sollte wissen, was es bedeutet.
 
AlexeyVik:

Dies ist die Anzahl der Etikettenobjekte, aber wenn ein anderes Objekt vorhanden ist, tritt ein Fehler in der Objektschleife auf.

Wenn Sie keine anderen Etiketten mit demselben Namen haben, brauchen Sie nicht alle Objekte durchzugehen. Sie ziehen einfach OBJPROP_TEXT heraus und arbeiten damit.


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

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

und konvertieren Sie dann die Zeichenkette mit der Zahl im String-Format in den gewünschten Typ.

Nach diesem Beispiel zu urteilen, sind Sie noch weit davon entfernt, den gesamten Programmierprozess zu verstehen.

Dies ist nicht Teil der Objektbeschreibung, dieser Variable NemeText ist der Wert "Trend Power:" zugewiesen.

Lesen Sie die gesamte Hilfe, und dann werden Sie sich daran erinnern, dass Sie die Lösung gesehen haben... und es wird Ihnen leichter fallen, in der Dokumentation zu finden, was Sie brauchen.


Danke, ja, Sie haben Recht, ich werde am Wochenende etwas lesen, ich gehe in den Arkaim)))
 

Kann mir jemand sagen, ob er INDICATOR_COLOR_INDEX ausprobiert hat, um einen Indikatorpuffer mit verschiedenen Farben einzufärben? Oder funktioniert es in MT4 noch nicht?

Beispiel >>>

Im MT5 funktioniert dieser Code wie folgt:

//+------------------------------------------------------------------+
//|                                                        #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 ähnlichen Code, aber mit einigen Korrekturen für MQL4, zeigt dieses Ergebnis:

//+------------------------------------------------------------------+
//|                                                        #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);
  }
//+------------------------------------------------------------------+
 

Ja, ich verstehe, dass es eine Menge dummer Fragen gibt. Ehrlich gesagt, ich habe es den ganzen Tag versucht, aber ohne Ergebnis.

Ich schreibe die Preiswerte von mehreren Trendlinien auf dem aktuellen Balken in ein Array.

Wie lösche ich den Wert aus dem Array, wenn es kein Objekt gibt?

 
Top2n:

Ja, ich verstehe, dass es eine Menge dummer Fragen gibt. Ehrlich gesagt, ich habe es den ganzen Tag versucht, aber ohne Ergebnis.

Ich schreibe die Preiswerte von mehreren Trendlinien auf dem aktuellen Balken in ein Array.

Wie lösche ich den Wert aus dem Array, wenn es kein Objekt gibt?

Wenn wir die Werte der Trendlinienpreise bei jedem Tick durchgehen, das Array initialisieren und seine Dimension erhöhen, wenn wir den nächsten notwendigen Preis der notwendigen Trendlinie finden, dann besteht keine Notwendigkeit, die Werte der gelöschten Trendlinien aus dem Array zu entfernen. Das Array wird dynamisch sein und jedes Mal bei jedem Tick nur die Werte der vorhandenen Objekte enthalten.
 
Top2n:

Wie kann ich einen Wert aus einem Array entfernen, wenn es kein Objekt gibt?


Durch die Angabe eines Preises von Null.