任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 801

 

我不明白问题出在哪里?

int start() 

{

bool i;

int ticket;

double Pricem;

datetime Timen; 

string Symb=Symbol();

ticket=OrderSend(Symb,OP_SELL,0.1,Bid,3,Ask+4*Point,Ask-12*Point);

i=OrderSelect(0,SELECT_BY_POS);

while(true)

{

RefreshRates();

Timen=OrderCloseTime();

  if(Timen>0)

   {

     Pricem=OrderClosePrice();

     Alert(Pricem);

     Alert("ордер закрылся");

     Sleep(30000);

 }

 Sleep(10);

 }

return;                              

}


应该出现一条关闭信息。订单打开,到达止损点,关闭,仅此而已。错误在哪里?
 

我正在解决使用MQL4工具关闭所有开放图表的任务。有3个不同货币对的开放图表,这是脚本代码。

   for (int i=1;i<=3;i++) {
      long current=ChartID();
      Print("итерация цикла: ",i,", идентификатор текущего графика ",current);
      bool result=ChartClose(current);
      if(result)Print("окно успешно закрыто");
      else Print("не удалось закрыть окно с идентификатором: ", current);
   }

当我运行该脚本时,三个图表中只有一个被关闭,以下是日志中的打印结果。

AUDUSD,H1: итерация цикла: 1, идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто
AUDUSD,H1: итерация цикла: 2, идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто
AUDUSD,H1: итерация цикла: 3, идентификатор текущего графика 130627565403660021
AUDUSD,H1: окно успешно закрыто

这意味着在关闭一个图表后,当前图表应该是另一个,但是。

1.在第一个图表被关闭后,ChartID 函数返回被关闭的图表的 标识符,而不是当前的图表。

2.C hartClose()函数 在第2次和第3次迭代中返回真,这意味着它成功关闭了已经关闭的窗口...

谁知道错误在哪里,如何解决这个问题?

 
CJIeCaPb:

我不明白问题出在哪里?

应该出现一条关闭信息。订单打开,到达止损点,关闭,仅此而已。错误在哪里?

我认为OrderSelect() 必须在while循环内,此外,位置号将是不正确的,因为在它关闭后,位置号将变得不同--在这种情况下,最好是按票选择。
 
tuner:
我认为OrderSelect()应该在一个while循环中,此外,位置号将是不正确的,因为关闭后它将变得不同--在这种情况下,最好从票据上选择。
好耶,成功了!谢谢
 
tuner:

我正在解决使用MQL4工具关闭所有开放图表的任务。有3个不同货币对的开放图表,这是脚本代码。

当我运行该脚本时,三个图表中只有一个被关闭,以下是日志中的打印结果。

这意味着在关闭一个图表后,当前图表应该是另一个,但是。

1.在第一个图表被关闭后,ChartID 函数返回已关闭的图表的标识符,而不是当前的 图表。

2.C hartClose()函数 在第2次和第3次迭代中返回真,这意味着它成功关闭了已经关闭的窗口...

谁知道错误在哪里,如何解决这个问题?

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(currChart<0) break;  
      prevChart=currChart;
      ChartClose(currChart);
      i++;
     }
     ChartClose(ChartFirst());
  }
//+------------------------------------------------------------------+
 

pako,有时有效,有时无效,我不知道为什么......我得到一个错误。

2014.12.11 17:52:12.456 在'C:\.....................ex4'中读取0x09295000的访问权限违规。

会不会是因为它试图关闭 脚本所抛出的图表

如果脚本附在左边的第一个图表上,PS就能正常工作。但如果我把它放在任何其他图表上,我得到一个错误

 
tuner:

pako,有时有效,有时无效,我不知道为什么......我得到一个错误。

2014.12.11 17:52:12.456 在'C:\.....................ex4'中读取0x09295000的访问权限违规。

会不会是因为它试图关闭脚本所抛出的图表?

如果脚本附在左边的第一个图表上,PS就能正常工作。但如果我把它放在任何其他图表上,我得到一个错误

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(currChart<0) break; 
      ChartClose(currChart); 
      prevChart=currChart;
      i++;
     }
     ChartClose(ChartFirst());
  }
//+------------------------------------------------------------------+
 

伙计们,帮帮我吧

问题是以下将订单转化为非亏损的功能,当我在日元对上设置它并允许所有未结订单转化为非亏损时,它不能正常工作。

我让它们都正常,但在五位数时,即使我只设置为五位数,它也会返回到零,但最好的是,如果我设置为五位数,它可以正常工作。

这些工作的原因是什么? 在这些功能中应该考虑到什么,以便正确的执行是正确的,而不是取决于专家的工作,在什么窗口我把它扔了三个或五个数字?

非常感谢你。

    }

 //==================================================================================================

 // функция перевода ордеров стоп лоса в без убыток по всем открытым ордерам

 //==================================================================================================

 if(_Simbol==false)//если false то по всем ордерам открытым 

 { 

   for(int i=0;i<OrdersTotal();i++)//цикл перебора ордеров

     {

       if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))//будем искать следующие

         {

           if(OrderType()==OP_BUY) //если тип бай

            {

             double  bid=MarketInfo(OrderSymbol(),MODE_BID);//последний известный бид инструмента

             double  point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента

             

               if(OrderStopLoss()<OrderOpenPrice())//если стоп лос меньше цены открытия

                {

                  if(bid-Dist_Perivoda*point>OrderOpenPrice())//бид-профит*пункт больше цены открытия

                   {//модифицируем стоп лос

 bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);

              if(!ord_modifik)//если не получилось

              Comment(GetLastError());//номер ошибки в угол

                   }

                   

                }

            }

            if(OrderType()==OP_SELL)//если тип селл

            {

              double ask=MarketInfo(OrderSymbol(),MODE_ASK);//последний известный аск инструмента

              double  point=MarketInfo(OrderSymbol(),MODE_POINT);//чему равен пункт инструмента

              

              if(OrderStopLoss()==0||OrderStopLoss()>OrderOpenPrice())//если стоп лос больше цены открытия или равен нолю

              {

                if(ask+Dist_Perivoda*point<OrderOpenPrice())//аск +профит*пункт меньше цены открытия

                  {//модифицируем стоп лос

  bool ord_modifik=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-NormalizeDouble(Level_Zahiti*point,Digits),OrderTakeProfit(),0,clrNONE);

                  if(!ord_modifik)//если не получилось

                  Comment(GetLastError());//номер ошибки в  угол

                  }

                }

             } 

          }

       }

    }

  

 
pako:

谢谢你的代码,我明白了要领,尽管我有时还是会出错。

实验了显示图表ID的功能。文档中的ChartFirst() 是什么绝对不清楚,人们可以以任何方式解释它--可能是指从左边开始依次打开的第一个图表,或者是从所有打开的图表中打开的第一个(在时间上),或者是在终端中打开的第一个(现在打开的可能性几乎为零,所以关闭它没有意义)。我更倾向于后一个版本,因为我从未见过这个函数返回图表的ID,而这个图表此刻是开放的。

 
tuner:

谢谢你的代码,我明白了要领,尽管我有时还是会出错。

实验了显示图表ID的功能。文档中的ChartFirst()是什么 绝对不清楚,人们可以以任何方式解释它--可能是指从左边开始依次打开的第一个图表,或者是从所有打开的图表中打开的第一个(在时间上),或者是在终端中打开的第一个(现在打开的可能性几乎为零,所以关闭它没有意义)。我更倾向于后一个版本,因为我从未见过这个函数返回目前正在打开的图表的ID。

领先者

返回客户终端的第一个图表 ID。

我理解这是最左边的图表