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

 
WindUP:
Danke, aber könnten wir wenigstens ein objektives Beispiel haben? Ein Blick von oben, sozusagen. Ich bin ein absoluter Neuling und beschäftige mich seit zwei Tagen mit dem Thema :-)

hier ist wahrscheinlich etwas Ähnliches

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput int    Inpcopiedrates = 2;    // какой бар
sinput double Inplow         = 100;  // отступить от low
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
 
SanAlex:

Ich versuche auch zu lernen - ich glaube, ich komme langsam voran.

Hallo. Entschuldigung, ich sehe im Screenshot, dass es Ihnen gelungen ist, aber ich habe nicht gesehen, wo in diesem Code die Funktion des Kopierens von Daten der vorherigen Kerze [1] befindet ?




Können Sie mir bitte sagen, MQL5 Programmierkurse für Dummies, von einfach bis komplex, wo und mit was ist besser zu beginnen, um mehr Ergebnisse zu erhalten und weniger Zeit zu verschwenden? Ich wäre Ihnen sehr dankbar :-)

 
WindUP:

Hallo. Sorry, ich sehe in dem Screenshot, dass Sie erfolgreich, aber hier habe ich nicht sehen, wo in diesem Code ist die Funktion des Kopierens von Daten der vorherigen Kerze [1] ?




Wie kann ich Ihnen sagen, MQL5 Programmierkurse für Dummies, von einfach bis komplex, wo und mit was ist besser zu beginnen, um mehr Ergebnisse zu erhalten und weniger Zeit zu verschwenden? Ich wäre Ihnen sehr dankbar :-)

Stellen Sie sich vor, ein Freund kommt zu Ihnen und bittet Sie, "Ihnen beizubringen, wie man im Internet arbeitet". Ist es schwierig, sich vorzustellen, was man unterrichten soll? Genauso schwierig ist es, das Programmieren zu lehren. Es gibt eine Aufgabe - es gibt eine Lösung. Aber genau so... Sie können jede Sprache lernen, die Grundlagen sind für alle gleich. Beim Programmieren geht es nicht so sehr um das Schreiben von Code, sondern darum, ein Problem zu formulieren, einen Algorithmus für dessen Lösung zu schreiben und erst dann Code zu schreiben. Und die letzte Phase, das Debugging und die Überprüfung des Ergebnisses.

Im Code von SanAlrx verstehe ich nicht, warum wir einen solchen Vorrat an kopierten Daten anlegen müssen, wenn wir eine spezifische Aufgabe haben, um OHLC nur für die erste Kerze zu erhalten.

int copied=CopyRates(Symbol(),0,0,10,rates);

und warum die Werte der aktuellen, gerade geöffneten Kerze kopieren. Aber... das ist seine Entscheidung und seine Kakerlaken.

 
WindUP:

Hallo. Sorry, ich sehe in dem Screenshot, dass Sie erfolgreich, aber hier habe ich nicht sehen, wo in diesem Code ist die Funktion des Kopierens von Daten der vorherigen Kerze [1] ?




Können Sie mir bitte sagen, MQL5 Programmierkurse für Dummies, von einfach bis komplex, wo und wie am besten zu starten, um mehr Ergebnisse zu erhalten und weniger Zeit zu verschwenden? Ich wäre Ihnen sehr dankbar :-).

ich selbst bin ein Student - ich schaue mir zum Beispiel die Dokumentationhttps://www.mql5.com/ru/docs/series/copyrates an, dort gibt es ein Beispiel für ein Skript, ich speichere es auf meinem PC und fange an, es zu lesen und die Details nach Bauchgefühl zu erarbeiten.

und diese Funktion habe ich - nach meinem Bauchgefühl - gefunden.

//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;

Es ist für KAUFEN "SL".

Zum VERKAUFEN sollte es so aussehen

   double sl=rates[Inpcopiedrates].high+Inphigh/100;

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Ich habe hier nur eine Zahl angegeben - es wäre möglich, bis zu 10 Barren zu kaufen. Aber Sie brauchen sie nicht - Sie brauchen 1 (eine).

   int copied=CopyRates(Symbol(),0,0,10,rates);
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
WindUP:

Hallo. Sorry, ich sehe im Screenshot, dass Sie erfolgreich waren, aber ich habe nicht gesehen, wo in diesem Code gibt es eine Funktion zum Kopieren von Daten der vorherigen Kerze [1] ?




Können Sie mir bitte sagen, MQL5 Programmierkurse für Dummies, von einfach bis komplex, wo und wie am besten zu starten, um mehr Ergebnisse zu erhalten und weniger Zeit zu verschwenden? Ich wäre Ihnen sehr dankbar :-)

Hier ist ein gutes Beispiel - ich bin gerade auf die Seite gegangen und hier ist ein besseres Skript, das Ihnen zeigt, wie es funktioniert.https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint

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

Ich selbst lerne - zum Beispiel habe ich die Dokumentationhttps://www.mql5.com/ru/docs/series/copyrates besucht, dort gibt es ein Beispielskript, ich speichere es auf meinem Computer und fange an, es zu lesen und zu erforschen, indem ich nach Details suche.

und diese Funktion habe ich - nach meinem Bauchgefühl - gefunden.

Es ist für KAUFEN "SL".

Zum VERKAUFEN sollte es so aussehen

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Ich habe hier nur eine Zahl angegeben - es wäre möglich, bis zu 10 Barren zu kaufen. Aber Sie brauchen sie nicht - Sie brauchen 1 (eine).

Dies öffnet und setzt den SL für BUY und SELL

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput double Inplowhigh     = 100;  // отступить low high
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   OnStartBuy();
   OnStartSell();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartBuy()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].low-Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartSell()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_BID);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].high+Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+

Foto von

 

Hallo.

Könnten Sie mir einen Tipp geben, ich bin überfordert.

Ich verschreiben Indikator durch iCustom und mit einem Problem konfrontiert - Indikator hat einen Text-Menü mit einer Auswahl, öffnet es und es gibt mehrere Elemente vorgeschrieben, na ja, ich denke, es ist klar)

Wie kann ich sie in das Menü aufnehmen?

extern int HIT = 0; funktioniert nicht, die Anzeige bleibt stehen, es wird kein Parameter angezeigt.

Vielleicht durch ENUM , da was zu wählen, oder vielleicht etwas anderes?

Vielen Dank im Voraus.

Dateien:
 
Сергей:

Hallo.

Könnten Sie mir einen Tipp geben, ich bin überfordert.

Ich verschreiben Indikator durch iCustom und mit einem Problem konfrontiert - Indikator hat einen Text-Menü mit einer Auswahl, öffnet es und es gibt mehrere Elemente vorgeschrieben, na ja, ich denke, es ist klar)

Wie kann ich sie in das Menü aufnehmen?

extern int HIT = 0; funktioniert nicht, die Anzeige bleibt stehen, es wird kein Parameter angezeigt.

Vielleicht durch ENUM , welches zu wählen ist, oder vielleicht etwas anderes?

Vielen Dank im Voraus.

Geben Sie eine leere Zeichenfolge "" oder ein Leerzeichen " " ein.

 

Also wollte ich es irgendwie verschreiben, damit ich die Einstellungen ändern kann.

Ich habe für jedes Paar einen anderen Artikel, wie wähle ich ihn aus?

Und ohne dieses Menü ist nicht relevant, und der Screenshot ist nur ein Beispiel für ein ähnliches Menü.

 
Сергей:

Also wollte ich es irgendwie vorschreiben, damit ich die Einstellungen ändern kann.

Ich habe für jedes Paar einen anderen Artikel, wie wähle ich ihn aus?

Und ohne dieses Menü ist nicht relevant, und der Screenshot ist nur ein Beispiel für ein ähnliches Menü.

Entschuldigung für die Unaufmerksamkeit. Der Indikator hat eine Aufzählung. Und im Expert Advisor müssen Sie den Namen dieser Aufzählung als Variablentyp in den Eingabeparametern angeben.

Obwohl, ich habe es nicht versucht... und vielleicht müssen wir diese Aufzählung im EA wiederholen, oder einfach den ENUM_BASE_CORNER-Variablentyp setzen