初学者的问题 MQL5 MT5 MetaTrader 5 - 页 411

 
Leanid Aladzyeu:

开始研究数组。

我写了一个带数组的亲笔订单函数,3个数组=0买入,1=卖出,2=总买入和卖出交易。

然后我写了一个买入条件,如果(第一个条件&&数组[0]==0),那么我们就开盘买入。

在出售时,如果(第一个条件&&数组[1]==0),那么我们就建立一个卖出头寸。

但测试人员抛出一个错误,测试停止,问题出在哪里?( error " array exit " )

这意味着你要处理的索引是在数组布局之外。例如,如果数组[ 3 ];你可以只寻址0到2的项目。检查你的代码。

另一种可能是,你没有对数组进行分区(用ArrayResize()),而是试图访问其中的一些元素。

 
代码...
void Oher(int Mag,string Symb, int &mas[2])
{
ArrayInitialize( mas,0);

int tip;
int ticket3 =-1;
  for (int pos=OrdersTotal()-1; pos>=0; pos--)
     {
     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Mag && OrderSymbol()==Symb && OrderTicket()!=ticket3)
          {
          ticket3=OrderTicket();
          tip=OrderType();
          
          switch(tip)
              {
              case 0:mas[0]++; mas [2]++;break;// 0 покупка
              case 1:mas[1]++; mas [2]++;break;// 1 продажа
              }
          }
          continue;
     }

}
Чудо код вставил ) 2 раз получилось за все время что я на сайте)
 
Leanid Aladzyeu:
代码...
试着自己弄清楚,测试者应该指出错误发生在哪一行和哪一行的位置。
 
Tapochun:
试着自己弄清楚,测试者应该指出错误发生在哪一行和哪一行的位置。

o_oops不知道终端机也会戳到错误的地方,我第一次碰到了一个关键的错误

   case 1:mas[1]++; mas [2]++;break;// 1 продажа

它向它吐口水。

 
修正了它。它总共有2个数组,而我需要3个。在数组的初始化 和函数中,数字为+1。)
 

请告知如何检查该指标的工作情况。

我的想法是:当EA形成一个新的条形图 时,它会调用指标,但指标此刻没有数据,我得到的是上一个条形图的数据(它还没有时间计算)。

如何避免这个问题。此外,在策略测试器中一切正常。我在演示中要么很好,要么根本就没有!"。

就是这样,没有关系。解决了。

 

你好,我有一个初学者的问题......

我不能让系统将最后一个条形图的收盘值与某一时期的高点和低点进行比较,比如说。

最后20小节。我做错了什么?

extern int     MAGIC             = 90324752;
extern int     START_HOUR        = 7;
extern int     FINISH_HOUR       = 18;
extern int     TRADE_LIMIT       = 3;
extern int     SMMA_PERIOD       = 100;
extern int     BB_PERIOD         = 50;
extern double  BB_DEV            = 1;
extern double  LOT               = 1;
extern double  StopLoss          = 400;
extern double  TakeProfit        = 2000;

void OnTick()
{
static int    TICKET;

double SMMA                 = iMA (Symbol(),0,SMMA_PERIOD,0,MODE_SMMA,PRICE_CLOSE,0);
double BB_UP                = iBands(Symbol(),0,BB_PERIOD,BB_DEV,0,PRICE_CLOSE,MODE_UPPER,0);       

double HIGHEST              = High[iHighest(Symbol(),0,MODE_HIGH,20,0)];

if(Hour() >= START_HOUR && Hour() <= FINISH_HOUR && TRADE_COUNT < TRADE_LIMIT && POS_OPENED == FALSE && Seconds() >= 55)
if(Minute() == 29 || Minute() == 59)
{     
  if(Close[0] > SMMA && Close[0] > BB_UP && Close[0] >= HIGHEST)

  {
   TICKET = OrderSend(Symbol(),OP_BUY,LOT,Ask,0,Ask-StopLoss*Point,Ask+TakeProfit*Point,NULL,MAGIC,0,Blue);
   if(TICKET < 0)
      {
         Alert("Order Send failed, error # ", GetLastError() );
      } 
  }
}
}


用Alert检查,由于一些未知的原因,测试器给出了从最后一个tick开始计算的最大值,但它给出了这个值

它的次数与ticks相同,所以订单没有打开。


第二个问题是如何让我的EA等待到下一个条形图打开(30米周期)? 当使用控制点测试时,一切正常,但如果我使用ticks。

然后EA在同一根柱子上打开,就在它关闭止损后......


另外,我怎样才能关闭一笔交易,而不管它是否是打勾? 例如,在一个30米的周期中,我想在条形图结束前5秒关闭订单(29.55,59.55)。

基于那一刻的所有数据。在这个阶段的问题是,如果在5秒内没有发生勾选,因此没有

(理论上这是胡说八道,但在现实中,下一个tick可能会因为某些原因出现在几个蜡烛图中)。

可能会因为某些原因变成几根蜡烛。


提前感谢!
 

帮助评论。在每个条上,都会产生评论。在每一次打勾时,我想在现有的评论上添加更多的文字。

我调用代码。

void UserMarketComment( )

{

   string com=ChartGetString(0,CHART_COMMENT);  // Получаем текст существующего комментария

   string st="Целевой убыток="+DoubleToStr(-inpTargetLoss,2)+" "+AccountCurrency()+"  Текущ";

   if(AccountProfit()<0) st=st+"ий убыток=";

   else st=st+"ая прибыль=";

   st=st+DoubleToStr(AccountProfit(),2)+" "+AccountCurrency()+"  Целевая прибыль="+DoubleToStr(inpTargetProfit,2)+" "+AccountCurrency();

   Comment(com+"",TimeToStr(TimeCurrent(),TIME_SECONDS),"    Spread = ",MarketInfo(Symbol(),MODE_SPREAD),

           "\n ",st);

  }

添加新的评论,每打一个勾,就有一个新的行 和文字滑下来。

如何使它在输出前删除最后几行?

 
ForTorg ZEVs:

帮助评论。在每个条上,都会产生评论。在每一次打勾时,我想在现有的评论上添加更多的文字。

我调用代码。

void UserMarketComment( )

{

   string com=ChartGetString(0,CHART_COMMENT);  // Получаем текст существующего комментария

   string st="Целевой убыток="+DoubleToStr(-inpTargetLoss,2)+" "+AccountCurrency()+"  Текущ";

   if(AccountProfit()<0) st=st+"ий убыток=";

   else st=st+"ая прибыль=";

   st=st+DoubleToStr(AccountProfit(),2)+" "+AccountCurrency()+"  Целевая прибыль="+DoubleToStr(inpTargetProfit,2)+" "+AccountCurrency();

   Comment(com+"",TimeToStr(TimeCurrent(),TIME_SECONDS),"    Spread = ",MarketInfo(Symbol(),MODE_SPREAD),

           "\n ",st);

  }

添加新的评论,每打一个勾,就有一个新的行 和文字滑下来。

如何使它在输出前删除最后几行?

在我看来,你只能完全取代Comment()

因此,要想在每一个刻度上改变评论的一部分,你必须在每一个刻度上完全改变评论。

 
ForTorg ZEVs:

帮助评论。在每个条上,都会产生评论。在每一次打勾时,我想在现有的评论上添加更多的文字。

我调用代码。

void UserMarketComment( )

{

   string com=ChartGetString(0,CHART_COMMENT);  // Получаем текст существующего комментария

   string st="Целевой убыток="+DoubleToStr(-inpTargetLoss,2)+" "+AccountCurrency()+"  Текущ";

   if(AccountProfit()<0) st=st+"ий убыток=";

   else st=st+"ая прибыль=";

   st=st+DoubleToStr(AccountProfit(),2)+" "+AccountCurrency()+"  Целевая прибыль="+DoubleToStr(inpTargetProfit,2)+" "+AccountCurrency();

   Comment(com+"",TimeToStr(TimeCurrent(),TIME_SECONDS),"    Spread = ",MarketInfo(Symbol(),MODE_SPREAD),

           "\n ",st);

  }

添加新的评论,每打一个勾,就有一个新的行 和文字滑下来。

如何使它在输出前删除最后几行?

所以你的评论中有一个控制字符"\n"--这是一个换行字符。如果你删除它,就不会有多条线。