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

 
Alexey Viktorov:

Artyom,我的回答并不是以这样的话开头的


抛物线有严格的交替性,一个方向的两个信号即使在不同的柱子上也不可能。而且你根本不需要为此发明什么,即使在零杆上,它也不会发出响声,就像MA。

嘎嘎声--我以前不止一次注意到。也许从那时起有些变化,但零条上的点可以消失--原来是这样。

我像往常一样从以下情况出发:以后可能会把指标换成另一个--而这块代码已经独立工作了--习惯......

 
Artyom Trishkin:
会有帮助 吗?我在那里贴了一个模板,你可以根据这个模板自己制作你想要的东西。

谢谢,大致应用了一下,但还是感觉有时开仓后会立即改变SL。
 
AlGuru:

谢谢你,我大致应用了一下,但我仍然感觉到,有时在开仓时,它立即改变SL。
然后你需要解开SL值,并把Print() 也放在拖网里面,这样它就会报告它的工作和它所达到的值--否则感觉就只是一种感觉;)
 
出现了一个问题,伙计们!魔法数字的位数有限制吗?应该有多少个数字?
 
Rustam Bikbulatov:
这里有一个问题要问你们!神奇数字的位数有限制吗?应该有多少个数字?


一个magik通常由一个整数int类型定义。

䵮䵮

整数int类型的大小为4字节(32位)。最小值为-2,147,483,648,最大值为2,147,483,647。

像这样。

 
Alekseu Fedotov:


Magik通常由整数int类型定义。

䵮䵮

整数int类型的大小为4字节(32位)。最小值为-2,147,483,648,最大值为2,147,483,647。

像这样。


非常感谢您!
 

大家好,我写了一个EA,但搞不清楚代码。我需要这个函数在服务器的每一个刻度和每一秒钟运行。我刚刚调用了我的函数2次,通过OnTick,然后通过OnTimer ,似乎一切都做得很正确,但它还是经常漏掉一秒钟,由于这个原因,有时不能在正确的时刻工作。帮助,谁知道,将非常感激)。也许是因为与服务器的连接中断而停止工作?有没有可能让它每秒钟都运行一次,即使通信中断,而且秒数与服务器时间严格同步?


int OnInit()

  {

   EventSetTimer(1);

   return(INIT_SUCCEEDED);

  }

void OnTick()

{

Clicker (); //-- старт каждый тик

}

void OnTimer()

{

Clicker (); //-- старт каждую секунду

}

void Clicker()

  {

//--- тут идёт порядка 30 строк кода, вырезал чтобы никого не грузить

   Comment("Sek = " + (Seconds()));

   return;                                      // Выход из start()  

  }

 
我的朋友们,请帮助一个MQL4程序员初学者 提供一些建议。
我已经写好了代码,应该确定过去n个柱子的最大开盘价,但由于某些原因,EA认为是图表上所有柱子的最大开盘价。

void OnTick()
{
   for (int i = 1; i <= BarTotal; i++)
   {
      double High_Open = iOpen(Symbol(), PERIOD_H1, i); 
      if (High_Open >= Current_High)
      {
         Current_High = High_Open;
         Print (Current_High); 
      }
   }
}

谢谢你)

 
ivan-baaton:
朋友们,请帮助一个初学 MQL4的程序员 提供一些建议。
我写了一段代码,应该确定过去n个柱状体的最大开盘价,但EA出于某种原因考虑了图表上所有柱状体的最大开盘价。

...

谢谢你)

试试这样的函数。

//+------------------------------------------------------------------+
double GetMaxOpen(const string symbol_name,const ENUM_TIMEFRAMES timeframe,uint start_pos,const uint count){
   double array[];
   ResetLastError();
   if(CopyOpen(symbol_name,timeframe,start_pos,count,array)==count) return(array[ArrayMaximum(array)]);
   Print(__FUNCTION__," > Ошибка копирования в массив: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+

我没有看过,实际上是自己写的,所以我可能遗漏了什么。

 

我已经明白了我的错误,但我不明白如何解决它。任务通常是每秒启动一次,但从当前蜡烛开始的时间没有被正确计算。

Seconds()函数 从最后一个已知的tick的数据中输出 秒数,但我需要以某种方式计算在函数被调用 的那一刻,从分钟蜡烛开盘以来的真实秒数,即使在过去几秒钟内根本没有tick。

TimeSeconds (TimeLocal())或( TimeLocal() - Time[0])也不会起作用 因为本地时间可能与服务器相差几秒。如何解决这个问题?

原因: