Creación de un robot - página 2

 
Renat Akhtyamov:
Revisa el código base, hay un montón de expertos por ahí. Examine uno de ellos a fondo y lo entenderá. Que su tarea pueda ser programada en no más de 30 minutos

dependiendo de la tarea... hay plantillas, pero son tan primitivas :(

 
VVT:

dependiendo de la tarea... hay plantillas, pero son tan primitivas :(

Y no digiero los orinales 😂
 
VVT:

dependiendo de la tarea... hay plantillas, pero son tan primitivas :(

Lo que sí sé es que cuanto más primitivo es un programa, menos riesgo de fracaso existe. Como en la mecánica, cuantas menos piezas, más fiable es el mecanismo. Por tanto, lo principal es el equilibrio entre funcionalidad y fiabilidad.

 
Роман Жилин:

Lo que sí sé es que cuanto más primitivo sea el programa, menor será el riesgo de fracaso. Como en la mecánica, cuantas menos piezas, más fiable es el mecanismo. Por tanto, lo principal es el equilibrio entre funcionalidad y fiabilidad.

Estoy de acuerdo, ya lo he dicho por aquí, un Asesor Experto debe contener lo más importante que se necesita para resolver el problema, y todo lo demás es un montón de basura que ocupa los recursos del ordenador.

 

Aquí hay una instantánea para abrir desde los botones

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

Aquí hay uno rápido que hice para abrir con botones.

Gracias, creo que lo investigaré, para empezar.

 
Роман Жилин:

Gracias, creo que lo estudiaré primero.

No recomiendo ajustar la estrategia al EA, mejor al revés. Alternativamente, usted podría juntar las partes necesarias de otros EAs para implementar su estrategia.

 
Роман Жилин:

Necesito la dirección correcta para un novato, siento que estoy dando vueltas en círculos


Guía-Foro-Historias-Compilador-Errores (y así sucesivamente en un círculo cada vez).

Creo que aprendo algo nuevo, pero tengo la sensación de estar gravemente deprimido, no puedo abrir ni siquiera el orden básico al iniciar un EA. Necesito que alguien encienda una antorcha en lo más profundo de la noche sin caminos. Me he perdido y sigo vagando.


Programa completo, en la apertura de un comercio cuando se inicia y por favor, aclarar qué es qué. Me ayuda mucho.

¡Hola, Roman!

Hay dos artículos estupendos para principiantes que me han ayudado mucho:

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

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

Sinceramente, Vladimir.

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

¡Hola, Roman!

Hay dos artículos estupendos para principiantes que me han ayudado mucho:

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

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

Sinceramente, Vladimir.

Vladimir, gracias. Me encontré con el primer artículo pero el segundo es exactamente lo que necesito ahora.


Saludos, Roman.

 
Роман Жилин:

Vladimir, gracias. Me topé con el primer artículo, pero el segundo es justo lo que necesito ahora.


Atentamente, Roman.

También estoy utilizando activamente la Referencia MQL5 (pestaña de Documentación MQL5 en la página web de MQL5). Contiene casi toda la información. La única gran desventaja de este libro es que está escrito para personas que tienen conocimientos básicos de otros lenguajes de programación, pero no para principiantes. Por ejemplo, sigo sin entender el sentido de la frase que se repite constantemente y que comienza con"Returns":

AccountInfoDouble

Devuelve el valor del tipo doble de la propiedad de la cuenta correspondiente


¿Quiénes vuelven, quiénes vuelven, a dónde vuelven, por qué vuelven? Todavía no lo entiendo.

Saludos, Vladimir.

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