ONLY CANDLE / BAR - 如何对Candle进行分类或隔离?- 请纠正我! - 页 4

 

我有一种感觉,我们失去了对代码的一点点控制....。

        if ( SignalBULL62Executed) CheckForClose_BULL6();       // I don't know it is the right place to close

不,这肯定不是正确的地方。

   int    result;
   if(Bid==Close[1]+3*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
   if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }   
  } 

这种 "错误处理 "并没有使任何事情变得更好。再检查一下吧。

bool Fun_New_Bar()                              // bool             

   {                                
   static datetime New_Time=0;      
   New_Bar=false;                   
   if(New_Time!=Time[0])           
      {
      New_Time=Time[0];                
      New_Bar=true;                    
      }
   }

这不是为了好玩而创建的!它应该被用来重置在一个新条上执行的标志。

if(Bid==Close[1]+3*Point)  

我们在比较双数 方面学到了什么,这在这里是否有意义

 

所以你决定删除你的帖子,我指的是......干得好,这很有帮助 !

 

对不起,昨天互联网出现了问题(mql4.com停止工作)。我试图纠正一些东西和...崩溃

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA1  2000        // blue starategy
#define MAGICMA2  2001        // red strategy

//+------------------------------------------------------------------+
//| Check NEW BAR                                |
//+------------------------------------------------------------------+
bool New_Bar = false;

bool Fun_New_Bar()                              // bool             

   {                                
   static datetime New_Time=0;      
   New_Bar=false;                   
   if(New_Time!=Time[0])           
      {
      New_Time=Time[0];                
      New_Bar=true;                    
      }
   }

//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS is open   |
//+------------------------------------------------------------------+

//--- FOR BLUE---------------------------------------------------------
int OpenOrders_BULL4(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)    // magic ma 1 ( is ==)
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }
  
//--- FOR RED--------------------------------------------------------------
int OpenOrders_BULL6(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA2)    // magic ma 2 ( is ==)
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }



//+------------------------------------------------------------------+
//| Condition candle                                                 |
//+------------------------------------------------------------------+
bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
   return(true);
   } 

bool BULL6()
   {
   if(Close[1]-Open[1]>=6*Point && Close[1]-Open[1]<=7*Point)
   return(true);
   }
      
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
//--------------------------- blue bull4 magicma1 
void OpenBULL41()
  {
   int    result;
   if(Bid==Close[1]+3*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
      return(true);
     }
    if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }      
  }
  
void OpenBULL42()
  {
   int    result;
   
   for(int i=1;i<=OrdersTotal();i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)    // magic ma 1 ( is ==)
        {
         if(Ask>OrderOpenPrice()+2*Point)  
            {
             result=OrderSend(Symbol(),OP_BUY,0.42,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
             return;
            }
          if (result == -1)
             {
             int e = GetLastError();
             Print(e);
             }    
        }
     }
  }  
//--------------------------- red bull6 magicma2 
void OpenBULL61()
  {
   int    result;
   if(Bid==Close[1]+3*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.61,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
   if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }   
  }
  
void OpenBULL62()
  {
   int    result;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.62,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
    if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }     
  }

void OpenBULL63()
  {
   int    result;
   if(Ask>OrderOpenPrice()+2*Point)  
     {
      result=OrderSend(Symbol(),OP_BUY,0.63,Ask,0,Close[1]-25*Point,0,"",MAGICMA2,0,Red);
      return;
     }
    if (result == -1)
      {
      int e = GetLastError();
      Print(e);
      }    
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

void CheckForClose_BULL4()
{

   if(OrderOpenPrice()+4*Point< Ask)
   for (int i = OrdersTotal()-1; i >= 0;i--)          // add: -1
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA1) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Blue);

      }
   }
} 

void CheckForClose_BULL6()
{

   if(OrderOpenPrice()+8*Point< Ask)
   for (int i = OrdersTotal()-1; i >= 0;i--)
   {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
      if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MAGICMA2) 
      {
         bool ticket = true;
         if (OrderType() == OP_BUY) ticket = OrderClose(OrderTicket(),OrderLots(),Bid,1,Red);

      }
   }
}  
  
//+------------------------------------------------------------------+
//| flag                               |
//+------------------------------------------------------------------+ 
Fun_New_Bar();
if (New_Bar==false);
bool SignalBULL41Executed=false;
bool SignalBULL42Executed=false;
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;

if(Fun_New_Bar())
{
   SignalBULL41Executed=true;
   return(SignalBULL41Executed);
}


  
  
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
// ----------------bull4
if(BULL4())             
  if(!SignalBULL41Executed && OpenOrders_BULL4(Symbol())==0)
  {
    OpenBULL41();//do open buy position
    SignalBULL41Executed=true;
    if ( SignalBULL41Executed) CheckForClose_BULL4();       // I don't know it is the right place to close
  }
  
  
  if(!SignalBULL42Executed && OpenOrders_BULL4(Symbol())==1)
  {
    OpenBULL42();//do open buy position
    SignalBULL42Executed=true;
        if ( SignalBULL42Executed) CheckForClose_BULL4();       // I don't know it is the right place to close
  }
  
// ----------------bull6  
if(BULL6())             
  if(!SignalBULL61Executed && OpenOrders_BULL6(Symbol())==0)
  {
    OpenBULL61();//do open buy position
    SignalBULL61Executed=true;
        if ( SignalBULL61Executed) CheckForClose_BULL6();       // I don't know it is the right place to close
  }
  
  
  if(!SignalBULL62Executed && OpenOrders_BULL6(Symbol())==1)
  {
    OpenBULL62();//do open buy position
    SignalBULL62Executed=true;
        if ( SignalBULL62Executed) CheckForClose_BULL6();       // I don't know it is the right place to close
  }
  
  
  if(!SignalBULL63Executed && OpenOrders_BULL6(Symbol())==2)
  {
    OpenBULL63();//do open buy position
    SignalBULL42Executed=true;
        if ( SignalBULL62Executed) CheckForClose_BULL6();       // I don't know it is the right place to close
  }   

  }
//+------------------------------------------------------------------+
 

要帮助你并不容易。你为什么不试试暂时只实现一个策略,但要有适当的,Open(), Close(), Count(), NewBar(), Signal()函数

下面的块是在启动函数之外的。我不确定这是否需要。

Fun_New_Bar();
if (New_Bar==false);               // <-- ???
bool SignalBULL41Executed=false;   // <-- This could be correct, but I am not sure you know why and
bool SignalBULL42Executed=false;   //     its not more an accident that you initalize it here.
bool SignalBULL61Executed=false;
bool SignalBULL62Executed=false;
bool SignalBULL63Executed=false;

if(Fun_New_Bar())                  // <-- Your Fun_New_Bar() function doesn't return anything,
{                                  //     you set the global New_Bar variable with the function. 
   SignalBULL41Executed=true;      // <-- You should set it to false on a new bar.    
   return(SignalBULL41Executed);   // <-- ???
}
 

和你的想法 一样 小步走 让我们 采取 一个选项 BULL4
我的代码 库中,有时 看起来 Ea

https://www.mql5.com/en/code/9156 - 有趣

我理解这些(但不觉得),这是一面旗帜,我理解 它的目的

你怎么看? 关于小步骤

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA1  2000        // blue starategy


//+------------------------------------------------------------------+
//| Check NEW BAR                                |
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS is open   |
//+------------------------------------------------------------------+

int OpenOrders_BULL4(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)   
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }
  
//+------------------------------------------------------------------+
//| Condition candle                                                 |
//+------------------------------------------------------------------+
bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
      {
         return(true);
      } 
   else
      {
         return(false);
      } 
   }
//+------------------------------------------------------------------+
//| Condition send buy                                                 |
//+------------------------------------------------------------------+
 
bool BULL4send()
   {
   if( Bid==Close[1]+3*Point)
      {
         return(true);
      } 
    else
      {
        return(false);
      }
   }
 
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+

bool OpenBULL41()
  {
      int    result;

      result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);
      if(result>0)
           {
            if(OrderSelect(result,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
      else
         {
            Print("Error opening BUY order : ",GetLastError()); 
            return(false);
         }
      return(true);       
   }
   
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

  
//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
// ----------------bull4
   if(BULL4() && BULL4send() && OpenOrders_BULL4(Symbol())==0)             

     {
       OpenBULL41();//do open buy position
     }
  }
//+------------------------------------------------------------------+
 

是的,小步骤,所以错误是可以控制的...
你想从代码库EA中强调一些具体的东西吗?

我不会再看到这种情况了--如果你再无视我--或其他人--建议的纠正步骤,我将不再帮助你。

if( Bid==Close[1]+3*Point)

滑移量为0?你可能会得到一个错误。 但固定的错误处理会抓住它 :-)

result=OrderSend(Symbol(),OP_BUY,0.41,Ask,0,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);

这不是错的,但并不理想,在最坏的情况下,它不能满足你在循环中的要求。最好的办法是,甚至不要开始使用从0到OrdersTotal的循环。请阅读这个。循环和关闭或删除订单

for(int i=0;i<OrdersTotal();i++)

你的经纪商的点差是多少,你想交易的符号有多少个数字?我不确定你是否正确使用了Point(请阅读你的主题的第一页)。

 
kronin:

是的,小的步骤,所以错误是可控的...
你想从代码库EA中强调一些具体的东西吗?

我认为没有,没有什么好说的,我明白我写的是什么。

我不会再看到这个问题了--如果你进一步忽视我--或其他人--建议的纠正步骤,我将不再帮助你。

是的。我知道什么是NormalizeDouble,我想我明白(如果我有:EURO/USD = 1.2390022129.....09....而我们需要。1,29893结束!而不是无穷大)但我不能写这些,可能是这些?

如果(NormalizeDouble ( abc(),0 ) )

bool abc()

{

bool z,y,z;

x=Bid;

y=闭合[1]

z=x-y+3*Point

return(z);

}

或 ?

If ( NormalizeDouble ((Close[1]-Bid) +3*point),0 ) ;

滑点为0?你可能会得到一个错误。 但固定的错误处理会抓住它:-)

我可以让+1没有问题 result=OrderSend(Symbol(),OP_BUY,0.41,Ask,1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue) 。

错误将被处理,很好,我们看看以后会怎样。

这并没有错,但并不理想,在最坏的情况下,它不能满足你在循环中的要求。最好的情况是,甚至不要开始使用从0到OrdersTotal的循环。请阅读这个。循环和关闭或删除订单

非常好的文章!我应该在一开始就阅读这些文章:)

你的经纪商的点差是多少,你想交易的符号有多少位数?我不确定你是否正确使用了点数(在你主题的第一页阅读)。

我记得这些,我有Admiral Market Bid=1,29000 Ask=1,29001。我知道这是个问题,但我现在还没有解决,我没有找到好的例子。

我正在写代码...

 
Wodzuuu:

是的。我知道什么是NormalizeDouble,我想我明白了(如果我有:Euro/USD = 1.2390022129.....09....而我们需要。1,29893结束!而不是无穷大)但我不能写这些,可能是这些?


if (NormalizeDouble( abc(),0 ) )

bool abc()

{


你不能把NormalizeDouble() 写成bool,线索在函数名称中,也在文档中 . . .

doubleNormalizeDouble(double value,intdigits)

 
RaptorUK:

你不能把NormalizeDouble() 变成bool,线索就在函数名称中,也在文档中。

我们不能把真实的东西正常化为非常真实的东西,这是一个遗憾 :-(

Wodzuuu
是的。我知道NormalizeDouble是什么,我想我明白了(如果我有:欧元/美元=1.2390022129.....09....而我们需要。1,29893结束!而不是无穷大)但我不能写这些,可能是这些?

不,你不必将Bid或Close[1]规范化。我的意思是,你不应该比较它是否相等。

想象一下。
Close[1] = 1.31933
新条
Tick1, Bid = 1.31935
Tick2, Bid = 1.31934
Tick3, Bid = 1.31937
Tick4, Bid = 1.31937
Tick5, Bid = 1.31942


你的代码确实在寻找一个 Bid 为 1.31936 的 Tick。

if( Bid==Close[1]+3*Point)

如果你使用>,就不会发生这种情况。

Wodzuuu:
我可以有+1没有问题 result=OrderSend(Symbol(),OP_BUY,0.41,Ask,1 ,Close[1]-25*Point,0,"",MAGICMA1,0,Blue);

这并没有使它变得更好。根据我的理解,你在Points中的所有计算应该是Pips。然而,我对ECN经纪商没有经验,所以它可能会起作用。

Wodzuuu:

这不是错的,但并不理想,在最坏的情况下,它不能满足你在循环中的要求。最好不要使用从0到OrdersTotal的循环。请阅读这个。循环和关闭或删除订单

非常好的文章! 我应该在一开始就读这些文章:)

同意,还有很多非常好的文章,由同一作者写的。另外这本书 也不失为一个好的开始。

尊敬的女士们、先生们: 你们好!我是Wodzuuu

我有Admiral Market Bid=1,29000 Ask=1,29001。我知道这是个问题,但我现在还没有解决,我没有找到好的例子。

在你们的经纪商网站上说,对于欧元兑美元,最小点差是0.1。平均点差是0.5。<--这是以点为单位的!所以0.1是1点。0.5是5点。
所以在你的情况下,一个点是10*点。点差会混淆你所有的迷你计算,你只需在价格上加3个点。
搜索 "调整为5位数的经纪人",你应该能找到很多例子。

 

你好 :)

如果说 这段代码 不好是因为我 在传递 信号,那么现在已经 有所改善了我认为 问题 完全 在另一个地方而不是 平等 符号 '=='.........,'>='当然是更好的想法

if( Bid==Close[1]+3*Point)
if( Bid>=Close[1]+MyPips*3)

问题1.在这些函数中,我必须在蜡烛中使用MyPips吗? bool BULL4()

数字问题。

我发现这些

https://www.mql5.com/en/forum/140097 byWHRoeder

https://www.mql5.com/en/forum/123736 作者:WHRoeder

什么是Digit ? 在https://docs.mql4.com/predefined/variables/digitshttps://docs.mql4.com/convert/doubletostr

因为你是 专家,我应该说些什么,这可能很重要。
现在 我使用 MT4平台 ,我看到 小数点后有 4位数字 (Bid-Ask=0.0001 usuallyy)。目前,我们在MQL4中 编程 ,就让它这样吧
MT5 我看到 小数点后有5位数字MQL4MQL5之间是不同的目前这个 数字 对我来说 并不重要重要的是 我们的 EA 运行良好。
我不想 在这个时候 谈论它 (除非 有必要)

我写的程序对我来说是很好的:)你呢?

//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
#define MAGICMA1  2000        // blue starategy

//+------------------------------------------------------------------+
//| Check NEW BAR                                |
//+------------------------------------------------------------------+

// nothing yet, one moment

//+------------------------------------------------------------------+
//| These are adjusted for 5/4 digit brokers                           |
//+------------------------------------------------------------------+

double  MyPips;        // slippage and others

int init()
  {
    if (Digits == 5)    // Adjust for five (5) 
    {                
         MyPips=Point*10; 
    } 
    else                // Adjust for four (4, and ..)
    {
         MyPips=Point*1;  
    }
  }
 
//+------------------------------------------------------------------+
//| Calculate open positions    HOW MEANY OF THIS is open   |
//+------------------------------------------------------------------+

int OpenOrders_BULL4(string symbol)
  {
   int buys=0;

   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA1)   
        {
         if(OrderType()==OP_BUY) buys++;
        }
     }
   return(buys);
  }
  
//+------------------------------------------------------------------+
//| Condition candle                                                 |
//+------------------------------------------------------------------+
bool BULL4()
   {
   if(Close[1]-Open[1]>=4*Point && Close[1]-Open[1]<=5*Point)
      {
         return(true);
      } 
   else
      {
         return(false);
      } 
   }

//+------------------------------------------------------------------+
//| Condition send buy                                                 |
//+------------------------------------------------------------------+
 
bool BULL4send()
   {
   if( Bid>=Close[1]+MyPips*3)
      {
         return(true);
      } 
    else
      {
        return(false);
      }
   }
 
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+

bool OpenBULL41()
  {
      int    result;

      result=OrderSend(Symbol(),OP_BUY,0.41,Ask,MyPips,Close[1]-25*MyPips,0,"",MAGICMA1,0,Blue);
      if(result>0)
           {
            if(OrderSelect(result,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
      else
         {
            Print("Error opening BUY order : ",GetLastError()); 
            return(false);
         }
      return(true);       
   }
   
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+

bool CheckForCloseBULL4()
{
   int i;
   for(i=OrdersTotal()-1;i>=0;i--)
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;
         if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )
            if(OrderOpenPrice()+8*MyPips < Ask) return(true);
            
   else return(false);
}

//+------------------------------------------------------------------+
//|  close                               |
//+------------------------------------------------------------------+

void CloseBULL4()
{
   int i;   
   for(i=OrdersTotal()-1;i>=0;i--)
      {
      if( ! OrderSelect(i, SELECT_BY_POS, MODE_TRADES) ) continue;  
   
      if( OrderMagicNumber() == MAGICMA1 && OrderSymbol() == Symbol()  && OrderType() == OP_BUY )  
   
         if ( ! OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), MyPips*1,Black ) )               
            Print("Order Close failed, order number: ", OrderTicket(), " Error: ", GetLastError() );  
      } 
}

//+------------------------------------------------------------------+
//| Start function                                 |
//+------------------------------------------------------------------+
void start()
  {
// ----------------bull4
   if(BULL4() && BULL4send() && OpenOrders_BULL4(Symbol())==0)             

     {
       OpenBULL41();//do open buy position
     }
     
   if(CheckForCloseBULL4()==true && OpenOrders_BULL4(Symbol())==1) CloseBULL4();   
  }
//+------------------------------------------------------------------+