需要帮助

 

问题是
,我实际上不懂语言,我需要自动打开几个vp的订单,我放出了这个简单的代码(文件附后),但结果是笨拙的,
根据计划应该打开6个vp,但只打开3个vp,但有时会打开全部6个,但后来又不再像原来那样工作了(我想这可能是由于小数点后 的数字,如块中,没有日元,所有工作正常。
请帮助解决这个问题。
如果我不难,我需要帮助来写,这样我就可以把交易转为只买或卖。

文件:危险的文件被删除了

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

问题是
,我实际上不懂语言,我需要自动打开几个vp的订单,我放出了这个简单的代码(文件附后),但结果是笨拙的,
根据计划应该打开6个vp,但只打开3个vp,但有时会打开全部6个,但后来又不再像原来那样工作了(我想这可能是由于小数点后 的数字,如块中,没有日元,所有工作正常。
请帮助解决这个问题。
如果我不难,我需要帮助来写,这样我就可以把交易转为只买或卖。

文件:危险文件已被删除

该文件应使用附上文件 按钮附上。

 
ok
附加的文件:
Test_3.mq4  7 kb
 
Sergey Korsunov:

问题是
,我实际上不懂语言,我需要自动打开几个vp的订单,我放出了这个简单的代码(文件附后),但结果是笨拙的,
根据计划应该打开6个vp,但只打开3个vp,但有时会打开全部6个,但后来又不再像原来那样工作了(我想这可能是由于小数点后 的数字,如块中,没有日元,所有工作正常。
请帮助解决这个问题。
还有,如果不难提示如何规定,那就有可能切换只买或卖的交易开盘。

有许多原因使你无法开出订单。假设在第一个交易日,有3个订单被打开

在下一个嘀嗒声中,在程序的最开始,如果(OrdersTotal() >= OrderCount) 返回;这将被返回,因为订单的数量大于OrderCount,而OrderCount= 1。

程序的其余部分将被忽略。

从这几句话来看。

//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"

该程序是由MetaQuotes软件公司开发的。 向他们征求意见!

Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 
a007 #:

有许多原因导致订单无法打开。假设在第一个tick上,有3个订单被打开

在下一个嘀嗒声中,在程序的最开始,如果(OrdersTotal() >= OrderCount) 返回;这将被返回,因为订单的数量大于OrderCount,而OrderCount= 1。

程序的其余部分将被忽略。

从这几句话来看。

该程序是由MetaQuotes软件公司开发的,请咨询他们!

你是说额外的订单被打开了吗?

 
Fast235 #:

你是说额外的订单被打开了吗?

不,恰恰相反,你需要6种不同的货币对,而只有3种是开放的。

顺便说一下,在没有日元金银的地方,所有6个货币对都打开,包括主货币和交叉货币,在有日元金银的地方,只有3个打开

 
Sergey Korsunov #:

不,恰恰相反,你需要6种不同的货币对,而只有3种是开放的。

最简单的方法是在打开每个订单后放上Sleep(),终端没有时间更新数量(显然是出于性能原因)。

 
Fast235 #:

最简单的方法是在每个订单打开后输入Sleep(),终端没有时间更新数量。

我实际上不懂语言(
我纯粹是根据网上的例子写的代码
帮助我在代码中加入Sleep()

 
Sergey Korsunov #:

我几乎没有任何语言知识(
纯粹根据网上的例子编写代码
帮助在我的代码中插入Sleep()

在OrderSend之后,把Sleep(50)。

如果它没有帮助,50个增加到100-200个

 
Fast235 #:

在OrderSend之后,把Sleep(50)。

如果没有效果,50个增加到100-200个

没有帮助(()。

 
Sergey Korsunov #:

没有帮助(()。

试试这种方式--更短、更精确。如果你自己搞清楚了,你就会成为一个编程的冠冕堂皇者。把你的光标放在这个词上,然后按F1键

//+------------------------------------------------------------------+
//|                                                       Test 3.mq4 |
//+------------------------------------------------------------------+
#property strict

extern double Lot   = 0.01;
extern int    Slip  = 3;
extern int    Magic = 777;

string name[10]={"AUDJPY","CHFJPY","CADJPY","AUDCAD","AUDCHF","CADCHF"};
int    cnt[6];

void OnTick()
{
   ArrayInitialize(cnt, 0); // Обнуление счетчиков

   // Подсчет ордеров по каждому торговому инструменту
   for(int n=OrdersTotal()-1; n>=0; n--)
   {
     if(!OrderSelect(n,SELECT_BY_POS))continue;
     for(int k=0; k<6; k++) if(OrderSymbol()==name[k]) cnt[k]++;
   }

   // Открытие ордеров по каждому торговому инструменту
   for(int k=0; k<6; k++) if(!cnt[k]) int ticket = OrderSend(name[k],OP_BUY, Lot, MarketInfo(name[k],MODE_ASK), Slip, 0, 0, "", Magic);
}
原因: