[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 229

 
请告知为什么交易无法打开....代码似乎很有意义,但就是打不开。
 
//+------------------------------------------------------------------+ 
  //| MACD ^^^.mq4 | 
  //| Copyright © 2011, MetaQuotes Software Corp. | 
  //| http://www.metaquotes.net | 
  //+------------------------------------------------------------------+ 
  #property copyright "Copyright © 2011, MetaQuotes Software Corp." 
  #property link "http://www.metaquotes.net" 

  extern int TP = 100; 
  extern int TS = 100; 
  extern int TF = 1; 
  extern double lots = 0.1; 
  int fast_ema = 5; 
  int slow_ema = 34; 
  int signal_period = 5; 
  int slip = 3; 
  int Magic = 1; 

 int total; 
 int ticket; //объявил тотал и тикет 

 //+------------------------------------------------------------------+ 
  //| expert initialization function | 
  //+------------------------------------------------------------------+ 
  int init() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert deinitialization function | 
  //+------------------------------------------------------------------+ 
  int deinit() 
    { 
  //---- 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 
  //| expert start function | 
  //+------------------------------------------------------------------+ 
  int start() 
    { 
  //---- 
  
 CheckTicket();
 bool signal = signal_MACD(); 
 AnalyzeSignal(signal); 

 //---- 
     return(0); 
    } 
  //+------------------------------------------------------------------+ 

 bool signal_MACD() 
  { 
    bool signal_MACD = false; 
    double tmp = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0); 
    for(int i=1;i<=5;i++) 
    { 
       if(NormalizeDouble(iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0)*tmp,4)<0.0) 
       { 
          signal_MACD = true; 
          break; 
       } 
    } 
  } 

 void AnalyzeSignal(bool signal) 
  { 
    double MACD = iMACD(Symbol(),TF,fast_ema,slow_ema,signal_period,PRICE_CLOSE,MODE_MAIN,0);
    total = OrdersTotal();
    if(total < 0)
    {
      if(signal == true)
      {
         if(MACD > 0)
         {
                ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green); 
                if(ticket>0) 
                { 
                    OrderSelect(ticket,SELECT_BY_TICKET); 
                    Print("открылись на покупку по цене:", OrderOpenPrice()); 
                } 
                else 
                { 
                    Print("открыться не удалось по причине:", GetLastError()); 
                    return(0); 
                } 
         }
         if(MACD < 0)
         {
               ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green); 
               if(ticket>0) 
               { 
                   OrderSelect(ticket,SELECT_BY_TICKET); 
                   Print("открылись на продажу по цене:", OrderOpenPrice()); 
               } 
               else 
               { 
                   Print("открыться не удалось по причине:", GetLastError()); 
                   return(0); 
               } 
         }
         else
            return(0);
      }
    }
  }
  
void CheckTicket()
{
   if(OrderSelect(ticket,SELECT_BY_TICKET))
   {
      if(OrderCloseTime()>0)
      {
         ticket = 0;
      }
   }   
}
 

这是一个我无法拼凑的点,帮我创造。

我需要为两个或多个朝一个方向开立的订单定义一个盈利点零,例如买入。

并在此基础上增加获利,并将其分配给所有未平仓的买入订单。

获利应该显示在图表上,即它应该是可见的。

例如,在1500的价格下,我们打开第一个买入 订单

在1600点,我们打开第二个买入订单。

他们的零点是在1550+(获利=20)。

在这里,第一个和第二个订单的获利点是1570,当价格达到这个水平时,两个订单将被关闭。

如果价格通过(跳跃)这一水平,它将跟随并关闭订单。

同时保持买入和卖出订单的记录是非常重要的,不能相互干扰。 你应该为买入单独设置止盈,为卖出单独设置止盈,而且只有在一个方向同时开出两个或两个以上的订单时才可以设置。

 
CLAIN:
请告知为什么交易无法打开....代码似乎很有意义,但就是打不开。
因为OrdesTotal() 永远不会返回一个负值。
 
谢谢,说得好....纠正了...但交易仍然无法打开....怎么办?
 
CLAIN:
谢谢,说得好....纠正了...但交易仍然无法打开....怎么办?


可能是对signal_MACD()函数的修正。

好吧,她仍然会给予一些回报。

 

你好。

请你告诉我,我的条件写得是否正确?(Fractal_point_up_buy 和Fractal_point_down_buy参数已被规范化)。

预先感谢你。

      Fractal_point_up_buy=TF1B;
      Flow_differential_buy=Fractal_point_up_buy-Bid;
      if (timf1s>timf2b && timf2s>timf2b && timf3s>timf2b && timf3s<timf1b)
       {
        Fractal_point_down_buy=TF3S;   
       }
      else
       {
        if (timf1s>timf2b && timf2s>timf2b && timf3s<timf2b && timf2s<timf1b)
         {
          Fractal_point_down_buy=TF2S;   
         }
        else
         {
          if (timf1s>timf2b && timf2s<timf2b && timf3s<timf2b && timf1s<timf1b)
          Fractal_point_down_buy=TF1S; 
         }     
       }
      Fractal_fibo_buy=100*Flow_differential_buy/(Fractal_point_up_buy-Fractal_point_down_buy);
 
belck:

这是一个我无法拼凑的点,帮我创造。

我需要为两个或多个朝一个方向开立的订单定义一个盈利点零,例如买入。

并在此基础上增加获利,并将其分配给所有未平仓的买入订单。

获利应该显示在图表上,即它应该是可见的。

例如,在1500的价格下,我们打开第一个买入订单

在1600点,我们打开第二个买入订单。

他们的零点是在1550+(获利=20)。

在这里,第一个和第二个订单的获利点是1570,当价格达到这个水平时,两个订单将被关闭。

如果价格通过(跳跃)这一水平,它将跟随并关闭订单。

同时保持买入和卖出订单的记录是非常重要的,不能相互干扰。 你应该为买入单独设置止盈,为卖出单独设置止盈,而且只有在一个方向同时开出两个或两个以上的订单时才可以设置。


对于在1500点开仓的头寸,在1570点取货是可以的(如果你不考虑StopLevel的话),但是对于在1600点开仓的头寸,在1570点取货会导致错误130 - 错误的止损。毕竟,"收购 "不能低于 "买入 "的开盘价。这已经是一个StopLoss。
对于两个职位,你已经确定了你的盈亏平衡点,但对于三四五?
你应该首先定义单向头寸的盈亏平衡公式,然后你可以创建一个逻辑。
 
nemo811:

你好。

请你告诉我,我的条件写得是否正确?(Fractal_point_up_buy和Fractal_point_down_buy参数已被规范化)。

预先感谢你。

你好。

如果所有的变量都被声明,我没有看到MQL4语法中的错误...

有什么问题呢?

 
,
artmedia70:
对于一个在1500点开的头寸,在1570点拿下是可以的(如果你不考虑StopLevel的话),但是对于一个在1600点开的头寸,在1570点拿下会导致130的错误 - 错误的止损。毕竟,"收购 "不能低于 "买入 "的开盘价。这已经是一个StopLoss。对于两个职位,你已经确定了你的盈亏平衡点,但对于三四五?你应该首先定义单向头寸的盈亏平衡公式,然后你就可以计算出逻辑。



这完全取决于我们何时设置或改变 "获利"。它是基于当前的价格