mql5语言的特点、微妙之处以及技巧 - 页 68

 
快速实现多符号的OnTick

关于交易、自动交易系统和策略测试的论坛

在MetaTrader 5策略测试器中分析测试结果并进行优化

fxsaber, 2018.01.28 12:25

指标

#property indicator_chart_window
#property indicator_plots 0

input long Chart = 0; // идентификатор графика-получателя события
input int Index = 0;

int OnCalculate( const int rates_total, const int prev_calculated, const int, const double &[] )
{
  if (prev_calculated)
    EventChartCustom(Chart, 0, Index, 0, NULL);
  
  return(rates_total);
}


专家顾问

input int AmountSymbols = 1;

const string Symbols[] = {"EURUSD", "GBPUSD", "AUDUSD", "USDJPY", "USDCAD"};

void OnInit()
{
  for (int i = 0; i < AmountSymbols; i++)
    if (Symbols[i] != _Symbol)
      iCustom(Symbols[i], PERIOD_W1, "Spy.ex5", ChartID(), i); // MQL5\Indicators\Spy.ex5
}

void OnTick()
{
  OnTick(_Symbol); 
}

void OnChartEvent( const int id, const long &lparam, const double&, const string& )
{
  if (id == CHARTEVENT_CUSTOM)
    OnTick(Symbols[(int)lparam]);
}

// Мультисимвольный OnTick
void OnTick( const string &Symb )
{
}
 
fxsaber:
多符号OnTick的快速实现
我可以用它来代替定时器吗?见
 
弗拉迪斯拉夫-安德鲁申科
我可以用它来代替定时器吗?让我们来看看

是的,OnInit是从一个数组中订阅符号的。

关于交易、自动交易系统和交易策略测试的论坛

Init()和DeInit()执行顺序

斯拉瓦, 2017.04.14 10:21

服务将有OnTick(字符串符号)。但需要订阅某个特定符号的刻度线。
 

关于交易、自动交易系统和策略测试的论坛

在MetaTrader 5策略测试器中分析测试结果并进行优化

fxsaber, 2018.01.29 15:24

优化的速度取决于通过的顺序。如果先进行单字符传递,然后再进行多符号传递,执行时间将比优化传递的相反顺序短。
在进行了强制性的MQL5代码优化以提高性能后,也可以尝试用这种方式在云端进行保存。


ZS 可能90%的云计算费用可以通过正常的代码编写来节省。但这是作者们最后考虑的问题。

 
fxsaber:
快速实现多符号的OnTick

酷!!!。
即使没有期待已久的服务,这真的很有效。

非常感谢您!

然而,无论我在MQL4中如何努力尝试,它都没有发挥作用。在最后一个iCustom请求后,iCustom指标模拟用户信息约10毫秒,之后保持 "沉默"。

附加的文件:
 
尼古拉-森科

在MQL4上,无论我如何努力,它都不工作。在最后一个iCustom请求后,iCustom指标模拟用户信息约10毫秒,之后保持 "沉默"。

在MT4中,指标 "手柄 "的寿命是由终端本身控制的。因此,这种解决方案并不适合。


这种方法在七年多前就有描述。

Реализация мультивалютного режима в MetaTrader 5
Реализация мультивалютного режима в MetaTrader 5
  • 2011.01.10
  • Konstantin Gruzdev
  • www.mql5.com
В настоящее время мультивалютных торговых систем, индикаторов и экспертов разработано огромное количество. Тем не менее, до сих пор создатели этого "огромного количества" сталкивались со специфическими для мультивалютных систем трудностями. С выпуском в свет терминала MetaTrader 5 и языка программирования MQL5 появилась возможность  реализации...
 
当订单被手动发送时,OrderCheck总是被首先调用。如果没有通过,则不发送交易指令
 
OnTradeTransaction 允许你编写一个非交易专家顾问(服务),监测账户上运行的专家顾问的交易 "克隆 "的存在。这种情况有时是由于不注意而发生的。
 
在MT5中,即使在删除订单时,你也需要考虑其特殊性。在SB上的例子。

关于交易、自动交易系统和策略测试的论坛

专家顾问:VR--ZVER v.2

fxsaber, 2018.02.06 11:29

void DeleteAllOrders()
  {
   for(int i=OrdersTotal()-1;i>=0;i--)
      if(m_order.SelectByIndex(i) && (m_order.State() == ORDER_STATE_PLACED))
         if(m_order.Symbol()==m_symbol.Name() && m_order.Magic()==m_magic)
            m_trade.OrderDelete(m_order.Ticket());
  }
当然,最好是在OrderDelete之后重新运行循环。
 
fxsaber:
快速实现多符号的OnTick
有可能出现跳票现象