Processing

主要な処理アルゴリズムです。

virtual bool  Processing()

戻り値

取引操作が実行された場合は true、それ以外の場合は false

注意事項

下記のステップが実行されます。

1シンボルの未決済ポジションの存在を確認します。未決済ポジションがない場合、ステップ 2〜4 は抜かされます。
2. ポジション反転の条件をチェックします(CheckReverse() メソッド)。ポジションが反転された場合、終了します。
3. ポジション決済の条件をチェックします(CheckClose() メソッド)。ポジションが決済された場合、ステップ 4 が抜かされます。
4. ポジションパラメータ変更の条件をチェックします(CheckTrailingStop() メソッド)。ポジションパラメータが変更された場合、終了します。
5. シンボルの未決注文の存在を確認します。未決注文がない場合、ステップ 9 に行きます。
6. 注文削除の条件のチェックします(買い未決注文と売り未決注文に CheckDeleteOrderLong()CheckDeleteOrderShort() のそれぞれが使用されます)。注文が削除された場合、ステップ 9 に行きます。
7. 未決注文パラメータ変更の条件をチェックします(買い注文と売り注文にCheckTrailingOrderLong()CheckTrailingOrderShort() のそれぞれが使用されます)。パラメータが変更された場合、終了します。
8. 終了します。
9. 注文を出す条件をチェックします(CheckOpen() メソッド)。

自分独自のアルゴリズムを実装したい場合は、派生クラスの Processing()  メソッドをオーバーライドする必要があります。

実装

//+------------------------------------------------------------------+
//| メイン関数                                                    |
//| 入力:なし                                                     |
//| 出力:取引操作が処理された場合は true、 それ以外の場合は false |
//| メモ:なし                                                     |
//+------------------------------------------------------------------+
bool CExpert::Processing()
 {
//--- ポジションかどうかをチェック
  if(m_position.Select(m_symbol.Name()))
    {
    //--- ポジションが利用可能
    //--- ポジション反転の可能性を見る
    if(CheckReverse()) return(true);
    //--- ポジション決済か未決注文削除の可能性を見る
    if(!CheckClose())
       {
        //--- ポジション変更の可能性を見る
        if(CheckTrailingStop()) return(true);
        //--- 操作なしで返る
        return(false);
       }
    }
//--- 未決注文が出されたかをチェック
  int total=OrdersTotal();
  if(total!=0)
    {
    for(int i=total-1;i>=0;i--)
       {
        m_order.SelectByIndex(i);
        if(m_order.Symbol()!=m_symbol.Name()) continue;
        if(m_order.OrderType()==ORDER_TYPE_BUY_LIMIT || m_order.OrderType()==ORDER_TYPE_BUY_STOP)
          {
          //--- 未決買い注文を削除できるかをチェック
          if(CheckDeleteOrderLong()) return(true);
          //--- 未決買い注文を変更できるかをチェック
          if(CheckTrailingOrderLong()) return(true);
          }
        else
          {
          //--- 未決売り注文を削除できるかをチェック
          if(CheckDeleteOrderShort()) return(true);
          //--- 未決売り注文を変更できるかをチェック
          if(CheckTrailingOrderShort()) return(true);
          }
        //--- 操作なしで返る
        return(false);
       }
    }
//--- 注文を出すか未決注文を設定する可能性をチェックする
  if(CheckOpen()) return(true);
//--- 操作なしで返る
  return(false);
 }