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

 
ANDREY:

谢谢你提供的宝贵信息。

请告知,如何在一个变量中存储表达式恰好为真?更准确地说--在函数中计算出的与什么时间段的蜡烛有关的最小值是什么?如何在一个变量中保存这个时间框架的标识符?
谢谢你

只需声明bool变量

bool variant_H4 = Bid-iLow( NULL ,PERIOD_H4,1) >= 0.0030,
     variant_H1 = Bid-iLow(NULL ,PERIOD_H1,1) >= 0.0030,
     variant_M30 = Bid-iLow(NULL ,PERIOD_M30,1) >= 0.0030;
if (variant_H4 || variant_H1 || variant_M30)
 
Alexey Viktorov:

只需声明bool变量

谢谢你提供的有用信息。

请告诉我,如果在分钟图上进行测试,如何在黄色变量中保存一个5位数的数值?

double LoU;
void OnTick()
{
if (Bid - iLow( NULL ,PERIOD_H4,1)>=0.0030||Bid - iLow( NULL ,PERIOD_H1,1)>=0.0030||Bid - iLow( NULL ,PERIOD_M30,1)>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
LoU = (ЛОУ из выражения, которое оказалось истинным);
}
}

谢谢你。

 
下午好!你能告诉我如何在mql4中把文本绑定到一行上,这样当后者被移动时,铭文也会被移位,就像截图中那样。我知道有两种方法来绑定一个对象:以像素为单位绑定到屏幕的一角,以及以时间/价格坐标为单位。在第一种情况下,我得到的是一个静态文本,而在第二种情况下,它不太符合我的要求。有了价格坐标(垂直绑定)就很清楚了--我把线上的价格加上一个_Point对,所以文字会比线上的价格高一点。但时间呢?我不想绑定到最后一个条形图,因为图表的不同移动会将文本拉到右边--左边。在这里,我想对屏幕的右边缘做一个刚性的水平绑定,但我不明白如何做。
 
Oleksandr Nozemtsev:
下午好!你能告诉我如何在mql4中把文本绑定到一行上,这样当后者被移动时,铭文也会被移位,就像截图中那样。我知道有两种方式来绑定一个对象 :以像素为单位绑定到屏幕的一角,以及以时间/价格坐标为单位。在第一种情况下,我得到的是一个静态文本,而在第二种情况下,它不太符合我的要求。有了价格坐标(垂直绑定)就很清楚了--我把线上的价格加上一个_Point对,所以文字会比线上的价格高一点。但时间呢?我不想绑定到最后一个条形图,因为图表的不同移动会将文本拉到右边--左边。在这里,我想对屏幕的右边缘做一个刚性的水平绑定,但我不明白如何做。
你是自己画线还是指标?
 
MakarFX:
你是自己画线还是指标?

这条线是由指标 在加载时创建的。需要用文字直接在行上显示这个级别的信息,而不是用Alert显示(Alert有效)。

 
Oleksandr Nozemtsev:

这条线是由指标 在加载时创建的。需要用文字直接在行上显示这个级别的信息,而不是用Alert显示(Alert有效)。

发布创行代码
 
MakarFX:
发布创行代码

int OnInit()

{

//创建行 "name_line",如果它还不存在。

如果(ObjectFind(0, name_line) == -1)

{

//如果没有指定价格,则将其设置为当前的卖价。

if(!price_line)

price_line =SymbolInfoDouble(Symbol(), SYMBOL_ASK);

//重设错误值

ResetLastError()。

//创建一个行

if(!ObjectCreate(0, name_line, OBJ_HLINE, 0, 0, price_line))

Print("Line 线路。错误",GetLastError())。

//

ObjectSet(name_line, OBJPROP_COLOR, color_line); //线条颜色

ObjectSet(name_line, OBJPROP_STYLE, style_line); //线条样式

ObjectSet(name_line, OBJPROP_WIDTH, width_line); //线条厚度

ObjectSet(name_line, OBJPROP_BACK, back_line); //Front/back

ObjectSet(name_line, OBJPROP_SELECTABLE, selection_line);//该对象可以用鼠标点击。

ObjectSet(name_line, OBJPROP_SELECTED, selection_line); //该对象被选中。创建时没有选择O

}

return(INIT_SUCCEEDED)。

}

 
Oleksandr Nozemtsev:

接住

//+------------------------------------------------------------------+
//|                                                    Line_Text.mq4 |
//|                                           Copyright 2020 MakarFX |
//|                            https://www.mql5.com/ru/users/makarfx |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020 MakarFX"
#property link      "https://www.mql5.com/ru/users/makarfx"
#property version   "1.00"
#property strict
#property indicator_chart_window

double buy,sell;
datetime DoTime;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   ObjectsDeleteAll(0,"My_");
   //--- indicator buffers mapping
   if(ObjectFind(0,"My_BuyLine")!=0)
     {
      HLineCreate(0,"My_BuyLine",0,Ask+50*Point,clrTeal,2,1,false,true,false);
     }
   if(ObjectFind(0,"My_SellLine")!=0)
     {
      HLineCreate(0,"My_SellLine",0,Bid-50*Point,clrCrimson,2,1,false,true,false);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,"My_");
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   DoTime = TimeCurrent()+(Period()*60*7);
   if(ObjectFind(0,"My_BuyLine")==0)
     {
      buy = NormalizeDouble(ObjectGet("My_BuyLine",OBJPROP_PRICE1),Digits);
      Create_Text(0,"My_BuyText",0,DoTime,buy+5*Point,"BuyText","Arial",10,clrTeal,0,0,false,false,false);     
     }
   if(ObjectFind(0,"My_SellLine")==0)
     {
      sell = NormalizeDouble(ObjectGet("My_SellLine",OBJPROP_PRICE1),Digits);
      Create_Text(0,"My_SellText",0,DoTime,sell-5*Point,"SellText","Arial",10,clrCrimson,0,0,false,false,false);     
     }
   if(buy!=ObjectGet("My_BuyLine",OBJPROP_PRICE1)||sell!=ObjectGet("My_SellLine",OBJPROP_PRICE1))
     {
      ObjectMove(0,"My_BuyText",0,DoTime,buy+5*Point);
      ObjectMove(0,"My_SellText",0,DoTime,sell-5*Point);
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает горизонтальную линию                                                                                       | 
//+--------------------------------------------------------------------------------------------------------------------+
bool HLineCreate(const long            chart_ID=0,        // ID графика 
                 const string          name="HLine",      // имя линии 
                 const int             sub_window=0,      // номер подокна 
                 double                price=0,           // цена линии 
                 const color           clr=clrRed,        // цвет линии 
                 const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии 
                 const int             width=1,           // толщина линии 
                 const bool            back=false,        // на заднем плане 
                 const bool            selection=true,    // выделить для перемещений 
                 const bool            hidden=true,       // скрыт в списке объектов 
                 const long            z_order=0)         // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError(); 
   //--- создадим горизонтальную линию 
   if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) 
      { 
      Print(__FUNCTION__, ": не удалось создать горизонтальную линию! Код ошибки = ",GetLastError()); return(false); 
      } 
   //--- установим свойства линии 
   ObjectSetInteger (chart_ID, name, OBJPROP_COLOR, clr);
   ObjectSetInteger (chart_ID, name, OBJPROP_STYLE, style);
   ObjectSetInteger (chart_ID, name, OBJPROP_WIDTH, width);
   ObjectSetInteger (chart_ID, name, OBJPROP_BACK, back);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTABLE, selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_SELECTED, selection);
   ObjectSetInteger (chart_ID, name, OBJPROP_HIDDEN, hidden);
   ObjectSetInteger (chart_ID, name, OBJPROP_ZORDER, z_order);
   //--- успешное выполнение 
   return(true); 
   } 
//+--------------------------------------------------------------------------------------------------------------------+
//| Создает объект "Текст"                                                                                             | 
//+--------------------------------------------------------------------------------------------------------------------+
bool Create_Text(const long              chart_ID=0,               // ID графика 
                 const string            name="Text",              // имя объекта 
                 const int               sub_window=0,             // номер подокна 
                 datetime                time=0,                   // время точки привязки 
                 double                  price=0,                  // цена точки привязки 
                 const string            text="Text",              // сам текст 
                 const string            font="Arial",             // шрифт 
                 const int               font_size=10,             // размер шрифта 
                 const color             clr=clrRed,               // цвет 
                 const double            angle=0.0,                // наклон текста 
                 const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // способ привязки 
                 const bool              back=false,               // на заднем плане 
                 const bool              selection=false,          // выделить для перемещений 
                 const bool              hidden=true,              // скрыт в списке объектов 
                 const long              z_order=0)                // приоритет на нажатие мышью 
   { 
   //--- сбросим значение ошибки 
   ResetLastError(); 
   //--- создадим объект "Текст" 
   if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price)) 
      { 
      Print(__FUNCTION__,": не удалось создать объект \"Текст\"! Код ошибки = ",GetLastError()); return(false); 
      } 
   //--- установим свойства объектa "Текст" 
   ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
   ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
   ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
   ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
   ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
   ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
   ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); 
   ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
   ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
   ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
   //--- успешное выполнение 
   return(true); 
   } 
//+------------------------------------------------------------------+
 
MakarFX:

接住

哇,这可真够多的!我以为这只是几行代码而已。谢谢!(笑)。

 
Alexey Viktorov:

只需声明bool变量

你能不能告诉我,如果在1分钟的图表上进行测试,如何在一个黄色的变量中保存5位数的蓝色数值?

double LoU;
void OnTick()
{
if (Bid - iLow( NULL ,PERIOD_H4,1)>=0.0030||Bid - iLow( NULL ,PERIOD_H1,1)>=0.0030||Bid - iLow( NULL ,PERIOD_M30,1)>=0.0030)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid, 3,0,0,"300",0);
LoU = (ЛОУ из выражения, которое оказалось истинным);
}
}
谢谢你
原因: