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

 
Konstantin Seredkin:

我只是举个例子,还有很多其他的算法,放在这个按钮上就好了,价差扩大了,按钮被按下了,我的手机上传来一条短信,说机器人停止了,或者4个机器人在账户上交易,第5个机器人控制账户保证金,当保证金降到设定值的时候,我们就切断自动交易,所有的机器人都吸了,直到我过来看什么,哪里进入缩水状态了。但是,从图表中删除一个机器人是对兔子的大炮......按钮是一个复杂的解决方案,允许你通过预定的算法杀死所有的机器人。

我在某处看到过一个针对mql5的解决方案,但我找不到了。

这就是我所说的--这是一个激进的解决方案。正确的解决方案是修改专家顾问的代码,以便在某些情况下,它将不执行交易行为和与之相关的一切。例如,传播控制是初级的。

void OnTick()
{
    double fPoint = Point();
    if (fPoint <= 0.0)
      return;

    int nSpread = int(MathRound((Ask - Bid) / fPoint));
    if (nSpread > 50)
      return;

   ... Действия советника при нормальном спреде
}
 

嗯,自动交易按钮可以通过模拟Ctrl+E来按下/取消。但是,正如我所说,这是在WinAPI的帮助下。

#include <WinUser32.mqh>

#define  VK_CONTROL 0x11 
#define  KEY_CODE   'E'


void PressOrReleaseAutotrade()
{
   keybd_event(VK_CONTROL, 0, 0, 0);
   keybd_event(KEY_CODE, 0, 0, 0);
   keybd_event(KEY_CODE, 0, 2, 0);
   keybd_event(VK_CONTROL, 0, 2, 0);   
}
 
Ihor Herasko:

嗯,自动交易按钮可以通过模拟Ctrl+E来按下/取消。但是,正如我所说,这已经是在使用WinAPI了。

谢谢!还有,你怎么能让一个笑脸变得悲伤呢?)

 
Ihor Herasko:

嗯,自动交易按钮可以通过模拟Ctrl+E来按下/取消。但是,正如我所说,这是用WinAPI。

正是如此,我认为这是一个痛苦的简单方法,我忘记了这个库。谢谢,现在我们可以做我们想做的事了

 

做了MQL4脚本(代码如下),可以画出矩形(如下图),但问题在这里。对于虚线STYLE_DOT来说,只有宽度为1的才有效,而宽度为2或更多的则画出实线。你能告诉我,我的错误在哪里,还是有什么东西被隐瞒了?

#property strict
void OnStart()
  {
//---
   RectCreate("rect1",Time[1],Low[1],Time[10],High[10],clrYellow,STYLE_DOT,  1,  false);
   RectCreate("rect2",Time[11],Low[11],Time[20],High[20],clrRed, STYLE_DOT,  2,  false);
//---
   Sleep(20*1000);
   ObjectsDeleteAll(0);
  }
//--- Function creates rectangle
void RectCreate(const string           f_name,     // rectangle name
                datetime               f_time1,    // first point time
                double                 f_price1,   // first point price
                datetime               f_time2,    // second point time
                double                 f_price2,   // second point price
                const color            f_color,    // rectangle color
                const ENUM_LINE_STYLE  f_style,    // style of rectangle lines
                const int              f_width,    // width of rectangle lines
                const bool             f_fill)     // filling rectangle with color

  {
   if(ObjectCreate(0,f_name,OBJ_RECTANGLE,0,f_time1,f_price1,f_time2,f_price2))
     {
      ObjectSetInteger(0,f_name,OBJPROP_COLOR,f_color);
      ObjectSetInteger(0,f_name,OBJPROP_STYLE,f_style);
      ObjectSetInteger(0,f_name,OBJPROP_WIDTH,f_width);
      ObjectSetInteger(0,f_name,OBJPROP_FILL,f_fill);
      ObjectSetInteger(0,f_name,OBJPROP_BACK,false);
      ObjectSetInteger(0,f_name,OBJPROP_SELECTABLE,false);
      ObjectSetInteger(0,f_name,OBJPROP_SELECTED,false);
     }
  }

 
Maxim Khrolenko:

做了MQL4脚本(代码如下),可以画出矩形(如下图),但问题在这里。对于虚线STYLE_DOT来说,只有宽度为1的才有效,而宽度为2或更多的则画出实线。你能告诉我,我的错误在哪里,还是有什么东西被隐瞒了?

并手动绘制和改变风格和厚度试?那么从这些实验中可以得出什么结论呢?
 
Artyom Trishkin:
你是否尝试过手动绘制并改变样式和厚度?那么从这些实验中可以得出什么结论呢?

我想我已经找到了答案。这里说,"行文风格。它只在线条厚度为0或1 "时使用。这一定是宽度为2和更大的线条不能与实心线以外的线条一起工作的原因。

 
Maxim Khrolenko:

我想我已经找到了答案。这里说,"行文风格。只在线条厚度为0或1 "时使用。这一定是实心线以外的线条在厚度为2或更厚时不工作的原因。

完全正确。我也去过那里。

 

先生们,请指教,我从Kim那里拿了一个函数,返回最后开仓的条数或-1

int NumberOfBarOpenLastPos(string sym="",int tf=0,int op=-1,int mn=-1)
  {
   datetime oot;
   int      i,k=OrdersTotal();

   if(sym=="") sym=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==sym)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL || OrderType()==OP_BUYLIMIT || OrderType()==OP_SELLLIMIT)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(oot<OrderOpenTime()) oot=OrderOpenTime();
                    }
                 }
              }
           }
        }
     }
   return(iBarShift(sym, tf, oot, True));
  }

我调用这个函数并写了一个条件

if(Open[2]>Close[2] && Open[1]>Close[1] && Close[1]<Low[2])
     {

      Comment("цена входа = ",DoubleToStr(Low[2],Digits));
      if(NumberOfBarOpenLastPos("",0,-1,-1)!=0)//вызвал здесь

         ticket=OrderSend(Symbol(),OP_SELLLIMIT,0.1,Low[2],2,0,0,magic,0);
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

         TP=NormalizeDouble(OrderOpenPrice()-tp*Point,Digits);
      SL=NormalizeDouble(OrderOpenPrice()+sl*Point,Digits);
      modify=OrderModify(ticket,OrderOpenPrice(),SL,TP,0);
      }

我查看了Print,发现这个函数返回-1,起初我以为没有订单,但过了一会儿,订单重新出现了,在同一个柱子上,停止后有一笔交易被打开。

 
下午好。你知道在MT4和MT5中,是否可以用不同的TF叠加一个工具的图表,以及这些TF的指标?例如,我想在一个窗口中显示欧元/美元对 的3张图表,其中有TFs:日、4小时和小时,还可以叠加这些TFs的滑动指标。这有可能吗?我期待着任何帮助。
原因: