Erstellen eines Roboters - Seite 2

 
Renat Akhtyamov:
Schauen Sie sich die Codebasis an, es gibt viele Experten da draußen. Untersuchen Sie einen von ihnen gründlich, und Sie werden es verstehen. dass Ihre Aufgabe in nicht mehr als 30 Minuten programmiert werden kann

je nach Aufgabe... es gibt Vorlagen, aber sie sind so primitiv :(

 
VVT:

je nach Aufgabe... es gibt Vorlagen, aber sie sind so primitiv :(

Und ich verdaue die Dixi-Klo's nicht 😂.
 
VVT:

je nach Aufgabe... es gibt Vorlagen, aber sie sind so primitiv :(

Ich weiß nur, dass das Risiko eines Scheiterns umso geringer ist, je primitiver ein Programm ist. Wie in der Mechanik gilt: Je weniger Details, desto zuverlässiger der Mechanismus. Das Wichtigste ist also das Gleichgewicht zwischen Funktionalität und Zuverlässigkeit.

 
Роман Жилин:

Ich weiß nur, dass das Risiko des Scheiterns umso geringer ist, je einfacher das Programm ist. Wie in der Mechanik gilt: Je weniger Teile, desto zuverlässiger der Mechanismus. Das Wichtigste ist also das Gleichgewicht zwischen Funktionalität und Zuverlässigkeit.

Ich stimme zu, ich habe das schon irgendwo hier gesagt, ein Expert Advisor sollte die wichtigsten Dinge enthalten, die zur Lösung des Problems benötigt werden, und alles andere ist nur ein bloßer Fluff und verbraucht die Ressourcen des Computers.

 

Hier ist ein kurzer Schnappschuss zum Öffnen von den Tasten

//+------------------------------------------------------------------+
//|                                                         0001.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
//---
input double InpLots          =0.01; // Lots
//---
double m_adjusted_point;   // point value adjusted for 3 or 5 points
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);;
//---
   m_trade.SetExpertMagicNumber(InpMagic);
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
//--- tuning for 3 or 5 digits
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;
   m_adjusted_point=m_symbol.Point()*digits_adjust;
//---
   m_trade.SetDeviationInPoints(3*digits_adjust);
   if(!m_position.Select(Symbol()))
     {
      CheckObject();
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(ObjectFind(0,"BUY")==0)
     {
      ObjectDelete(0,"BUY");
     }
   if(ObjectFind(0,"SELL")==0)
     {
      ObjectDelete(0,"SELL");
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   CheckButon();
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CheckButon(void)
  {
//---
   bool res=false;
     {
      if(ObjectGetInteger(0,"BUY",OBJPROP_STATE)!=0)
        {
         ObjectSetInteger(0,"BUY",OBJPROP_STATE,0);
         double price=m_symbol.Ask();
           {
            //--- open position
            if(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_BUY,InpLots,price,0.0,0.0))
               printf("Position by %s to be opened",m_symbol.Name());
            else
              {
               printf("Error opening BUY position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment());
               printf("Open parameters : price=%f,TP=%f",price,0.0);
              }
            PlaySound("ok.wav");
           }
        }
      if(ObjectGetInteger(0,"SELL",OBJPROP_STATE)!=0)
        {
         ObjectSetInteger(0,"SELL",OBJPROP_STATE,0);
         double price0=m_symbol.Bid();
           {
            if(m_trade.PositionOpen(m_symbol.Name(),ORDER_TYPE_SELL,InpLots,price0,0.0,0.0))
               printf("Position by %s to be opened",m_symbol.Name());
            else
              {
               printf("Error opening SELL position by %s : '%s'",m_symbol.Name(),m_trade.ResultComment());
               printf("Open parameters : price=%f,TP=%f",price0,0.0);
              }
            PlaySound("ok.wav");
           }
        }
      res=true;
     }
//--- result
   return(res);
  }
//+------------------------------------------------------------------+
//| Check for long position closing                                  |
//+------------------------------------------------------------------+
bool CheckObject(void)
  {
//---
   bool res=false;
     {
      ObjectCreate(0,"BUY",OBJ_BUTTON,0,0,0);
      ObjectSetInteger(0,"BUY",OBJPROP_XDISTANCE,ChartGetInteger(0,CHART_WIDTH_IN_PIXELS)-102);
      ObjectSetInteger(0,"BUY",OBJPROP_YDISTANCE,37);
      ObjectSetString(0,"BUY",OBJPROP_TEXT,"BUY");
      ObjectSetInteger(0,"BUY",OBJPROP_BGCOLOR,clrMediumSeaGreen);
      ObjectCreate(0,"SELL",OBJ_BUTTON,0,0,0);
      ObjectSetInteger(0,"SELL",OBJPROP_XDISTANCE,ChartGetInteger(0,CHART_WIDTH_IN_PIXELS)-50);
      ObjectSetInteger(0,"SELL",OBJPROP_YDISTANCE,37);
      ObjectSetString(0,"SELL",OBJPROP_TEXT,"SELL");
      ObjectSetInteger(0,"SELL",OBJPROP_BGCOLOR,clrDarkOrange);
      res=true;
     }
//--- result
   return(res);
  }
//+------------------------------------------------------------------+
Dateien:
0001.mq5  5 kb
 
SanAlex:

Hier ist ein schnelles Beispiel, das ich mit Schaltflächen geöffnet habe.

Danke, ich denke, ich werde es mir erst einmal ansehen.

 
Роман Жилин:

Danke, ich denke, ich werde es zuerst studieren.

Ich empfehle nicht, die Strategie an den EA anzupassen, besser umgekehrt. Alternativ können Sie auch die notwendigen Teile anderer EAs zusammenstellen, um Ihre Strategie umzusetzen.

 
Роман Жилин:

Ich brauche den richtigen Weg für einen Neuling, ich fühle mich, als würde ich mich im Kreis drehen


Leitfaden-Forum-Geschichten-Compiler-Fehler (und so weiter, jedes Mal im Kreis).

Ich glaube, ich lerne etwas Neues, aber ich habe das Gefühl, ich bin schwer deprimiert, ich kann nicht einmal eine Grundbestellung öffnen, wenn ich einen EA starte. Ich brauche jemanden, der mir in der tiefsten, weglosen Nacht mit einer Taschenlampe leuchtet. Ich habe mich verirrt und bin immer noch auf der Suche.


Vollständig Programm, auf die Eröffnung eines Handels, wenn es beginnt und bitte klären, was ist was. Das hilft mir sehr.

Hallo Roman!

Es gibt zwei tolle Artikel für Anfänger, die mir sehr geholfen haben:

https://www.mql5.com/ru/articles/481

https://www.mql5.com/ru/articles/496

Mit freundlichen Grüßen, Vladimir.

Торговые операции на MQL5 - это просто
Торговые операции на MQL5 - это просто
  • www.mql5.com
Почти все трейдеры приходят на рынок для того, чтобы заработать денег, хотя есть и доля тех, кому важен не сам торговый результат, а участие в процессе, драйв. Впрочем, получить удовольствие от процесса можно не только торгуя вручную, но и занимаясь разработкой автоматических торговых систем. Ведь создание торгового робота может быть таким же...
 
MrBrooklin:

Hallo Roman!

Es gibt zwei tolle Artikel für Anfänger, die mir sehr geholfen haben:

https://www.mql5.com/ru/articles/481

https://www.mql5.com/ru/articles/496

Mit freundlichen Grüßen, Vladimir.

Wladimir, ich danke dir. Ich bin auf den ersten Artikel gestoßen, aber der zweite ist genau das, was ich jetzt brauche.


Mit freundlichen Grüßen, Roman.

 
Роман Жилин:

Wladimir, ich danke dir. Ich bin über den ersten Artikel gestolpert, aber der zweite ist genau das, was ich jetzt brauche.


Mit freundlichen Grüßen, Roman.

Ich verwende auch aktiv die MQL5-Referenz (Registerkarte MQL5-Dokumentation auf der MQL5-Website). Sie enthält fast alle Informationen. Der einzige große Nachteil dieses Buches - es ist für Leute geschrieben, die Grundkenntnisse in anderen Programmiersprachen haben, aber nicht für Anfänger. So verstehe ich zum Beispiel immer noch nicht den Sinn des ständig vorkommenden Satzes, der mit"Returns" beginnt:

AccountInfoDouble

Gibt den Wert des Double-Typs der entsprechenden Kontoeigenschaftzurück


Wer kehrt zurück, zu wem kehrt sie zurück, wohin kehrt sie zurück, warum kehrt sie zurück? Ich verstehe es immer noch nicht.

Mit freundlichen Grüßen, Vladimir.

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