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

 
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) !=0) return (i);
double LastUpperFractalPrice = High [i]; return (LastUpperFractalPrice);

}

是这样吗?这个函数会返回最后一个上分形 的价格吗?

 
Trader7777:

这是否正确?这个函数会返回最后一个上分形的价格吗?


分形搜索的例子
 
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
{
if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i);
{
double LastUpperFractalPrice = High [i];
}
}
return (LastUpperFractalPrice);

}

这到底行不行?

 
Trader7777:
double GetLastUpperFractalPrice()
{
for (int i = 3; i<=Bars; i++)
{
如果(iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) !=0)
{
double LastUpperFractalPrice = High [i];
}
}
返回(LastUpperFractalPrice;)。

}

这到底行不行?


因此,例如,它将。

double GetLastUpperFractalPrice()
{
   for (int i = 3; i<=Bars; i++)
   {
      if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0)
      {
         return(High [i]);
      }
   }
   return(EMPTY_VALUE);
}

正如你所拥有的,它不会。

 
Trader7777:
double GetLastUpperFractalPrice() { for (int i = 3; i<=Bars; i++) { if (iFractals(Symbol(),PERIOD_M5,MODE_UPPER,i) != 0) return (i); { double LastUpperFractalPrice = High [i]; } } return (LastUpperFractalPrice);










}

它到底能不能发挥作用?


不,通过面板上的SRC 插入代码。

return (ХХХ) 将从用户函数中返回 - 在那里输入的东西将由这个函数返回 - ХХХ的值或一些计算函数的结果。

因此,当发现一个分形时,写return(High [i])来输出第i个条形的最大价格--你不需要发明其他东西。

比你早得多))。

 

这是一个放置挂单的基本功能,参数并不重要,但重要的是使专家顾问(它可以使用现有的挂单循环)在收到 "新价格 "后或重置或以其他方式避免在同一价格下单。在这种情况下,下单的循环不应停止。

double Dist=10000.0。
string SMB;
double NewPrice;
int i;
int start()
{
RefreshRates()。
SMB=Symbol()。
{UstanOtlozh();}
}
return(0);
空白的UstanOtlozh()
{
double OldPrice=WindowPriceOnDropped(); // 这里抛出了脚本。
RefreshRates()。
SMB=Symbol()。
{
int i=1。
while(i<=OrdersTotal())
{
如果(OrderSelect(i-1,SELECT_BY_POS)==true)//如果有
{ // 订单分析。
if (OrderSymbol()!= SMB) continue; // 不是我们的金融工具。
int Tip=OrderType(); // 订单类型
如果(Tip<2)继续;//市场订单
double NewPrice=OrderOpenPrice(); // 订单价格
{
while(NewPrice<=Ask+200*Point||NewPrice>=Ask+50*Point)
{
NewPrice=NewPrice+50*Point。
OrderSend(SMB,OP_BUYSTOP,0.01,NewPrice,3,0,0,NULL,0,CLR_NONE) 。
如果(NewPrice>Ask+200*Point||NewPrice<Ask+50*Point)
突破。
}}}}}}

 
ALXIMIKS:
我已经把它固定下来进行编译--并使用555构建的mt4 EDITOR--它真的有助于快速找到问题。在安装前只需阅读手册--前15页。

我从没想过我会问这么简单的事情。编译时,我得到一个信息,即BU()函数没有参与。我是这样说的(代码已给出),现在所有的东西都能编译,但盈亏平衡函数却不能工作。我在其他EA中也看到了同样的Breakeven功能。

int start()
  {
   if(Volume[0]>1) return; 
  
   if (CountTrades()==0 && Open[1]>Close[1] && Open[2]<Close[2] && High[1]>High[2] && Low[1]<Low[2])  // продажа
   {
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
      {
         TP=NormalizeDouble(Bid - TakeProfit * Point, Digits);
         OrderModify(ticket, OrderOpenPrice(),0,TP,0);
      }
   }
   else
   if (CountTrades()==0 && Open[1]<Close[1] && Open[2]>Close[2] && High[1]>High[2] && Low[1]<Low[2]) // покупка
    {
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);   
      if (OrderSelect(ticket, SELECT_BY_TICKET,MODE_TRADES))
      {
         TP=NormalizeDouble(Ask + TakeProfit * Point, Digits);
         OrderModify(ticket, OrderOpenPrice(),0,TP,0);
      }
    }
   if (CountTrades()>0)
      {
      otype = FindLastOrderType();
      if (otype == OP_BUY)
         { // ценапоследнего ордера на покупку
         price = FindLastBayPrice();
         
         if ((Bid - price) / Point >= Step)
            {
               ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid,Slippage,0,0,"Pattern_1",111,0,Red);  
            }
         }
      else if (otype == OP_SELL)
         { // цена последнего ордера на продажу
         price = FindLastSellPrice();
         
          if ((price - Ask) / Point >= Step)
            {
               ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask,Slippage,0,0,"Pattern_1",111,0,Blue);  
            }
         }
      }
    BU();  
    return(0);
  }
 
alexey1979621:

我从没想过我会问这么简单的事情。编译时,我得到一个信息,即BU()函数没有参与。我是这样说的(代码已给出),现在所有的东西都能编译,但盈亏平衡函数却不能工作。在其他EA中,完全相同的盈亏平衡功能也在发挥作用。




唯一的原因是不正确的if(...)操作符返回;似乎你只有一个--在程序的开头。
 

先生们!!!"。你们这些人对什么感到困惑呢?

iFractals() 返回价格,而不是分形的条数。

 
tara:

唯一的原因是一个不正确的if(...)操作符返回;看来你有一个--在程序的开头。
这个已经被删除。但问题出在其他地方--在正常化方面。由于某些原因,我的专家顾问读取了4位小数,而不是5位。
extern double  Lots             = 0.1;
extern string Сomment           = "Pattern_1";
extern int TakeProfit           = 10;     
extern int StopLoss             = 0;   
extern int Step                 = 2;   

extern int BULevel              = 2;
extern int   NotBULevel         = 2;         // Уровень безубытка в пунктах

extern int Slippage             = 2; // проскальзывание 
extern int Magic                = 111;



//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
      if (Digits ==5) // для пятизначного брокера
         {
            TakeProfit *= 10;
            StopLoss *= 10;
            Slippage *= 10;
            Step *= 10;
            BULevel *= 10;
            NotBULevel *= 10;
         }
      return(0);
}
如何解决这个问题?