Erstellen eines Roboters - Seite 5

 

Zwei weitere Schaltflächen zum Einstellen der horizontalen Linien wurden hinzugefügt.

-------------------------------------------------


Dateien:
ioia3x_0004.PNG  96 kb
0004.mq5  44 kb
 

Befehle für Horizontal- oder Trendlinien hinzugefügt

//+------------------------------------------------------------------+
//|                                                         0005.mq5 |
//|                        Copyright 2020, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#define    InpMagic  182979245
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
//---
CPositionInfo  m_position; // trade position object
CTrade         m_trade;    // trading object
CSymbolInfo    m_symbol;   // symbol info object
//+------------------------------------------------------------------+
//| ENUM_TRADE_COMMAND                                               |
//+------------------------------------------------------------------+
enum ENUM_TRADE_COMMAND
  {
   Turn_Off=0,       // TURN  OFF
   UpName=1,         // Line UpName
   DownName=2,       // Line DownName
   UpName_s=3,       // Line UpName + Open Sell
   UpName_b=4,       // Line UpName + Open Buy
   DownName_b=5,     // Line DownName + Open Buy
   DownName_s=6,     // Line DownName + Open Sell
   close_buys=7,     // Close All Buy's
   close_sells=8,    // Close All Sell's
   close_all=9,      // Close All Buy's and Sell's
   open_buy=10,      // Open  Buy
   open_sell=11,     // Open  Sell
   close_open_b=12,  // Close Sell + Open Buy
   close_open_s=13,  // Close Buy + Open Sell
   open_buy_sell=14, // Open  Buy and Sell
  };
//+------------------------------------------------------------------+
input string   t="----- Lots                -----";              //
input double   InpLots                      = 0.01;              // Lots
input string   t0="---- Line Name           -----";              //
input string   InpObjUpName                 = "Имя Линии Up";    // Obj: Up (Trailing Horizontal Line) or Trend Line)
input ENUM_TRADE_COMMAND InpTradeCommand    = UpName_s;          // Obj:  command: UP
input string   InpObjDownName               = "Имя Линии Down";  // Obj: Down (Trailing Horizontal Line) or Trend Line)
input ENUM_TRADE_COMMAND InTradeCommand     = DownName_b;        // Obj:  command: DOWN
input ushort   InpObjStep                   = 15;                // Obj: Step (distance from price to object, in pips)
input string   t1="---- Indicators: UP      -----";              //
input bool     InpIndicatorsUp              = false;             // Indicators: Start (true)
input ENUM_TRADE_COMMAND InpTradeCommandY1  = open_buy;          // Trade command: ( Buy )
input ENUM_TRADE_COMMAND InpTradeCommandU1  = open_sell;         // Trade command: ( Sell )
input string   t2="---- Indicators:         -----";              //
input bool     InpIndicators                = false;             // Indicators: Start (true)
input ENUM_TRADE_COMMAND InpTradeCommandY   = close_sells;       // Trade command: ( Buy )
input ENUM_TRADE_COMMAND InpTradeCommandU   = close_buys;        // Trade command: ( Sell )
//---
double   m_adjusted_point;                // point value adjusted for 3 or 5 points
int      handle_iCustomUp;                // variable for storing the handle of the iStochastic indicator
int      handle_iCustom;                  // variable for storing the handle of the iStochastic indicator
datetime ExtPrevBarsUp           = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtPrevBars             = 0;     // "0" -> D'1970.01.01 00:00';
double   m_obj_step              = 0.0;   // Obj: Trailing Stop   -> double
uint     SLEEPTIME               = 1;     // Время паузы между повторами в секундах
ushort   InpSignalsFrequency     = 1;     // Search signals, in seconds (min value "1")
datetime ExtLastSignalsRx        = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtPrevBarsRx           = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtLastSignalsSx        = 0;     // "0" -> D'1970.01.01 00:00';
datetime ExtPrevBarsSx           = 0;     // "0" -> D'1970.01.01 00:00';
bool     ExtTurnOff              = false; //
bool     ExtUpName               = false; //
bool     ExtDownName             = false; //
bool     ExtNeedCloseBuy         = false; //
bool     ExtNeedCloseSell        = false; //
bool     ExtNeedCloseAll         = false; //
bool     ExtNeedOpenBuy          = false; //
bool     ExtNeedOpenSell         = false; //
bool     ExtNeedOpenBuySell      = false; //
//+------------------------------------------------------------------+
Dateien:
0005.mq5  101 kb
 
