Creare un robot - pagina 2

 
Renat Akhtyamov:
Controllate il codebase, ci sono molti esperti là fuori. Esaminate bene uno di loro e capirete. Che il tuo compito possa essere programmato in non più di 30 minuti

a seconda del compito... ci sono dei modelli, ma sono così primitivi :(

 
VVT:

a seconda del compito... ci sono dei modelli, ma sono così primitivi :(

E non digerisco i bagni chimici 😂
 
VVT:

a seconda del compito... ci sono dei modelli, ma sono così primitivi :(

Una cosa che so è che più un programma è primitivo, meno rischi di fallimento ci sono. Come in meccanica, meno dettagli ci sono, più affidabile è il meccanismo. Quindi, la cosa principale è l'equilibrio tra funzionalità e affidabilità.

 
Роман Жилин:

Una cosa che so è che più primitivo è il programma, più basso è il rischio di fallimento. Come in meccanica, meno parti ci sono, più affidabile è il meccanismo. Quindi, la cosa principale è l'equilibrio tra funzionalità e affidabilità.

Sono d'accordo, l'ho già detto da qualche parte qui, un Expert Advisor dovrebbe contenere le cose più importanti necessarie per risolvere il problema, e tutto il resto è solo un semplice fruscio e porta via le risorse del computer.

 

Ecco una rapida istantanea da aprire dai pulsanti

//+------------------------------------------------------------------+
//|                                                         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);
  }
//+------------------------------------------------------------------+
File:
0001.mq5  5 kb
 
SanAlex:

Eccone uno veloce che ho fatto per aprire con i pulsanti.

Grazie, penso che darò un'occhiata, per cominciare.

 
Роман Жилин:

Grazie, penso che lo studierò prima.

Non consiglio di adattare la strategia all'EA, meglio il contrario. In alternativa, potresti mettere insieme le parti necessarie di altri EA per implementare la tua strategia.

 
Роман Жилин:

Ho bisogno della giusta direzione per un principiante, mi sembra di girare in tondo


Guida-Forum-Storie-Compiler-Errori (e così via in cerchio ogni volta).

Penso di imparare qualcosa di nuovo, ma ho la sensazione di essere gravemente depresso, non riesco ad aprire nemmeno l'ordine di base quando si avvia un EA. Ho bisogno di qualcuno che faccia brillare una torcia nella parte più profonda della notte senza sentieri. Ho perso la mia strada e sto ancora vagando.


Completamente programma, sull'apertura di un commercio quando inizia e per favore chiarire che cosa è cosa. Mi aiuta molto.

Ciao Roman!

Ci sono due grandi articoli per principianti che mi hanno aiutato molto:

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

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

Sinceramente, Vladimir.

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

Ciao Roman!

Ci sono due grandi articoli per principianti che mi hanno aiutato molto:

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

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

Sinceramente, Vladimir.

Vladimir, grazie. Mi sono imbattuto nel primo articolo ma il secondo è esattamente quello di cui ho bisogno ora.


Saluti, Roman.

 
Роман Жилин:

Vladimir, grazie. Mi sono imbattuto nel primo articolo, ma il secondo è proprio quello di cui ho bisogno ora.


Cordiali saluti, Roman.

Sto anche usando attivamente il Riferimento MQL5 (scheda Documentazione MQL5 sul sito web MQL5). Contiene quasi tutte le informazioni. L'unico grande svantaggio di questo libro - è scritto per persone che hanno una conoscenza di base di altri linguaggi di programmazione, ma non per principianti. Per esempio, non ho ancora capito il senso della frase che ricorre costantemente e che inizia con"Returns":

AccountInfoDouble

Restituisce il valore del tipo doppio della proprietà del conto corrispondente


Chi ritorna, chi ritorna, dove ritorna, perché ritorna? Ancora non lo capisco.

Saluti, Vladimir.

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