■ボリンジャーバンドを使った超簡単な売買プログラムを作ってみました。


// 外部パラメータ
extern int BBPeriod = 20; // ボリンジャーバンドの期間
extern int BBSigma = 2;   // 標準偏差の倍率


int start() {
 //変数の宣言
 int i, OpenPosition;
 int Ticket;
 double BBUpper,BBLower;


 // ポジションの有無をチェック
 OpenPosition=0;
 for (i = OrdersTotal() - 1; i >= 0; i--){
  OrderSelect(i, SELECT_BY_POS);
  if(OrderSymbol() == Symbol()) {
   OpenPosition++;
  }
 }


 // ボリンジャーバンドの計算
 BBUpper = iBands(NULL, 0, BBPeriod, BBSigma, 0, PRICE_CLOSE, MODE_UPPER, 1);
 BBLower = iBands(NULL, 0, BBPeriod, BBSigma, 0, PRICE_CLOSE, MODE_LOWER, 1);


 int signal = 0;
 // 買いシグナル
 if(Close[2] >= BBLower && Close[1] < BBLower) { signal = 1; }
 // 売りシグナル
 if(Close[2] <= BBUpper && Close[1] > BBUpper) { signal = -1; }


 // ポジションが無い場合
 if(OpenPosition == 0) {
  // 買い注文
  if(signal > 0) {
   Ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy", 0, 0, Red);
  }
  // 売り注文
  if(signal < 0) {
   Ticket = OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "Sell", 0, 0, Blue);
  }


 // ポジションが有る場合
 }else {
  //ポジションの選択
  OrderSelect(Ticket,SELECT_BY_POS);


  // 売りポジションを決済
  if(signal > 0 && OrderType()==OP_SELL) {
   OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
  }
  // 買いポジションを決済
  if(signal < 0 && OrderType()==OP_BUY) {
   OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
  }
 }
}