SanAlex:

Befehle für Horizontal- oder Trendlinien hinzugefügt

Ich wünsche allen einen schönen Tag und gute Laune!

Worum hat Roman gebeten? Hier ein Zitat aus seinem ersten Beitrag: "Vollständig Programm, um einen Handel zu öffnen, wenn es beginnt und bitte erklären, was ist was. Helfen Sie viel mit."

Einfach Codes hinzufügen, ohne zu erklären, wofür sie sind , ist sinnlos!

Roman, Ihre Lösung für diese Situation ist genau die gleiche wie meine. Nehmen Sie einen einfachen Expert Advisor von CodeBase, zumindest diesen https://www.mql5.com/ru/code/138

Öffnen Sie den Code in MetaEditor und beginnen Sie, die Kommentare in jeder Zeile des Codes zu studieren. Es gibt EAs, bei denen alle Kommentare auf Englisch verfasst sind. Wenn Sie die Sprache nicht gut beherrschen, hilft Ihnen Google Translator. Wenn in einem Expert Advisor der Kommentar zu den Zeilen fehlt, suchen Sie nacheinander alle farbigen Wörter im Programmcode, setzen Sie den Cursor darauf, drücken Sie die Taste F1 und die entsprechenden Abschnitte des MQL5-Handbuchs werden für Sie geöffnet. Lesen Sie diese Abschnitte, kommentieren Sie diese Zeilen in Ihren eigenen Worten, und wenn etwas unklar ist, stellen Sie hier Fragen. Auf diese Weise werden Sie beim Erlernen der Programmiersprache schneller vorankommen.

Mit freundlichen Grüßen, Vladimir.

Советник "Метод Пуриа"
Советник "Метод Пуриа"
  • www.mql5.com
Предлагается использовать следующие валютные пары в торговой стратегии форекс "Метод Пуриа" : AUDJPY - M30 - 15 пунктов (т.е. закрываем сделку при 15 пипсов тейк-профита) NZDUSD - 1H - 25 пунктов USDCAD - H1 - 20 пунктов EURGBP - H1 - 10 пунктов USDJPY - M30 - 15 пунктов GBPUSD - М30 - 20 пунктов USDCHF - M30 - 10 пунктов EURCHF - H1 - 15...
 
MrBrooklin:

Guten Tag und gute Laune an alle!

Worum hat Roman gebeten? Hier ein Zitat aus seinem ersten Beitrag: "Vollständig Programm, auf die Eröffnung eines Handels, wenn es beginnt und bitte erklären, was ist was. Helfen Sie viel mit."

Das einfache Hinzufügen von Codes ohne Erklärung ist für ihn nutzlos!

Roman, Ihre Lösung in dieser Situation ist genau die gleiche wie meine. Nehmen Sie einen einfachen Expert Advisor von CodeBase, zumindest diesen https://www.mql5.com/ru/code/138

