Создание робота - страница 2

 
Renat Akhtyamov:
В код-базу загляните, там много экспертов. Изучите досконально код одного из них и поймёте. Что Ваша задача программируется не более 30 минут

в зависимости от задачи... есть шаблоны, но они настолько примитивны :(

 
VVT:

в зависимости от задачи... есть шаблоны, но они настолько примитивны :(

А я не перевариваю портянки 😂
 
VVT:

в зависимости от задачи... есть шаблоны, но они настолько примитивны :(

Знаю одно, чем примитивнее программа, тем меньше риск её сбоев. Собственно как и в механнике, чем меньше деталей, тем надёжней механизм. Так что, главное это баланс между функционалом и надёжностью.

 
Роман Жилин:

Знаю одно, чем примитивнее программа, тем меньше риск её сбоев. Собственно как и в механнике, чем меньше деталей, тем надёжней механизм. Так что, главное это баланс между функционалом и надёжностью.

Согласен, я уже где то здесь высказывал подобное мнение, в советнике должно быть самое необходимое для реализации задачи, а всё остальное шелуха и только отнимает ресурсы компа.

 

вот слепил по быстрому открывать от кнопок 

//+------------------------------------------------------------------+
//|                                                         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);
  }
//+------------------------------------------------------------------+
Файлы:
0001.mq5  5 kb
 
SanAlex:

вот слепил по быстрому открывать от кнопок 

Спасибо, думаю его и изучу, для начала

 
Роман Жилин:

Спасибо, думаю его и изучу, для начала

Не рекомендую подгонять стратегию под советник, лучше наоборот. Как вариант могли бы собрать в одно целое необходимые части других советников для реализации Вашей стратегии.

 
Роман Жилин:

 Нужно правильное направление для новичка, такое чувство что хожу по кругу


Справочник-Форум-Статьи-Компилятор-Ошибки(и так по кругу каждый раз)

Вроде узнаю, что-то новое, но такое чувство, что очень сильно просел, не могу открыть даже простейшей сделки при старте советника. Нужно чтобы хоть кто-то посветил фонарём в глубокой чаще ночью без тропинок. Как сошёл с пути, так и блуждаю.


Полностью программа, на открытие сделки при её запуске и прошу пояснить, что к чему. Выручите очень сильно.

Здравствуйте, Роман!

Есть две замечательные статьи для начинающих, которые мне очень помогли:

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

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

С уважением, Владимир.

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

Здравствуйте, Роман!

Есть две замечательные статьи для начинающих, которые мне очень помогли:

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

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

С уважением, Владимир.

Владимир, благодарю. На первую статью натыкался, а вот вторая, это как раз то, что мне сейчас нужно.


С уважением, Роман.

 
Роман Жилин:

Владимир, благодарю. На первую статью натыкался, а вот вторая, это как раз то, что мне сейчас нужно.


С уважением, Роман.

Кроме того, сейчас активно пользуюсь информацией из справочника MQL5 (вкладка на сайте MQL5 - Документация). В нём можно найти практически всё. Один большой минус у этого справочника - он написан для людей, уже имеющих базовую подготовку на других языках программирования, но явно не для начинающих. Например, до сих пор не пойму смысл постоянно встречающейся фразы, начинающейся со слова "Возвращает":

AccountInfoDouble

Возвращает значение типа double соответствующего свойства счета


Кто возвращает, кому возвращает, куда возвращет, зачем возвращает? До сих пор толком так и не могу разобраться.

С уважением, Владимир.

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