Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1268

 
Jungs, dies ist eine Frage, für die ich nicht gefunden haben, eine Antwort irgendwo. Welche Funktion in den Indikator zu schreiben, so dass neue Bars nicht öffnen und Ticken in der Null-Bar, bis es funktioniert meine Bedingung, bitte antworten Sie mir privat))
 

Hallo!

Ich bin in drei Kiefern verwirrt:

Ich setze Zahlen extern int a =2; extern int b =3; extern int c =4; wie setze ich nun die Zahl abcso, dass sie ihren Wert ändert, wenn ich a, oder b, oder c ändere, um sie mit einem gegebenen d zu vergleichen (z. B. d=344)?

Ich danke Ihnen!

 
novichok2018:

Hallo!

Ich bin in drei Kiefern verwirrt:

Ich setze Zahlen extern int a =2; extern int b =3; extern int c =4; wie setze ich nun die Zahl abcso, dass sie ihren Wert ändert, wenn ich a, oder b, oder c ändere, um sie mit einem gegebenen d zu vergleichen (z. B. d=344)?

Ich danke Ihnen!

x = c + b*10 + a*100

 
Сергей Таболин:

x = c + b*10 + a*100

Oh, mein Gott! Ich zerbreche mir den Kopf! Ich danke Ihnen!

 
Hallo, 2020.10.03_13:33 GMT+3. Ich habe den Standard Moving Average EA für MetaTrader 4 genommen. Und begann, sie so zu verändern, dass sie rentabel wurde. Beim Versuch, die Abschlussbedingungen mit der OrderProfit()-Funktion im Strategietester zu beschreiben, hat der Expert Advisor den Abschluss von Geschäften unter dieser Bedingung gestoppt. Es geht nicht so weit, dass ein Geschäft geschlossen wird. Ich bezweifle jedoch, dass ich die Abschlussbedingungen richtig geschrieben habe. Andernfalls würde der Expert Advisor die Trades schließen. Ich werde wahrscheinlich versuchen, den Eröffnungspreis des Geschäfts und die letzten Preise aufzuschreiben. Sobald die maximale Differenz zwischen dem Eröffnungskurs und dem letzten Kurs erreicht ist und sich diese Differenz verringert hat, schließen Sie den Handel. Ich hänge die Expert Advisor-Datei an. 13:50 GMT+3.
Dateien:
 
Николай Никитюк:
Hallo, 2020.10.03_13:33 GMT+3. Ich habe den Standard Moving Average EA für MetaTrader 4 genommen. Und begann, sie so zu verändern, dass sie rentabel wurde. Beim Versuch, die Abschlussbedingungen mit der OrderProfit()-Funktion im Strategietester zu beschreiben, hat der Expert Advisor den Abschluss von Geschäften unter dieser Bedingung gestoppt. Es geht nicht so weit, dass ein Geschäft geschlossen wird. Ich bezweifle jedoch, dass ich die Abschlussbedingungen richtig geschrieben habe. Andernfalls würde der Expert Advisor die Trades schließen. Ich werde wahrscheinlich versuchen, den Eröffnungspreis des Geschäfts und die letzten Preise zu schreiben. Sobald die maximale Differenz zwischen dem Eröffnungskurs und dem letzten Kurs erreicht ist und sich diese Differenz verringert hat, schließen Sie den Handel. Ich hänge die Expert Advisor-Datei an. 13:50 GMT+3.
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
   //--- check order type
      // 
      if(OrderType()==OP_BUY)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;    
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())     // Исходя из ваших условий, то вот            
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }  
         else break;     
         break;
        }
      if(OrderType()==OP_SELL)
        {
        /*
         if(OrderProfit()>0.0)  
           {ProfitMax=OrderProfit(); break;} // Здесь у вас прерывается цикл, если сделка в плюсе
         if(OrderProfit()>ProfitMax)
           {ProfitMax=OrderProfit(); break;}
         if((ProfitMax-DiffProfit)<0.0) break;     
         if((ProfitMax-DiffProfit)>OrderProfit())
         */
         if(DiffProfit<OrderProfit())        // Исходя из ваших условий, то вот
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         else break;  
         break;
        }
     }      

//+------------------------------------------------------------------+
 

Hallo!

Ich habe begonnen, eine Funktion zur Normalisierung der Eingabedaten zu schreiben. Aber ich kann die Originalwerte nicht durch die normalisierten Werte "ersetzen". D.h. ich kann keine Werte in Open timeseries buffer mit neuen Werten aus Temp array aktualisieren. Was ist mein Fehler? Ich habe das Gefühl, dass ich versuche, OOP und Nicht-OOP zu kreuzen)).

Open=new CiOpen();
   if(CheckPointer(Open)==POINTER_INVALID || !Open.Create(Symb.Name(),PERIOD_CURRENT))
      return;
//---
   int bars=10;
   double Temp[];                //Создаем массив для временного хранения входных данных
   ArraySetAsSeries(Temp,true);  //Устанавливает флаг AS_SERIES
   Open.GetData(0,bars,Temp);    //Копируем необходимые данные в массив Temp
   InputNormalize(Temp,bars);    //Нормализуем данные в массиве
 
//---Как заменить значения в Open значениями из Temp?---

  }
//+------------------------------------------------------------------+
//| функция нормализации входных данных                              |
//+------------------------------------------------------------------+
void InputNormalize(double &buffer[],int bars)
  {
   double d1=-1;
   double d2=1;
   double x_min=buffer[ArrayMinimum(buffer,0,bars)];
   double x_max=buffer[ArrayMaximum(buffer,0,bars)];
   for(int i=0; i<bars; i++)
     {
      buffer[i]=(((buffer[i]-x_min)*(d2-d1))/(x_max-x_min))+d1;
     }
   return;
  }

Ich bin sicher, es geht auch einfacher! In diesem Fall unterrichten Sie mich bitte)

 
Aleksei Lesnikov:

Hallo!

Ich habe begonnen, eine Funktion zur Normalisierung der Eingabedaten zu schreiben. Aber ich kann die Originalwerte nicht durch die normalisierten Werte "ersetzen". D.h. ich kann keine Werte in Open timeseries buffer mit neuen Werten aus Temp array aktualisieren. Was ist mein Fehler? Ich habe das Gefühl, dass ich versuche, OOP und Nicht-OOP zu kreuzen)).

Ich bin sicher, es geht auch einfacher! In diesem Fall unterrichten Sie mich bitte)

Lesen Sie die Sprachdokumentation

Der Wert der vordefinierten Variablen wird vom Client-Terminal gesetzt, bevor ein mql4-Programm zur Ausführung gestartet wird. Vordefinierte Variablen sind konstant und können vom mql4-Programm aus nicht verändert werden.


Предопределенные переменные - Справочник MQL4
Предопределенные переменные - Справочник MQL4
  • docs.mql4.com
Для каждой выполняющейся mql4-программы поддерживается ряд предопределенных переменных, которые отражают состояние текущего ценового графика на момент запуска программы - эксперта, скрипта или пользовательского индикатора. Значение предопределенным переменным устанавливает клиентский терминал перед запуском mql4-программы на выполнение...
 
Alexey Viktorov:

Lesen Sie die Sprachdokumentation

Alexey, danke! Jetzt ist klar, dass das nicht möglich ist.

Es stimmt, ich bin nicht gerade mql4. Ich versuche, Daten über die Klasse CiOpen zu ändern. Ich bin verwirrt durch die Update-Methode, die das Element an einer bestimmten Position des Arrays ändern sollte.

Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
Документация по MQL5: Стандартная библиотека / Индикаторы / Таймсерии / CiOpen
  • www.mql5.com
CiOpen - Таймсерии - Индикаторы - Стандартная библиотека - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksei Lesnikov:

Alexej, danke! Jetzt ist klar, dass das nicht möglich ist.

Es stimmt, ich habe nicht genau mql4. Ich versuche, Daten über die Klasse CiOpen zu ändern. Ich war verwirrt von der Update-Methode, die das Element an einer bestimmten Position des Arrays ändern sollte.

Da die Frage im Bereich mql4 gestellt wurde, habe ich in Bezug auf mql4 geantwortet. Es gibt keine Hinweise auf mql5 in Ihrer Frage. Das Ergebnis ist jedoch das gleiche.