Öffnen Sie den Code in MetaEditor und beginnen Sie, die Kommentare in jeder Zeile des Codes zu studieren. Es gibt EAs, bei denen alle Kommentare auf Englisch verfasst sind. Wenn Sie die Sprache nicht gut beherrschen, hilft Ihnen Google Translator. Wenn in einem Expert Advisor der Kommentar zu den Zeilen fehlt, suchen Sie nacheinander alle farbigen Wörter im Programmcode, setzen Sie den Cursor darauf, drücken Sie die Taste F1 und die entsprechenden Abschnitte des MQL5-Handbuchs werden für Sie geöffnet. Lesen Sie diese Abschnitte, kommentieren Sie diese Zeilen in Ihren eigenen Worten, und wenn etwas unklar ist, stellen Sie hier Fragen. Auf diese Weise werden Sie beim Erlernen der Programmiersprache schneller vorankommen.

Mit freundlichen Grüßen, Vladimir.

Ich verstehe nicht - ist es besser, zu löschen, was ich betrogen habe? - Dass er selbst, wie zu lernen?

 
SanAlex:

Ich verstehe das nicht - ist es besser, zu löschen, was ich getan habe? - damit er selbständig lernen kann?

Nicht löschen, sondern erklären, was in den Codes steht und warum das so ist!

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Nicht löschen, sondern erklären, was in den Codes steht und warum es gemacht wird!

Hochachtungsvoll, Vladimir.

Ich bin selbst Autodidakt - und ich kopiere die verfügbaren Codes selbst, - Das Problem ist, dass ich nicht weiß, wie ich erklären soll, wie man sculpt!? - etwas in mir sagt mir, wie ich formen soll.

----------------------------------

Ich weiß, was ich gegossen habe, was noch fehlt, ist ein Thrall für die Linie.

 
SanAlex:

Ich bin selbst Autodidakt - und ich kopiere die verfügbaren Codes selbst, - Das Problem ist, dass ich nicht weiß, wie ich erklären soll, wie man sculpt!? - etwas in mir sagt mir, wie ich formen soll.

Genau das ist das Problem! Als ich anfing, die Sprache MQL5 zu studieren, las ich viele Artikel über die Erstellung von Expert Advisors. ANFANG Ich habe es noch nicht gefunden. Natürlich gibt es einige Artikel mit Links zu Roman, aber sie sind nicht ausreichend, zumindest für mich.

Ich selbst sehe zum Beispiel eine Menge EA-Codes, aber keine Möglichkeit zu verstehen, warum diese oder jene Zeile geschrieben wurde. Bisher hatte ich genug Grips, um den Code für mich selbst umzuschreiben und einen der vorgefertigten Expert Advisors zu verwenden.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Genau das ist das Problem! Ich habe viele Artikel über die Erstellung von Expert Advisors gelesen, als ich anfing, die Sprache MQL5 zu studieren. ANFÄNGER Ich habe es noch nicht gefunden. Natürlich gibt es einige Artikel mit Links zu Roman, aber sie sind nicht ausreichend, zumindest für mich.

Ich sehe zum Beispiel selbst viele Expert Advisor Codes, aber ich kann nicht verstehen, warum diese oder jene Zeile geschrieben wurde. Bisher hatte ich genug Grips, um den Code von einem vorgefertigten Expert Advisor für mich selbst umzuschreiben.

Mit freundlichen Grüßen, Vladimir.

Ich bin auf der Suche nach Funktionen für meine Aufgaben - ich nehme eine Funktion auseinander, wenn ich anfange zu verstehen, wie sie funktioniert, dann ist alles leichter zu lernen.

 
SanAlex:

Ich suche nach Funktionen für meine Aufgaben - ich nehme die Funktion auseinander, wenn ich beginne zu verstehen, wie sie funktioniert, dann ist alles leichter zu lernen.

Hier ist ein Live-Beispiel für ein Problem, mit dem ich seit über einer Stunde kämpfe. Ich brauche es zu erstellen und anzeigen ZigZagColor Indikator auf dem Diagramm zu Beginn des EA. Dies geschah in int OnInit:

   handle_iCustom=iCustom(m_symbol.Name(),Period(),"Examples\\ZigzagColor",
                          Inp_ZZ_Depth,
                          Inp_ZZ_Deviation,
                          Inp_ZZ_Backstep);
   ChartIndicatorAdd(ChartID(),0,handle_iCustom);

