新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 482

 

@STARIJ 谢谢,我花了点时间写ObjectSet!它早就写好了,没有注释,而且代码也不干涉!"。你写的是StringSubstr(str,20,7),我不认为这都是字面意思。晚饭后,我意识到这一切都与空间有关!我应该把每一个字符和空格都计算在内的!谢谢朋友!!!!


 

你好,亲爱的朋友们。另一个问题来自一个μl4的新手。我使用教程中推荐的Fun_New_Bar()函数来定义一个新条。


void Fun_New_Bar()                              // Ф-ия обнаружения нового бара   
  {                                             
   static datetime New_Time=0;                  // Время текущего бара  
   New_Bar=false;                               // Нового бара нет  
   if(New_Time!=Time[0])                        // Сравниваем время  
     {  
      New_Time=Time[0];                         // Теперь время такое  
      New_Bar=true;                             // Поймался новый бар  
     }  
  }
然而,由于某些原因,它并不总是有效。我已经把打印的支票放进去了。
if(Hour()>=8 && Hour()<20) 
      {
      Fun_New_Bar();
      if(New_Bar==false) Print("Нового бара нет");
      if(New_Bar==true )      
       {     
       RefreshRates();
        ........... Fun_Open_Sell();          
        ........... Fun_Open_Buy();
       } 
      }

因此,它在一个新条形上开仓,然后打印出 "没有新条形 "并在当前条形上开仓。我不能理解为什么。谢谢你。

 
novichok2018:

你好,亲爱的朋友们。另一个问题来自一个μl4的新手。我使用教程中推荐的Fun_New_Bar()函数来定义一个新条。

然而,不知何故,它并不总是有效。我放入了一张打印的支票。

因此,它在一个新条形上开仓,然后打印出 "没有新条形 "并在当前条形上开仓。我不能理解为什么。谢谢你。

如何区分新建栏 和当前栏?这部分代码多长时间执行一次--每隔 一段时间还是只在形成新条形 的时候?

 
STARIJ:

如何区分新建栏 和当前栏?这部分代码多长时间执行一次--每隔 一段时间还是只在形成新条形 的时候?

新酒吧--按功能划分。当前条形图--其中一个头寸已被平仓,但条形图时间还没有过期。该代码必须在新条形图 形成的时刻执行。或者说,并非如此。代码中定义平仓条件的部分每隔一格就执行一次,而开仓条件则在新的一格中执行。

 
novichok2018:

新酒吧--按功能划分。该代码必须在新条形图 形成的时刻执行。或者说,它不是。代码中定义平仓条件的部分每隔一格就执行一次,而开仓条件则在新的一格执行。

因此,这里的一切都很清楚。但当你在写的时候,发现你应该写得更精确,就把光标往后移,然后纠正。否则就很难这样读和那样读。

该代码在每次打勾时 都会被执行。即 "是否有新酒吧?有一个新的酒吧 吗?是否有新条?而每次都会打印出没有新条的 信息。然后有一个新的酒吧。订单开启?首先向服务器发送一条命令。然后蜱虫来了,又有了新的棒子?有一个新的酒吧,每次都没有新的酒吧,服务员终于开了一个订单,你看了看时间,不知道现在是什么时候了。你在开盘前插入Print(TimeCurrent()),在第一个订单下面4行。或者更好的是,使用警报--就在屏幕上。你可以一目了然地看到。

还有一件事:用if(New_Bar==false)而不是if(New_Bar==true),你可以用if(!New_Bar)if(New_Bar),否则你会得到黄油。

 
STARIJ:

简而言之,这里的一切都很清楚。但当你写作时,发现你需要写得更精确,就把光标带回来,并加以纠正。这样读和那样读都很难。

该代码在每次打勾时 都会被执行。即 "是否有新酒吧?有一个新的酒吧 吗?是否有新条?而每次都会打印出没有新条的 信息。然后有一个新的酒吧。订单开启?首先向服务器发送一条命令。然后蜱虫来了,又有了新的棒子?有一个新的酒吧,每次都没有新的酒吧,服务员终于开了一个订单,你看了看时间,不知道现在是什么时候了。你可以在开单前使用Print(TimeCurrent()),在第一个订单下面4行。或者更好的是,使用警报--就在屏幕上。你可以一目了然地看到。

还有一件事:用if(New_Bar==false)代替if(New_Bar==true),你可以用if(!New_Bar)if(New_Bar),否则你会得到石油

好了,一切都清楚了,关于没有新酒吧的信息。即使没有额外的印刷品,平台在日志中显示的订单开启时间对我来说也是相当足够的。然而,我仍然不明白为什么一次是在新条形上开仓,第二次是在当前条形上开仓,尽管根据代码,在寻找开仓 条件之前应该出现一个新条形。

 
novichok2018:

好了,一切都清楚了,关于没有新酒吧的消息。即使没有额外的打印,平台在日志中打印的订单开启时间对我来说也是足够的。然而,我仍然不明白为什么订单在一次新条形上开仓,而第二次则在当前条形上开仓,尽管根据代码,在寻找开仓 条件之前应该出现一个新条形。

首先,向服务器发送一条命令。在这期间,虱子来了,有一个新的酒吧 吗?有一个新的酒吧,每次都没有新的酒吧,服务器终于开了一个订单,你看了看时间,很奇怪。你可以在开单前使用Print(TimeCurrent()),在第一个订单下面4行。或者更好的是,使用Alert--直达屏幕。你可以一目了然地看到......打开订单的命令是早些时候发送的,在新的栏上

 

你能告诉我如何使2条指标线 之间有一个阴影颜色吗?

如同在ishimoku

 
Roman Sharanov:

你能告诉我如何使指标的两行 之间有一个阴影的颜色吗? 就像在ishimoku中一样。

看看那里怎么 做的...而终端可能有...

 

你好,我已经开始使用2013年的视频教程学习MQL4,我一直在完全按照视频改写代码,从另一个视频中添加一些小改动,因为我需要它们。 结果我得到25个错误。我曾试图寻找解决这些错误的方法,但由于终端的构建已经改变,而且编码也发生了一些变化。如果有人能帮助我编辑代码或至少给出一些有用的建议,我将不胜感激,提前感谢。

//+------------------------------------------------------------------+
//|                                                           ea.mq4 |
//|                                                             mql4 |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Intruder"
#property link      ""
#property version   "1.00"
#property strict

extern double Lots         = 0.1;
extern int    TakeProfit   = 50;
extern int    Step         = 50;
extern double Multiplier   = 2;
extern int    Slippage     = 5;
extern int    Magic        = 123;

extern int    MA_1_Period  = 21;
extern int    MA_1_Shift   = 0;

extern int    MA_2_Period  = 3;
extern int    MA_2_Shift   = 0;


int ticket;
double price, TP, lastlot;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int Init()
{
   if (Digits == 3 || Digits == 5)
   {
       TakeProfit *= 10;
       Step       *= 10;
       Slippage   *= 10;  
   }
   return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert start function                                             |
//+------------------------------------------------------------------+
int start()
{
   if (CountTrades() == 0)
   {
      double ima_1 = iMA(Symbol(), PERIOD_CURRENT, MA_1_Period, MA_1_Shift, MODE_SMA, PRICE_CLOSE, 1);
      double ima_2 = iMA(Symbol(), PERIOD_CURRENT, MA_2_Period, MA_2_Shift, MODE_SMA, PRICE_CLOSE, 1);
      
      if (ima_1 > ima_2)
      {
         ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
         if(ticket > 0)
         {
            TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);
            OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
         }
      }
      else if(ima_1 < ima_2)
      {
         ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);
         if(ticket > 0)
         {
            TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);
            OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
         }
      }
      
   }
   else
   {
      int order_type = FindLastType();
      if (order_type == OP_BUY)
      {
         price = FindLastOrderPrice(OP_BUY);
         if(Ask <= price - Step * Point)
         {
            Lastlot = FindLastLots (OP_BUY);
            lastlot = NormalizeDouble(lastlot * Multiplier, 2);
            ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue);
            if (ticket > 0)
               ModifiOrders(OP_BUY);
         }
      }
      else if (order_type == OP_SELL)
      {
          price = FindLastOrderPrice(OP_SELL);
         if(Bid <= price + Step * Point)
         {
            Lastlot = FindLastLots (OP_SELL);
            lastlot = NormalizeDouble(lastlot * Multiplier, 2);
            ticket = OrderSend(Symbol(), OP_BUY, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Red);
            if (ticket > 0)
               ModifiOrders(OP_SELL);
         }        
      }
   }
   
   return(0);
}
//+------------------------------------------------------------------+
void ModifiOrders(int otype)
{
   double avgprice = 0,
          order_lots= 0;
   
   price = 0;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {
      if (OrderSelecti(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
         {
            price += OrderOpenPrice() * OrderLots();
            order_lots += OrderLots();
         }
      }
   }
   avgprice = NormalizeDouble(price / order_lots, Digits);
   
   if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit*Point, Digits);
   if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit*Point, Digits);
   
   for (i=OrdersTotal()-1; i>=0; i--)
   {
      if (OrderSelect(i SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
            OrderModify(OrderTicket(), OrderOpenPrice(), 0, TP, 0)    
      } 
   }
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
   double oldlots;
   int oldticket;
   
   ticket = 0;
   for(int i = OrdersTotal ()-1; i>=0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() ++ otype)
         {
            oldticket = OrderTicket();
            if(oldticket > ticket)
            {
               oldlots = OrderLots();
               ticket = oldticket;
            }
         }
      }
   }
   return(oldlots);
}
//+------------------------------------------------------------------+
double FindLastOrderPrice(int otype)
{
   double oldopenprice;
   int    oldticket;
   
   ticket = 0;
   
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype
         {
            oldticket = OrderTicket();
            if(oldticket > ticket)
            {
               oldopenprice = OrderOpenPrice();
               ticket = oldticket;
            }
         }
      }
   }
   return(oldopenprice);
}
//+------------------------------------------------------------------+
int FindLastOrderType()
{
   for (int i= OrdersTotal()-1; i>=0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber () == Magic)
              return(OrderType());
      }
   }
   return(-1);   
}
//+------------------------------------------------------------------+
int CountTrades()
{
   int count = 0;
   for (int i=OrdersTotal()-1 i>=0; i--)
   {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
               count++;
        }
   }
   
   return(count);

//-------------------------------------------------------------------+

误区

原因: