要塞:初心者を助けるために - ページ 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の新バージョンはいつ、そして何が期待されているのかを知ることができる場所

コンプ さん 2016.03.21 08:52

例えば、私が自分でやる場合、リアルアカウントを 開設し、フォーラムに投資アクセスを置くことで、誰もがリアルタイムでFORTSのリアルフィードを見ることができ、通常のテストにアクセスできるようになりますが、問題はないのでしょうか。それともクリア?

 
こんにちは!このスレッドに書かれている機能を考慮した、FORTS用の簡単なトレーディングシステムのテンプレートやEAの 例はありますか?FORTSでの注文で正しく動作するようにしてほしい。
 

"おすすめ"です。

FORTSのEAを設計する場合、Tickイベントを使用することはお勧めしませんが、その代わりに

BookEventイベントを 使用した方が良い」ということです。

なぜそれが良いのかは説明されておらず、ある場合には良いのかもしれないし、ある場合にはonTickの方が良いのかもしれない。もう少し具体的に教えてください。

 
Alexander:

"おすすめ"です。

FORTSのEAを設計する場合、Tickイベントを使用することはお勧めしませんが、その代わりに

BookEventイベントを 使用した方が良い」ということです。

なぜそれが良いのかは説明されておらず、ある場合には良いのかもしれないし、ある場合にはonTickの方が良いのかもしれない。もう少し具体的に教えてください。

作者は解禁になったので、しばらくはここで答えを聞くことはできないだろう。

そのことについて、私はこう考えています。

Tickイベントは、Bid、Ask、Lastが変更されたときのみ発生します。また、Tickイベントは(開発者が言うように)累積的で、1つのTickで複数の価格変動が発生することがあります。

BookEventは、ベッティングマーケットの注文が変更されたときや、取引が成立したときに到着するイベントです。BookEventイベントはもっと頻繁にやってきます。

市場の流動性を分析する必要がない場合は、OnTick()を使用する方がよいでしょう。

流動性の高いシンボルでは、BookEventイベントが非常に頻繁に訪れ、ハンドラ内に重い計算やいくつかの重い指標があると、ループとして動作してしまいます。

Expert Advisor に OnTimer のような他のイベントハンドラがある場合、これらのイベントを見逃す可能性があります。OnTradeTransactionとOnTradeの イベントについては分かりませんが、おそらく、これらはスキップ することができます。

ここでは、その情報をご紹介します。

トランザクションキューの長さは1024アイテムです。OnTradeTransaction()が別のトランザクションを処理するのに時間がかかりすぎると、キュー内の古いトランザクションが新しいトランザクションに取って代わられる可能性があります。

 
Sergey Chalyshev:

作者は禁止令が出ているので、しばらくはここからの返事はないでしょう。

マイケルが浴場から解放されてしばらく経ちますが...。ここでは、旧姓を変えている。
 
Alexey Kozitsyn:
マイケルが浴場から解放されてから、ずいぶん時間が経ってしまったが...。ここで、アバターを変更した。
彼のアバがどう関係するんだ?掲示板に書き込めない、永久追放だ。