FORTS:帮助初学者 - 页 3

 

经常使用和有用的功能

会话限制价格检查。

//+------------------------------------------------------------------+
//| Expert Check price range function                                |
//+------------------------------------------------------------------+
bool CheckPriceRange( const string a_symbol, const double price )
{
  double min_price = SymbolInfoDouble( a_symbol, SYMBOL_SESSION_PRICE_LIMIT_MIN );
  double max_price = SymbolInfoDouble( a_symbol, SYMBOL_SESSION_PRICE_LIMIT_MAX );
  if ( ( price >= min_price ) && ( price <= max_price ) )
  {
    return( true );
  }
  return( false );
}
 

经常使用和有用的功能

重新设计了GetPositionPrice()函数。

//+------------------------------------------------------------------+
//| Expert Get position price function                               |
//+------------------------------------------------------------------+
double GetPositionPrice( const string aSymbol )
{
  double price_in = 0;
  double volume_in = 0;
  double price_out = 0;
  double volume_out = 0;
  double price = 0;
  double volume = 0;
//---  
  ulong pos_id = ulong( PositionGetInteger( POSITION_IDENTIFIER ) );
    
  if ( pos_id > 0 )
  {
      if ( HistorySelectByPosition( pos_id ) )
      {
        int deals = HistoryDealsTotal();
      
        for( int i = 0; i < deals; i++ )
        {
          ulong deal_ticket = HistoryDealGetTicket( i );
          ulong order_ticket = ulong( HistoryDealGetInteger( deal_ticket, DEAL_ORDER ) );
        
          if ( order_ticket > 0 )
          {
            ENUM_DEAL_ENTRY deal_entry = ENUM_DEAL_ENTRY( HistoryDealGetInteger( deal_ticket, DEAL_ENTRY ) );
              
            if ( deal_entry == DEAL_ENTRY_IN )
            {
              price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE );
              volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME );
                                
              price_in += price * volume;
              volume_in += volume;  
            }
            else
            if ( deal_entry == DEAL_ENTRY_OUT )
            {
              price = HistoryDealGetDouble( deal_ticket, DEAL_PRICE );
              volume = HistoryDealGetDouble( deal_ticket, DEAL_VOLUME );
                                
              price_out += price * volume;
              volume_out += volume;  
            }
          }
        }
//---  
        price = price_in - price_out;
        volume = volume_in - volume_out;
//---
        if ( volume > 0 )
        {       
          return( NormalizeDouble( price / volume, _Digits ) );
        }
      }
      else
      {
        Print( "GetPositionPrice: Невозможно получить историю позиции по символу ", aSymbol );
      }
    }
    else
    {
      Print( "GetPositionPrice: Невозможно определить идентификатор позиции по символу ", aSymbol );
    }
  return( 0 );
} 
 

对该功能进行小的编辑(为了通用性)。

而不是。

if ( volume_in > 0 )
{
  return( NormalizeDouble( price_in / volume_in, _Digits ) );
}

让它变成这样。

if ( volume_in > 0 )
{
  int symb_digits = int( SymbolInfoInteger( aSymbol, SYMBOL_DIGITS ) );
  return( NormalizeDouble( price_in / volume_in, symb_digits ) );
}
 
Build 1241.真实账户。如果一个挂单被设置 并部分执行,其状态不会改变为ORDER_STATE_PLACED,而是保持ORDER_STATE_PARTIAL。
 

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

MT5的新版本是什么时候,在哪里可以找到它的预期内容

comp, 2016.03.21 08:52

比如说,如果我自己做:开一个真实的账户,并把投资权限放在论坛上,这样大家就可以实时看到FORTS的真实资料,并可以进行正常的测试,会有问题吗?还是很清楚?

 
你好!是否有任何简单的交易系统模板或FORTS的EA例子,考虑到这个主题中描述的功能?我需要它在FORTS的订单上正确工作。
 

"建议

当为FORTS设计EA时,我不建议使用Tick事件,而是使用

最好使用BookEvent事件"。

没有解释为什么它更好,也许在某些情况下它更好,在其他情况下它在Tick上更好。你能不能说得更具体一点?

 
Alexander:

"建议

当为FORTS设计EA时,我不建议使用Tick事件,而是使用

最好使用BookEvent事件"。

没有解释为什么它更好,也许在某些情况下它更好,在其他情况下它在Tick上更好。你能不能说得更具体一点。

作者在禁令中,在一段时间内你不会在这里听到答案。

以下是我的想法。

Tick事件只在Bid、Ask、Last改变时发生。另外,Tick事件是累积性的(如开发者所说),一个Tick可以有几个价格变化。

BookEvent事件在投注市场中的任何订单变化和执行交易时到达。BookEvent事件来得更频繁。

如果你不需要分析市场的流动性,最好使用OnTick()。

在高流动性的符号上,BookEvent事件来的非常频繁,如果处理程序中有大量的计算或几个重磅指标,它将作为一个循环工作。

如果你的专家顾问有其他事件处理程序,如OnTimer,你可能会错过这些事件。我不知道OnTradeTransactionOnTrade 事件,也许,它们可以被跳过

这里有一些信息供你参考。

交易队列的长度为1024项。如果OnTradeTransaction()处理另一个交易的时间太长,队列中的旧交易可能被较新的交易所取代。

 
Sergey Chalyshev:

作者处于禁言状态,你将有一段时间不会听到他在这里的回音。

迈克尔从澡堂里出来已经有一段时间了...在这里,他改变了自己的娘家姓。
 
Alexey Kozitsyn:
自从迈克尔被从澡堂里放出来后,已经过了很长时间...在这里,他改变了他的头像。
他的阿瓦与此有什么关系?他不能在论坛上写作,他被永远禁言了。
原因: