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

 
mila.com:

谢谢你,这样做对吗?

label =ObjectGetInteger(0,nm,OBJPROP_COLOR,0);

if(label==Lime) BUY_ = true;

不,这就是你获得颜色数据的方法,是一种int类型

试着看看评论里印的是什么。

Comment( ColorToString((color)ObjectGetInteger(0,"NaneOBJ",OBJPROP_COLOR,0), true) );

阅读 关于转换的内容

 
Vitaly Muzichenko:

阅读 关于转换的内容

谢谢你 条件本身是否正确?
 
mila.com:
谢谢你 条件本身是否正确?
string label = ColorToString((color)ObjectGetInteger(0,"MP140269",OBJPROP_COLOR,0), true);
if(label==Lime) BUY_ = true;

if(label==Red) BUY_ = false;
可能不会。如果数据是字符串 类型的 你需要用引号将其括起来,并写出完整的逐个字符的颜色匹配:"clrLime"。
 
Vitaly Muzichenko:
可能不会。如果数据是字符串 类型的 你需要用引号将其括起来,并写出完整的逐个字符的颜色匹配:"clrLime"。
谢谢,成功了 )
 
Vitaly Muzichenko:
可能不会。如果数据是字符串 类型的 你必须用引号将其括起来,并写出完整的逐字颜色匹配:"clrLime"。
不,你不必用引号括起来,这些是常数。也就是说,它应该是这样的:如果(label==clrLime){}。
 
Artyom Trishkin:
不,不需要加引号--这些是常数。也就是说,它应该是这样的:如果(label==clrLime){}。

谢谢你,这很有效。

能否请您告诉我如何从高位时间框架中正确获得随机指标的水平。

      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
      double sto1_0=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i);
      double sto1_1=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i+1);
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
      
      if(sto2_0>55)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      

当指标设置在高位时间框架上时,一切都很正确,当指标线 在55以上时,箭头被设置。

当切换到一个较低的图表时,就会出现混乱。

 
mila.com:

谢谢你,这很有效。

请你告诉我如何从高位时间框架中正确获得随机指标的水平。

      int bar_sto2_0=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i));
      int bar_sto2_1=iBarShift(Symbol(),TimeFrame2,iTime(Symbol(),TimeFrame2,i+1));
      double sto1_0=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i);
      double sto1_1=iStochastic(Symbol(),TimeFrame1,kperiod1,dperiod1,slowing1,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,i+1);
      double sto2_0=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_0);
      double sto2_1=iStochastic(Symbol(),TimeFrame2,kperiod2,dperiod2,slowing2,MODE_LWMA,STO_CLOSECLOSE,MODE_MAIN,bar_sto2_1);
      
      if(sto2_0>55)
       {
      BufferUP[i]=low[i]-distance*MyPoint;
       }
      

当指标设置在高位时间框架上时,一切都很正确,当指标线 在55以上时,箭头被设置。

当你切换到一个较低的图表时,就会出现混乱。

如果你说的是指标的周期,那么为了知道高价位时间框架的哪个条形对应于低价位框架的周期指数所示的条形,你需要得到条形时间 i。 然后用这个时间来确定与这个时间相对应的高帧的条形图。例如:H4的一个小节对应H1的四个小节。因此,H1的四个周期指数i的值将指向H4的同一个柱子。

从你的变量(它们的名字),我无法理解你是从哪个栏中获取数值的。所以除了理论之外,很难说什么。

 
Artyom Trishkin:

如果你说的是指标周期,为了知道较高时间框架的哪个柱子与较低时间框架的周期指数所指示的柱子相对应,你需要得到柱子i时间 然后用这个时间来确定与这个时间相对应的高帧的条形图。例如:H4的一小节对应H1的四小节。相应地,H1时间框架的四个周期指数i的值将指向H4时间框架的同一个柱子。

从你的变量(它们的名字),我无法理解你从哪个条形图中得到的值。因此,除了理论之外,很难说什么。

指示器被设置在M1上。

上升箭头的主要条件是M5上的指标线 高于55水平。

这个条件没有得到满足,即使线在M5的55水平以下,箭头仍然被放置。

 

如何将 "如果1条的高点高于3条的低点... "的条件写入机器人。

触发器不应该是 "OnTick()"

但每次0条都会变成1条

 
trader781:

如何将 "如果1条的高点高于3条的低点... "的条件写入机器人。

触发器不应该是 "OnTick()"

但每次0条都会变成1条

你可以做以下工作

//+------------------------------------------------------------------+
//|                                                       test03.mq4 |
//|                                                   Sergey Gritsay |
//|                         https://www.mql5.com/ru/users/sergey1294 |
//+------------------------------------------------------------------+
#property copyright "Sergey Gritsay"
#property link      "https://www.mql5.com/ru/users/sergey1294"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CNevBar
  {
private:
   datetime          curbar;
   datetime          lastbar;
public:
                     CNevBar();
                    ~CNevBar();
   bool              new_bar(string symbol,ENUM_TIMEFRAMES period);
  };
//+------------------------------------------------------------------+
void CNevBar::CNevBar()
  {

  }
//+------------------------------------------------------------------+
void CNevBar::~CNevBar(void)
  {

  }
//+------------------------------------------------------------------+
bool CNevBar:: new_bar(string symbol,ENUM_TIMEFRAMES period)
  {
   curbar=(datetime) SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
   if(lastbar==0)lastbar=(datetime)SeriesInfoInteger(symbol,period,SERIES_LASTBAR_DATE);
   if(lastbar!=curbar)
     {
      lastbar=curbar;
      return(true);
     }
   return(false);
  }

CNevBar newbar;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(newbar.new_bar(_Symbol,PERIOD_CURRENT))
     {
      if(High[1]>Low[3])
        {

        }
     }

  }
//+------------------------------------------------------------------+

...

原因: