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

 
Mikhail Mishanin:

如果我们把 "时间值 "换成新的时间和最后计算的时间之间的差异?

也就是说,我们将知道有一个新的时间。

-从新的一天开始

-从新的一周开始

-或相差超过指定时间。

我不知道如何应用这个!


在截图中,翻转和价差扩大是在22-00,在大多数其他交易中是在00-00,它是1小时后-价差扩大。

我如何以编程方式找出翻转时间,而不将程序限制在输入参数的时间内?

---

P.S. 这段代码表现良好,但条件是它必须在翻转前500点运行

bool CheckSpr(int _sp)
{
   static int ts=0, res=0;
   static long tc=0;
  // Comment( res,"=",tc );
   if(tc>500 && res*3<_sp) return(false); // если уже собрали 500 тиков и есть средний спред - смотрим на расширенный spr*3
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

我不知道如何应用这个!


在截图中翻转和价差扩大在22-00,在大多数其他交易中在00-00,它是1小时后-价差扩大。

我如何以编程方式找出翻转时间,而不将程序限制在输入参数中的时间?

---

P.S. 这段代码表现良好,但条件是在翻转前500点运行。

通过交易扩大价差的原因是交易时段 的开始,即大量订单的 "倾销 "处理,以及一切将如何(以什么价格)"结算 "的不确定性。交易会保险并扩大价差。你只需要把时间从交易时段的结束/开始推迟。

 
Mikhail Mishanin:

通过交易扩大价差的原因是交易时段 的开启,即大量订单被放置处理,因此不确定所有的东西将如何(以什么价格)"结算"。交易会保险并扩大价差。你只需要从交易时段的结束/开始时预留出时间。

是的,但它不在仪器规范中。

这就是晚上10点的翻身之处。

这是在00-00时的滚动。


 
Vitaly Muzichenko:

是的,但它不在工具规范中。

TimeCurrent()-TimeGMT()
 

希望最终的版本能考虑到所有的因素

MqlDateTime dt;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0, res=0;
  static long tc=0;
   if(dt.hour==22) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

希望最终版本能考虑到所有的

两个变量

datetime daLAST=0。

datetime daOLD=0。


在每个可以 "交易 "的函数中,即它可以获得 刻度的时间

daOLD =daLAST。

daLAST="滴答时间"

如果(daLAST - daOLD > "time gap") - 一个新的会话开始了,有一个时间间隔

{

//保存、使用和取消这一点,只要你愿意

}

 
Mikhail Mishanin:

两个变量

datetime daLAST=0。

datetime daOLD=0。


在每个可以 "交易 "的函数中,即可以得到 tick的时间

daOLD =daLAST。

daLAST="滴答时间"

如果(daLAST - daOLD > "time gap") - 一个新的会话开始了,有一个时间间隔

{

//保存、使用和取消这一点,只要你愿意

}

有一些货币对和困境,亚洲时段可能长达数分钟没有嘀嗒声,翻转时间为21-59至22-01,这比亚洲的嘀嗒声到达的时间要快。

 
Vitaly Muzichenko:

有一些货币对和莳萝,在亚洲时段可能会有长达数分钟的时间没有嘀嗒声,滚动时间从21-59到22-01,即比亚洲的嘀嗒声到达的时间快。

那么又回到了原点。

目的是什么?跳过点差过大的交易- 对吗?

那么我们也许可以忽略时间而分析传播本身。

如果卖价-买价>"阈值" - 启用跟踪/积累。

如果Ask - Bid < "阈值" - 关掉它,或者也累积

这样的 "牛 "似乎对我也很有用,我将收集这样的东西,它将收集统计数据......


如果几分钟内没有新的刻度线,跳过交易中的第一个刻度线会更合理。

统计数据应收集在特定的对和莳萝上,因为任何 "曲率 "都可能在"-"和 "+"中发挥作用。

 
Mikhail Mishanin:

那我们就回到原点吧。

目的是什么?跳过点差过大的交易- 对吗?

那么我们也许可以忽略时间,而分析传播本身。

如果卖价-买价>"阈值" - 启用跟踪/积累。

如果Ask - Bid < "阈值" - 关掉它,或者也累积

这样的 "牛 "似乎对我也很有用,我将收集这样的东西,它将收集统计数据......


如果几分钟内没有新的刻度线,跳过交易中的第一个刻度线会更合理

应该收集特定对和莳萝的统计数据,因为任何 "曲率 "都可能像"-"和 "+"一样发挥作用。

你所描述的一切使上面的代码,除了黄色--我认为它是多余的,不完全正确。不知为何从未见过,那个翻车的人是在其他时间,总是在同一个时间--格林尼治标准时间22点,虽然我可能搞错了。

但经常看到不同期限的滚动,有的5分钟,有的1分钟多一点。

---

检查代码,也许会改变一些东西。

//+------------------------------------------------------------------+
void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
   static int ts=0;

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",ts++,"=",res );
   } else Comment( "false: ",sp,"=",ts++,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0;
  static long tc=0;
   if(dt.hour==22) return(false);
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false);
   return(res>_sp?true:false);
}
 
Vitaly Muzichenko:

每个人的时间都是一样的--格林尼治标准时间晚上10点,尽管我可能是错的。

你没有错。

原因: