//+------------------------------------------------------------------+
//|                                         Aki0307_GBPJPY14_002.mq4 |
//|                                        Copyright ｩ 2009, Aki0307 |
//|                                  http://aki0307.blog.shinobi.jp/ |
//+------------------------------------------------------------------+
#property copyright "Copyright ｩ 2009, Aki0307"
#property link      "http://aki0307.blog.shinobi.jp/"

//エントリーする時分
extern int iEntryHH=14;
extern int iEntryMM=0;

//クローズする時分
extern int iCloseHH=4;
extern int iCloseMM=0;

//エントリーするPip
extern double dEntryPip=0.2;

//リミットとストップ値
extern double dLimit=0.2;
extern double dStop=0.2;

//スリップページ
extern int iSlip=3;

//ロット数
extern double dLots=0.1;

// トレーリングストップ用フラグ
extern bool bTrailingStop = false;


// 時間足用
datetime dtTimeFrame = 0;

// 注文とポジションのクローズ
int Ordclose(){
    int iTotal = OrdersTotal();
    if(iTotal > 0){
        for(int i = iTotal -1; i >= 0; i-- ){
            bool bSelected = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
            if(bSelected){
                int iType = OrderType();
                switch(iType){
                   case OP_BUY:
                       OrderClose(OrderTicket(), OrderLots(), Bid, 3, CLR_NONE);
                       break;
                   case OP_SELL:
                      OrderClose(OrderTicket(), OrderLots(), Ask, 3, CLR_NONE);
                      break;
                   case OP_BUYLIMIT:
                   case OP_BUYSTOP:
                   case OP_SELLLIMIT:
                   case OP_SELLSTOP:
                      OrderDelete(OrderTicket());
                      break;
                }
            }
        }
    }
}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----

    double dLimitOrder = 0;
    double dStopOrder = 0;

    if(bTrailingStop){
        TralStop();
    }

    // 今の時間を取得時間足に変化があると中に入る
    if(dtTimeFrame<iTime(NULL,0,0)) {
        dtTimeFrame=iTime(NULL,0,0);

        //現在の時間を取得
        int iNowHH=TimeHour(TimeCurrent());
        int iNowMM=TimeMinute(TimeCurrent());

        // 時間がクローズと等しい場合は、手仕舞いを行う
        if((iCloseHH == iNowHH) && (iCloseMM == iNowMM)){
            Ordclose();
        }

        // 時間がエントリーと等しい場合は、発注処理をする
        if((iEntryHH == iNowHH) && (iEntryMM == iNowMM)){
            //ポジションを持っていないので、売り買いの注文を出す
            if(dLimit != 0){
                dLimitOrder = Ask + dEntryPip + dLimit;
            }else{
                dLimitOrder = 0;
            }
            if(dStop != 0){
                dStopOrder = Ask + dEntryPip - dStop;
            }else{
                dStopOrder = 0;
            }
            OrderSend(Symbol(), OP_BUYSTOP, dLots, Ask + dEntryPip, iSlip, dStopOrder, dLimitOrder, "売り注文", 0, 0, CLR_NONE);

            if(dLimit != 0){
                dLimitOrder = Bid - dEntryPip - dLimit;
            }else{
                dLimitOrder = 0;
            }
            if(dStop != 0){
                dStopOrder = Bid - dEntryPip + dStop;
            }else{
                dStopOrder = 0;
            }
            OrderSend(Symbol(), OP_SELLSTOP, dLots, Bid - dEntryPip, iSlip, dStopOrder, dLimitOrder, "買い注文", 0, 0, CLR_NONE);
        }
    }

//----
   return(0);
  }
//+------------------------------------------------------------------+

int TralStop(){
    double dOpenPrice = 0;
    double dStopPrice = 0;
    int iTotal = OrdersTotal();
    if(iTotal > 0){
        for(int i = iTotal -1; i >= 0; i-- ){
            bool bSelected = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
            if(bSelected){
               int iType = OrderType();
               switch(iType){
                   case OP_BUY:
                       dOpenPrice = OrderOpenPrice();
                       dStopPrice = OrderStopLoss();
                       if(Bid > dOpenPrice){
                           if(Bid-dStopPrice > dStop){
                               OrderModify(OrderTicket(), dOpenPrice, Bid-dStop, OrderTakeProfit(), 0,CLR_NONE);
                           }
                       }
                       break;
                   case OP_SELL:
                       dOpenPrice = OrderOpenPrice();
                       dStopPrice = OrderStopLoss();
                       if(Ask < dOpenPrice){
                           if(dStopPrice-Ask > dStop){
                               OrderModify(OrderTicket(), dOpenPrice, Ask+dStop, OrderTakeProfit(), 0,CLR_NONE);
                           }
                       }
                       break;
                }
            }
        }
    }
    return (0);
}