Der Indikator wurde erstellt und angezeigt. Nun muss der Indikator gelöscht werden, nachdem der Expert Advisor entfernt wurde. Ich schreibe es:

void OnDeinit(const int reason)
  {
//---
   IndicatorRelease(handle_iCustom);
   ObjectsDeleteAll(0,"Examples\\ZigzagColor");
  }

Der Indikator wird jedoch nicht entfernt. Ich habe alles in Ordnung gebracht. Ich habe den Griff gereinigt und die Löschfunktion angewendet. Ich frage mich, was der Grund dafür ist, dass es sich nicht deinstallieren lässt.

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin:

Hier ist ein Live-Beispiel für ein Problem, mit dem ich seit über einer Stunde kämpfe. Ich wollte, dass der ZigZagColor-Indikator erstellt und beim Starten des EA auf dem Chart angezeigt wird. Dies geschah in int OnInit:

Der Indikator wurde erstellt und angezeigt. Jetzt muss der Indikator gelöscht werden, nachdem der Expert Advisor entfernt wurde. Ich schreibe es:

Der Indikator wird jedoch nicht entfernt. Ich habe alles in Ordnung gebracht. Ich habe den Griff gereinigt und die Löschfunktion angewendet. Ich frage mich, was der Grund dafür ist, dass es sich nicht deinstallieren lässt.

Mit freundlichen Grüßen, Vladimir.

Es gibt eine kompliziertere Funktion zum Löschen von

input string   t12="--- Indicator Delete    -----";              //
input string   Inpshort_name                = "Имя Индикатора";  // Delete Indicator Name
input string   Inpshort_name_1              = "Имя Индикатора";  // Delete Indicator Name
input bool     Inpres                       = false;             // Delete All Indicators
//+------------------------------------------------------------------+
//| ChartIndicatorDelete                                             |
//+------------------------------------------------------------------+
bool IndicatorDelete(void)
  {
     {ActionsOnTheChart(0);}
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ActionsOnTheChart(const long chart_id)
  {
   int sub_windows_total =-1;
   int indicators_total  =0;
//---
   if(!ChartWindowsTotal(chart_id,sub_windows_total))
     {
      return(false);
     }
//---
   for(int i=sub_windows_total-1; i>=0; i--)
     {
      indicators_total=ChartIndicatorsTotal(chart_id,i);
      //---
      if(indicators_total>0)
        {
         ChIndicatorsDelete(chart_id,i,indicators_total);
        }
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChartWindowsTotal(const long chart_ID,int &sub_windows_total)
  {
   long value=-1;
//---
   if(!ChartGetInteger(chart_ID,CHART_WINDOWS_TOTAL,0,value))
     {Print(__FUNCTION__," Error = ",GetLastError()); return(false);}
//---
   sub_windows_total=(int)value;
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChIndicatorsDelete(const long  chart_id,
                        const int   sub_window,
                        const int   indicators_total)
  {
   for(int i=indicators_total-1; i>=0; i--)
     {
      string indicator_name=ChartIndicatorName(chart_id,sub_window,i);
      //---
      ChIndicatorDelete(indicator_name,chart_id,sub_window);
      ChartRedraw();
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ChIndicatorDelete(const string shortname,
                       const long   chartid=0,
                       const int    subwindow=0)
  {
   bool res=ChartIndicatorDelete(chartid,subwindow,Inpshort_name);
   bool res2=ChartIndicatorDelete(chartid,subwindow,Inpshort_name_1);
   if(Inpres)
      bool res0=ChartIndicatorDelete(chartid,subwindow,shortname);
//--- проанализируем результат вызова ChartIndicatorDelete()
   if(!res)
     {
      PrintFormat("%s",shortname,subwindow,GetLastError());
     }
//---
   return(true);
  }
//+------------------------------------------------------------------+