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

 
Ivan Butko:

如果你知道要添加什么条件或如何实现(如果很容易),请分享。

我可以,但检查它的工作原理并不有趣,所以这里有一个大纲

void OnTick()
{  static int ticket = -1;
   while(!IsStopped() &&ticket<0)
   {  if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
      {  
         RefreshRates();
         ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);
         if(ticket > 0) break; 
      }
   Sleep(123); 
   }
}
 
Igor Makanu:

我可以,但检查它的工作原理并不有趣,所以我只是勾画了一下。

伊戈尔,谢谢你。也不需要检查,我当然会自己做。

有什么办法可以不等待打勾就能做到吗?

因此,当按下 "推 "的时候,打开的请求立即进行。

它就像一个标准的 "买/卖 "按钮,在终端快速打开交易(在图表的左上方)。你按下它,卖家就会立即打开。你所需要的是开出一篮子订单,而不是单笔交易,不需要等待嘀嗒声。

有两种实现方式(在我看来)。
1)要么在图表上有一个打开篮子的按钮(类似)。
2)或专家顾问。对我来说,顾问似乎更方便,因为它可以比我更快地重复打开请求(如果有问题)。



UPD

你的代码起作用了,在一个新的勾上打开,很酷,谢谢)


UPD

我还记得:复制器有参数 "ms",你可以在那里设置检查时间。而如果主站有一个开放的交易,它可以从1毫秒的从站发送一个开放交易的请求。即,即时开放是可行的

 
Igor Makanu:

我可以,但检查它的工作原理并不有趣,所以这里有一个草图

伊戈尔,请用眼睛检查一下,这种打开方式是否是即时的,不需要等待新的勾选?

int OnInit()

{

//---

static int ticket = -1;

while(!IsStopped() &&ticket<0)

{ if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy() )

{

RefreshRates()。

ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);

if(ticket > 0) break;

}

睡眠(1)。

}

//---

return(INIT_SUCCEEDED)。

}

------------------

而它似乎是按计划进行的......。
 
Ivan Butko:



否则,它似乎可以按计划工作......

不是最好的选择....那么至少要这样写

#property strict
int ticket = -1;
int OnInit()
{  if(ticket < 0) SendMyOrder();
   return(INIT_SUCCEEDED); 
}
//+------------------------------------------------------------------+
void OnTick()
{
   if(ticket < 0) SendMyOrder();
}
//+------------------------------------------------------------------+
void SendMyOrder()
{  while(!IsStopped() && ticket < 0)
   {  if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
      {  RefreshRates();
         ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);
         if(ticket > 0) break; 
      }
      Sleep(123); 
   } 
}
//+------------------------------------------------------------------+

但是,如果你在图表上抛出了第一个选项,并在你认为有必要 "待机 "时按下了自动交易按钮,那么这个选项应该能清楚地发挥作用。

如果你想做交易,那么你应该这样写。

void OnTick()
{
   if(ticket < 0) SendMyOrder();
   if(ticket > 0) ExpertRemove();
}
 
Igor Makanu:

不是最好的选择....那么至少要这样写

但是,如果你在图表上抛出了第一个选项,并在你认为有必要 "待机 "时按下了自动交易按钮,那么这个选项应该能清楚地发挥作用。

如果你想做交易,那么你应该这样写。

多谢
 

很好!对变种的测试仍在继续。弗拉基米尔和伊戈尔的变体原来是相当快的。在实践中,事实证明,点击快速买入按钮时的交易打开速度比使用专家顾问时快。另一个奇怪的事情是,如果我们在专家顾问中规定哪些交易要逐个打开,它们就会逐个打开,而且速度很慢......而如果我们在每个图表中放入7个EA(更像是无负荷),那么相反,所有交易都会立即打开,不按顺序,订单之间没有延迟(但在开始时仍有一些半秒或一秒的空间)。

我想试试图表上的按钮,找到了手册,但它只描述了坐标什么的。请告知,我应该在 "按钮 "脚本的什么地方写代码来打开交易?要在图表上点击它,交易就打开了。如标准的MT快速购买/卖出按钮。

或者如何升级贸易面板以打开一篮子的订单?

 
请帮助解决这个问题
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2019.10.14
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Ivan Butko:

我想试试图上的按钮,找到了手册。

我没有寻找手册,而是画了一个按钮 )))

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
input string   sym1 = "EURUSD";
input string   sym2 = "GBPUSD";
input string   sym3 = "USDCAD";
input string   sym4 = "USDJPY";
input string   sym5 = "AUDUSD";
#include <Controls\Button.mqh>
CButton ButtonSend;

string sym[5];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   sym[0] = sym1;
   sym[1] = sym2;
   sym[2] = sym3;
   sym[3] = sym4;
   sym[4] = sym5;
   ButtonSend.Create(0, "ButtonSend" + _Symbol, 0, 10, 50, 100, 90);
   ButtonSend.Color(clrRed);
   ButtonSend.Text("Kill Forex!");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static int ticket[5] = {-1, -1, -1, -1, -1 };
   if(ticket[0] > 0 && ticket[1] > 0 && ticket[2] > 0 && ticket[3] > 0 && ticket[4] > 0) return;
   if(ButtonSend.Pressed())
     {
      ButtonSend.Pressed(false);
      Print("Start OrderSend()");
      while(!IsStopped())
        {
         if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
           {
            RefreshRates();
            for(int i = 0; i < 5; i++)
              {
               if(sym[i] == "") ticket[i] = INT_MAX;
               if(ticket[i] > 0) continue;
               ticket[i] = OrderSend(sym[i], OP_SELL, 0.01, SymbolInfoDouble(sym[i],SYMBOL_BID), 3, 0, 0, "", 0, 0, clrRed);
              }
           }
         if(ticket[0] > 0 && ticket[1] > 0 && ticket[2] > 0 && ticket[3] > 0 && ticket[4] > 0)  break;
         Sleep(123);
        }
     }
  }
//+------------------------------------------------------------------+

如果设置的符号会是"",那么就不要在这个符号上开0.01手,手数设置还没做,对于作为话题的如何学习,不看谁会做,必要时尽量自己附加;)

 
Igor Makanu:

我没有找手册,而是画了一个按钮))))。

如果符号设置为"",那么就不要为这个符号开0.01手,手数设置还没有做,对于作为话题的人来说如何学习,不是看谁会做,必要时尽量自己附和;)

非常感谢你,伊戈尔!快速而有针对性

将尝试

 
Igor Makanu:

奇怪的是,如果在一个EA中,它在每个指定的货币对上一个接一个地打开交易...有一个时间滞后。当你把它放在5个不同货币对的图表上时(符号(0)),当你按下自动交易时,所有5笔交易都会立即同时开启。

你能建议一下可能是什么原因,以及如何解决这个问题吗?把所有的东西都放在一个EA和一个图表上(这样,图表上的按钮 打开所有的交易,就像在原始版本中用几个EA激活 "自动交易 "时一样快)

原因: