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

 
sibiriyak73:

错在哪里呢?

如果有很多人物,那么就会有很多 "开放"。

struct Orders
   {
   string symbol;
   bool open;
   } orders[];

int OnInit()
   {
   ArrayResize(orders,2);
   orders[0].symbol="EURUSD";
   orders[0].open=false;
   orders[1].symbol="USDJPY";
   orders[1].open=false;
   return(INIT_SUCCEEDED);
   }

void OnTick()
   {
   for(int i=0; i<2; i++)
      {
      if(!orders[i].open)
         {
         int ticket1=OrderSend(orders[i].symbol,OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
         orders[i].open=true;
         }
      }
........


 
Aleksei Stepanenko:

如果有很多人物,那么就会有很多 "开放"。

谢谢你,伙计。我怎样才能使它 一天一个交易 在当前乐器上撕掉,而不考虑其他乐器(EA在几个乐器上站立)。
 
sibiriyak73:
谢谢你,伙计。如何制作 每天一次交易 在当前的符号上撕掉,而不考虑其他的工具(EA站在几个符号上)。

- 在订单历史 中通过其神奇的数字和符号查找,如果开仓(或平仓)的时间与当前日期相符,则退出OnTick()。

- 控制TF D1上的 "新栏"。


第一种方式 - 更多的写作,但在测试器中,MT4将工作得非常快;第二种方式 - 3行代码,但在测试器中,它将 "咬 "住硬盘,测试时间将更长

 
sibiriyak73:
(EA站在几个仪器上)

啊,我想我明白了,如果你有一个EA站在多个工具上,那么你只需要添加一个检查,即订单属于该EA。

int OPEN=1;

int total=OrdersTotal();
for(int i=0; i<total; i++)
   {
   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
      {
      OPEN=0;
      break;
      }
   }

if(OPEN==1)
   {
   int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
   }
 
Aleksei Stepanenko:

啊,我想我明白了,如果你在多个工具上有一个EA,那么你只需要添加一个检查,即订单属于该EA。

这个代码开启了大量的交易。这个想法是正确的,但如何正确地实施它。

 
sibiriyak73:

这个代码开启了大量的交易。这个想法是正确的,但如何正确地实施它。

你需要这个

函数isTradeToDay()。

该函数返回今天的交易标志

Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 

从这里的一段代码你能猜到什么?

对它进行检查,每天不超过一次。

datetime last_time=0;   
MqlDateTime date1, date2; 

void OnTick()
   {
   int OPEN=1;

   int total=OrdersTotal();
   for(int i=0; i<total; i++)
      {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderCloseTime()==0 && OrderSymbol()==Symbol())
         {
         OPEN=0;
         break;
         }
      }
      
   TimeToStruct(last_time,date1);
   TimeToStruct(iTime(Symbol(),0,0),date2);
   if(date1.day==date2.day)
      {
      OPEN=0;
      }

   if(OPEN==1)
      {

      int ticket1=OrderSend(Symbol(),OP_SELLSTOP,1.5,limit1,10,SL1,TP1,NULL,0,0,clrRed);  //Здесь открываем
      if(ticket1>=0 && OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES))
         {
         last_time=OrderOpenTime();
         }
      }

 
sibiriyak73:

伙计们在顾问的帮助下,需要每天在工具上开一个交易。

你可以试试这个

datetime dt = iTime(_Symbol,PERIOD_D1,0);

   for(int i = 0; i < OrdersHistoryTotal(); i++) 
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
      {
       if((OrderSymbol() != _Symbol) && (dt < OrderCloseTime())
        {
         Открываем ордер;
        }
      }
    }
 
MakarFX:

你可以试试这个。

都是很久以前写的......。很久以前。

这段代码检查已经进入市场的内容和历史上的内容,以防今天已经关闭。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает флаг торгов сегодня.                                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isTradeToDay(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  k=OrdersTotal();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (TimeDay  (OrderOpenTime())==Day()
              &&  TimeMonth(OrderOpenTime())==Month()
              &&  TimeYear (OrderOpenTime())==Year()) return(True);
            }
          }
        }
      }
    }
  }
  return(False);
}
 
Aleksei Stepanenko:

从这里的一段代码你能猜到什么?

对它进行检查,每天不超过一次。

问候。问题是,如果EA看到账户中的未平仓交易,它就不会再开任何交易。这就像 "你的账户里有未完成的交易,为什么你要我做这个"。我必须向他解释,在这个工具上 不应该有超过一个交易(例如,欧元-美元),因为这个EA是在少数符号上开放的。我认为显示所有的代码是不对的(这是一个很大的代码,有声明的变量,等等)。