■ボリンジャーバンドを使った超簡単な売買プログラムを作ってみました。
// 外部パラメータ
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);
}
}
}