请帮助我 [已解决] - 页 2

 
显示代码。
 

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }
我删除了所有其他不使用的函数,我所有的代码都是这样的。
Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 

你对票的双重声明。

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

ticket的声明隐藏了......胡说八道? 看我是人类的编译器。

删除 第二个int.

 
mrluck1:

我把

bool order和

int ticket

在全局变量上,其余的代码在OnTick上,但现在仍然没有任何条目。

未编译,未测试

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

马可:我删除了重复的int,但现在没有交易,我需要1笔交易,如果价格>一目云,这段代码首先是伟大的,但它继续创建新的交易,如果

价格高于云层,我只需要帮助编写代码,使脚本在完成1笔交易后停止。

Honest Knave: 我试过你的代码,我只是定义了缺少的magic_no,它工作得很好,它等待新的交易,价格再次触及云层,它对下一个项目真的很有用,但

我只是需要它在1个交易后停止,我应该怎么做?

谢谢你们的帮助

 
bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

这就是问题所在。

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket>-1)
        {
         order=1;
        }
      }
    }
  }


所以试试这个,我在前面的帖子中已经指出了这个问题。

Marco vd Heijden:

还请注意,OrderSend要么返回票号,要么在失败时返回-1减去1。

请看。
 
mrluck1:

Honest Knave: 我试过你的代码,我只是定义了缺少的magic_no,它工作得很好,如果价格再次触及云层,它就会等待新的交易,这对下一个项目确实很有用,但

我只需要它在一次交易后停止,我应该怎么做?

谢谢大家的帮助

它不应该交易超过1次...?这就是它的作用。

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

诚实的Knave。

你的EA很好,但是如果价格再次下降到一目连云层,然后再上升,它就会创建新的交易。它不会在同一根蜡烛上重复下单,就像我遇到的问题一样,我从你给我的这个样本中学到了很多,可以创建新的

但我需要一种方法来编码,在第一次交易后,EA或脚本将立即关闭,所以我只需要做一次交易。

马可:我试过你的新更新,但它没有做任何交易,我把你上次发布的方法,只是删除了第二个int,放在票据里。但在策略测试器上,第一笔交易从未完成,现在该怎么办?

 
mrluck1:

诚实的Knave。

你的EA很好,但是如果价格再次下降到一目连云层,然后再上升,它就会创建新的交易。它不会在同一根蜡烛上重复下单,就像我遇到的问题一样,我从你给我的这个样本中学到了很多,可以创建新的

但我需要一种方法来编码,在第一笔交易后,EA或脚本将立即关闭,所以我只需要做一笔交易。

我不明白你的意思。

那段代码不能一次开出超过1个订单。

但是,如果订单关闭,而触发器再次发生,它将打开另一个。

你的意思是你希望永远只开一个交易吗?

 
honest_knave:

我不明白你的意思。

这段代码不能一次打开超过1个订单。

但是,如果订单关闭,而触发器再次发生,它将打开另一个。

你的意思是你想永远只开一个交易吗?

是的,先生,永远只做一笔交易,但你的例子很好,作为创建新eas的基础,它将非常有用。