Criando um robô - página 2

 
Renat Akhtyamov:
Confira a base de códigos, há muitos especialistas por aí. Examine um deles minuciosamente e você vai entender. Que sua tarefa possa ser programada em não mais de 30 minutos

dependendo da tarefa... existem modelos, mas eles são tão primitivos :(

 
VVT:

dependendo da tarefa... existem modelos, mas eles são tão primitivos :(

E eu não digerir os porta-potties 😂
 
VVT:

Dependendo da tarefa... existem modelos, mas eles são tão primitivos :(

Uma coisa que sei é que quanto mais primitivo é um programa, menor é o risco de fracasso. Como na mecânica, quanto menos peças, mais confiável é o mecanismo. Portanto, o principal é o equilíbrio entre funcionalidade e confiabilidade.

 
Роман Жилин:

Uma coisa que eu sei é que quanto mais primitivo for o programa, menor será o risco de fracasso. Como na mecânica, quanto menos peças, mais confiável é o mecanismo. Portanto, o principal é o equilíbrio entre funcionalidade e confiabilidade.

Concordo, já o disse em algum lugar aqui, um consultor especializado deve conter as coisas mais importantes necessárias para resolver o problema, e tudo o mais é apenas um mero barulho e tira os recursos do computador.

 

Aqui está uma rápida foto para abrir a partir dos botões

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

Aqui está um rápido que fiz para abrir com botões.

Obrigado, acho que vou investigar isso, para começar.

 
Роман Жилин:

Obrigado, acho que vou estudá-lo primeiro.

Eu não recomendo adequar a estratégia à EA, melhor ao contrário. Alternativamente, você poderia reunir as partes necessárias de outros EAs para implementar sua estratégia.

 
Роман Жилин:

Preciso da direção certa para um novato, sinto que estou andando em círculos


Guia-Fórcio-Estoríficos-Compiladores-Erores (e assim por diante em círculo a cada vez).

Acho que aprendi algo novo, mas tenho a sensação de estar muito deprimido, não consigo abrir nem mesmo uma ordem básica ao iniciar uma EA. Preciso de alguém que brilhe uma tocha no mais profundo da noite, sem caminhos. Eu ainda estou vagando, pois me perdi no caminho.


Programar completamente, ao abrir um comércio quando este começar e, por favor, esclarecer o que é o quê. Ajude-me muito.

Olá Roman!

Há dois grandes artigos para iniciantes que têm me ajudado muito:

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

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

Atenciosamente, Vladimir.

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

Olá Roman!

Há dois grandes artigos para iniciantes que têm me ajudado muito:

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

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

Atenciosamente, Vladimir.

Vladimir, obrigado. Encontrei o primeiro artigo, mas o segundo é exatamente o que eu preciso agora.


Cumprimentos, Roman.

 
Роман Жилин:

Vladimir, obrigado. Eu tropecei no primeiro artigo, mas o segundo é exatamente o que eu preciso agora.


Atenciosamente seu, Roman.

Eu também uso a referência MQL5 (guia Documentação MQL5 no site da MQL5). Ela contém quase todas as informações. A única grande desvantagem deste livro - ele é escrito para pessoas que têm conhecimento básico de outras linguagens de programação, mas não para iniciantes. Por exemplo, eu ainda não entendo o sentido da frase que ocorre constantemente, começando com"Retorna":

AccountInfoDouble

Retorna o valor do tipo duplo de propriedade da conta correspondente


Quem retorna, a quem retorna, para onde retorna, por que retorna? Eu ainda não entendo.

Cumprimentos, Vladimir.

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