新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1466

 
WindUP:
谢谢你,但我们能否至少有一个客观的例子?可以这么说,从上面看。我是一个完全的新手,我已经在这个问题上呆了两天了 :-)

这里可能有类似的东西

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput int    Inpcopiedrates = 2;    // какой бар
sinput double Inplow         = 100;  // отступить от low
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
 
SanAlex:

我也在努力学习--我想我已经有所收获了。

你好。对不起,我在截图中看到你成功了,但我没有看到这段代码中复制前一个蜡烛[1]的数据的功能在哪里?




你能告诉我MQL5编程课程的傻瓜,从简单到复杂,从哪里开始,用什么开始比较好,以获得更多的结果,减少时间的浪费?我将不胜感激 :-)

 
WindUP:

你好。对不起,我在截图中看到你成功了,但在这里我没有看到在这段代码中复制前一个蜡烛的数据的功能[1]?




我怎么能告诉你MQL5傻瓜编程课程,从简单到复杂,从哪里开始,用什么开始比较好,以获得更多的结果,减少时间的浪费?我将不胜感激 :-)

想象一下,一个朋友找到你,要求 "教你如何在互联网上工作"。是否很难想象要教什么?教授编程也同样困难。有一个任务--有一个解决方案。但就像这样......你可以学习任何语言,所有语言的基础知识都是一样的。编程与其说是写代码,不如说是设定一个问题,为其解决方案写一个算法,然后才写代码。而最后阶段,调试和检查结果。

在SanAlrx的代码中,我不明白,如果我们有一个特定的任务,只获得第一个蜡烛图的OHLC,为什么我们要做这样一个复制的数据库存。

int copied=CopyRates(Symbol(),0,0,10,rates);

以及为什么要复制当前的、刚刚打开的蜡烛的值。但是......这是他的决定和他的蟑螂。

 
WindUP:

你好。对不起,我在截图中看到你成功了,但在这里我没有看到在这段代码中复制前一个蜡烛的数据的功能[1]?




能否请您告诉我MQL5傻瓜式编程课程,从简单到复杂,从哪里开始,如何开始最好,以获得更多的结果,减少时间的浪费?我将不胜感激 :-)

我自己也是个学生--例如,我看了一下文档https://www.mql5.com/ru/docs/series/copyrates, 有一个脚本的例子,我把它保存在我的电脑上,然后开始阅读它,凭直觉找出细节。

而这个功能--凭直觉--是我发现的。

//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,10,rates);
   double sl=rates[Inpcopiedrates].low-Inplow/100;

这是为了购买 "SL"。

卖掉它应该是这样的

   double sl=rates[Inpcopiedrates].high+Inphigh/100;

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

我只是在这里写了一个数字--最多可以买到10条。但你不需要它--你需要1(个)。

   int copied=CopyRates(Symbol(),0,0,10,rates);
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyRates
  • www.mql5.com
CopyRates - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
WindUP:

你好。对不起,我在截图中看到你成功了,但在这里我没有看到在这段代码中复制前一个蜡烛的数据的功能[1]?




我怎么能告诉你MQL5傻瓜编程课程,从简单到复杂,从哪里开始,用什么开始比较好,以获得更多的结果,减少时间的浪费?我将不胜感激 :-)

这里有一个很好的例子--刚刚进入该页面,这里有一个更好的脚本来告诉你它是如何工作的。https://www.mql5.com/ru/docs/constants/objectconstants/enum_anchorpoint

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

我自己也在学习--比如说,我到文档https://www.mql5.com/ru/docs/series/copyrates, 有一个例子脚本,我把它保存在电脑上,开始阅读,通过摸索细节来探索。

而这个功能--凭直觉--是我发现的。

这是为了购买 "SL"。

卖掉它应该是这样的

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

我只是在这里写了一个数字--最多可以买到10条。但你不需要它--你需要1(个)。

这为 "买入 "和 "卖出 "打开并设置了SL。

//+------------------------------------------------------------------+
//|                                                    maxLimits.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
#include <Trade\Trade.mqh>
//---
CTrade m_trade; // trading object
//---
sinput uint   maxLimits      = 1;    // Кол-во Позиции Открыть в одну сторону
sinput double InpLots        = 0.01; // Lots
//---
sinput double Inplowhigh     = 100;  // отступить low high
//---
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   OnStartBuy();
   OnStartSell();
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartBuy()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_ASK);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].low-Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening BUY position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStartSell()
  {
//---
   const string symbol=NULL;
   double price=0.0;
   const double tp=0.0;
   const string comment="";
//--- check symbol
   string symbol_name=(symbol==NULL) ? Symbol() : symbol;
//--- check price
   if(price==0.0)
      price=SymbolInfoDouble(symbol_name,SYMBOL_BID);
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,2,rates);
   if(copied<=0)
     {
      Print("Не удалось получить исторические данные. Error = ",GetLastError());
      return;
     }
   double sl=rates[1].high+Inplowhigh/100;
//---
   for(uint x=0; x<maxLimits; x++)
     {
      //--- open position
      //if(m_trade.Buy(InpLots,symbol_name,price,sl,tp,comment))
      if(m_trade.PositionOpen(Symbol(),ORDER_TYPE_SELL,InpLots,price,sl,tp))
         printf("Position by %s to be opened",Symbol());
      else
        {
         printf("Error opening SELL position by %s : '%s'",Symbol(),m_trade.ResultComment());
         printf("Open parameters : price=%f,SL=%f,TP=%f",price,sl,tp);
        }
     }
  }
//+------------------------------------------------------------------+

图片来源

 

你好。

你能不能给我一个提示,我现在脑子一片空白。

我通过iCustom开出指标,面临一个问题--指标有一个文本菜单,有一个选择,打开后有几个项目开出,嗯,我想这是很清楚的)

我怎样才能在菜单中添加它?

extern int HIT = 0; 不起作用,停止显示,没有留下任何参数显示。

也许通过ENUM,有什么可选择的,或者也许是别的什么?

提前感谢。

附加的文件:
 
Сергей:

你好。

你能不能给我一个提示,我现在脑子一片空白。

我通过iCustom开出指标,面临一个问题--指标有一个文本菜单,有一个选择,打开后有几个项目开出,嗯,我想这是很清楚的)

我怎样才能在菜单中添加它?

extern int HIT = 0; 不起作用,停止显示,没有留下任何参数显示。

也许是通过ENUM ,选择哪一个,或者是别的什么?

提前感谢。

放入一个空字符串""或一个空格""

 

所以我想以某种方式开出处方,这样我就可以改变设置。

我每一对都有不同的项目,我如何选择?

而没有那个菜单是不相关的,截图只是一个类似的例子。

 
Сергей:

所以我想以某种方式开出处方,这样我就可以改变设置。

我每一对都有不同的项目,我如何选择?

而没有那个菜单是不相关的,截图只是一个类似的例子。

抱歉没有注意到。该指标有一个枚举。而在专家顾问中,你必须在输入参数中指定这个枚举的名称作为变量类型。

虽然,我还没有试过......也许我们将不得不在EA中重复这个枚举,或者直接设置 ENUM_BASE_CORNER 变量类型

原因: