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

 

问候。MQL4。我想在我的EA中加入一个蛇类游戏。

你能告诉我是否可以将决定OnTimer()事件周期的秒数设置为小于1,例如0.7?

或者用其他方式来实现部分代码的周期性执行,但这样就不会延迟OnTick()的执行?

 
Andrey Sokolov:

问候。MQL4。我想在我的EA中加入一个蛇类游戏。

你能告诉我是否可以将决定OnTimer()事件周期的秒数设置为小于1,例如0.7?

或者用其他方式来实现部分代码的周期性执行,但这样就不会延迟OnTick()的执行?

https://docs.mql4.com/ru/eventfunctions/eventsetmillisecondtimer
EventSetMillisecondTimer - Работа с событиями - Справочник MQL4
EventSetMillisecondTimer - Работа с событиями - Справочник MQL4
  • docs.mql4.com
Указывает клиентскому терминалу, что для данного эксперта или индикатора необходимо генерировать события таймера с периодичностью менее одной секунды. нужно получать события таймера чаще, чем один раз в секунду. Если вам достаточно обычного таймера с периодом в несколько секунд, то используйте EventSetTimer(). Обычно эта функция должна...
 
Alexey Viktorov 谢谢你
 

下面的代码输出牖漠摲牥⁳湩潦〉〮र〲थ⸰〰歴沌┰〉〮र。

它应该输出测试的文本

这些文件在Files/Test/\文件夹中。

函数说句柄是正确的,它是1,并且立即GetLastError 说错误5008错误的句柄....。

我应该怎么做?

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   core();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+
void core()
  {
   string value = "", name = "";

   name =  "Test" + "\\test.csv";
   Print(FileIsExist(name));

   ResetLastError();

   int m_hendle = -1;
   m_hendle = FileOpen(name, FILE_READ | FILE_WRITE | FILE_CSV);
   if(m_hendle != INVALID_HANDLE)
     {
      Print((string)m_hendle + "    " + name + " [" + (string)FileSize(m_hendle) + "]"+ (string)GetLastError());
       while(!FileIsEnding(m_hendle))
        {
         string sCurrent = FileReadString(m_hendle);
         Print("sCurrent = ", sCurrent);
        }
      FileClose(m_hendle);
     }
  }
//+------------------------------------------------------------------+
 
Vladimir Pastushak:

下面的代码输出牖漠摲牥⁳湩潦〉〮र〲थ⸰〰歴沌┰〉〮र。

看起来像 "冠状病毒"

 

你好....,请帮我把一个MT5顾问转换为4。我自己没有学习的欲望和需要,如果它很复杂,我会理解并忘记它,我不需要太多......

我已经问过了,但我的反馈是关于如何学习,或者说我问的是设置和"圣杯 专家"。在阅读论坛时,似乎人们会帮助......有趣的是,如果人们要求做一些不贵的事情,为了钱......免费帮助,而当我只是要钱的时候,他们可能认为有人想用陌生人的手,要求免费......有了钱在这里,现在,会立即支付,不打扰,但他们没有,当你这样做将不需要......容易得分,但仍然......希望最后死亡。


我可以以后再付钱,等我有了钱......。

附加的文件:
Lift.mq5  9 kb
 
eKpuBu4:

你好....,请帮我把一个MT5顾问转换为4。我不想也不需要自己学习,如果它很复杂,我会理解并忘记它,我不需要很多......

其余的在哪里呢?

Expert.mqh>

SignalTRIX.mqh>


SignalStoch.mqh>

追踪固定点数.mqh>

货币固定风险.mqh>

 
你好。我对mql4编程没有很好的了解。
input double   Lots=0.01;     //Lots size
input int      Tprof=1000;     //TakeProfit
input int      TreilSt=100;    //Trailing Stop
input int      TrStKor=10;     //The size of the correction Trailing Stop
input int      Magik=1001012;  //Magic Number
extern int Bars_left = 5;
extern int Bars_right = 5;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   static double Upf,Lowf;
   double Tupf=0,Tlowf=0;
   int i,k;
   for(i=2; i<100; i++)
     {
      Tupf=iCustom(Symbol(),0,"takbir",Bars_left,Bars_right,0,i);
      if(Tupf>0)
         break;
     }
   for(k=2; k<100; k++)
     {
      Tlowf=iCustom(Symbol(),0,"takbir",Bars_left,Bars_right,1,k);
      if(Tlowf>0)
         break;
     }
//----Open position
//if(i>0) Print("i = ", i, " k = ",k);
   int total=OrdersTotal();
/*if(total<1)
      {*/
    
   if(Ask>Tupf+15*_Point && Tupf!=Upf)
     {
      double StL=NormalizeDouble(Tlowf,_Digits);
      int ticket=OrderSend(NULL,OP_BUY,Lots,Ask,30,StL,Bid+Tprof*_Point,NULL,Magik,0,clrBlue);
      if(ticket<0)
        {
         Print("OrderSend error #",GetLastError());
        }
      else {Print("Ask=",Ask,"Upf=",Upf," StL=",StL); Upf=Tupf;}
     }
   if(Bid<Tlowf-15*_Point && Tlowf!=Lowf)
     {
      double StL=NormalizeDouble(Tupf,_Digits);
      int ticket=OrderSend(NULL,OP_SELL,Lots,Bid,30,StL,Ask-Tprof*_Point,NULL,Magik,0,clrRed);
      if(ticket<0)
        {
         Print("OrderSend error #",GetLastError());
        }
      else {Print("Bid=",Bid,"Lowf=",Lowf," StL=",StL);   Lowf=Tlowf;}
     }
// }
//----Trailing Stop operation
   for(int cni=0;cni<total;cni++)
     {
      if(!OrderSelect(cni,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderMagicNumber()==Magik && TreilSt>0)
        {
         if(OrderType()==OP_BUY)
           {
            if(Bid-OrderOpenPrice()>_Point*TreilSt)
              {
               if(OrderStopLoss()<Bid-_Point*TreilSt-TrStKor*_Point)
                 {
                  //--- modify order and exit
                  if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-_Point*TreilSt,OrderTakeProfit(),0,clrBlue))
                     Print("OrderModify error ",GetLastError());
                  return;
                 }
              }
           }
         if(OrderType()==OP_SELL)
           {
            if((OrderOpenPrice()-Ask)>_Point*TreilSt)
              {
               if(OrderStopLoss()>Ask+_Point*TreilSt+_Point*TrStKor)
                 {
                  //--- modify order and exit
                  if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TreilSt,OrderTakeProfit(),0,clrRed))
                     Print("OrderModify error ",GetLastError());
                  return;
                 }
              }
           }
        }
     }
  }

但我想不出如何解决以下问题。

double StL=NormalizeDouble(Tupf,_Digits);

止损设置在之前的 "顶部分形"。

应该是这样。

如果最后一个较低的分形被跌破--止损设置在较低的分形和跌破之间的最高价格

如果最后一个上分形被突破--止损设置在上分形和突破口之间的最低价格上

我试图用itime设置分形的形成时间,并定义索引,但我不知道如何达到当前时间,并从当前时间搜索到分形,每次都要经过条形,直到订单被打开。

也许我们应该在订单开放期间寻找它?并通过修改订单来改变停止和ndp,但怎么做,我不明白。

我不知道如何做到这一点。亲爱的专业人士,您能抽出5分钟的时间吗?

Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
Документация по MQL5: Константы, перечисления и структуры / Константы индикаторов / Ценовые константы
  • www.mql5.com
Технические индикаторы требуют для своих расчетов указания значений цен и/или значений объемов, на которых они будут считаться. Существуют 7 предопределенных идентификаторов перечисления ENUM_APPLIED_PRICE, для указания нужной ценовой базы расчетов. Если технический индикатор для своих расчетов использует ценовые данные, тип которых задается...
 
v0van1990:
请帮助。尊敬的专业人士,请抽出五分钟的时间。

你需要在这里修复它

     {
      Tupf=iCustom(Symbol(),0,"takbir",Bars_left,Bars_right,0,i);
      if(Tupf>0)
         break;
     }
 
MakarFX:

你需要纠正这里

这个函数给我提供了最后形成的非标准分形的信息,我在EA的开始就改变这些非标准分形。

或者,我是否应该在指标中加入另一个功能--在最后一个分形被穿透之前或新的分形形成时的高点或低点信息?

我的理解是否正确?

原因: