创建一个机器人 - 页 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:

这是我做的一个快速打开的按钮。

谢谢,我想我会研究一下,作为开始。

 
Роман Жилин:

谢谢,我想我将先研究一下。

我不建议将策略与EA相匹配,最好反过来。另外,你可以把其他EA的必要部分放在一起,以实现你的策略。

 
Роман Жилин:

对于一个新手来说,需要正确的方向,我觉得我在绕圈子。


指南-论坛-故事-编译器-错误(以此类推,每次都是一个圈)。

我想我学到了一些新的东西,但我感觉我的情绪严重低落,在启动EA时,我甚至无法打开基本订单。我需要有人在没有路径的深夜里照亮火把。我已经迷失了方向,我还在徘徊。


完全的程序,关于开仓交易何时开始,请澄清什么是什么。对我帮助很大。

你好,罗曼!

有两篇针对初学者的好文章,对我帮助很大。

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网站上的MQL5文档 标签)。它几乎包含了所有的信息。这本书唯一的大缺点是--它是为具有其他编程语言基础知识的人写的,但不适合初学者。例如,我仍然不明白不断出现的以"回报"开头的短语的意义。

帐户信息双倍

返回 相应账户属性的双倍类型的值


谁回来了,谁回来了,回到哪里去了,为什么回来了?我还是不明白。

问候,弗拉基米尔。

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