■移動平均線を使った売買プログラムを作ってみました。
// 外部パラメータ
extern int FastMAPeriod = 20;
extern int SlowMAPeriod = 40;
int start() {
//変数の宣言
int i, OpenPosition;
int Ticket;
double fastSMA1,fastSMA2;
double slowSMA1,slowSMA2;
// ポジションの有無をチェック
OpenPosition=0;
for (i = OrdersTotal() - 1; i >= 0; i--){
OrderSelect(i, SELECT_BY_POS);
if(OrderSymbol() == Symbol()) {
OpenPosition++;
}
}
//現在の短期移動平均
fastSMA1 = iMA(NULL,0,FastMAPeriod,0,MODE_SMA,PRICE_CLOSE,0);
//1つ前の足の短期移動平均
fastSMA2 = iMA(NULL,0,FastMAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
//現在の長期移動平均
slowSMA1 = iMA(NULL,0,SlowMAPeriod,0,MODE_SMA,PRICE_CLOSE,0);
//1つ前の足の長期移動平均
slowSMA2 = iMA(NULL,0,SlowMAPeriod,0,MODE_SMA,PRICE_CLOSE,1);
// ポジションが無い場合
if(OpenPosition == 0) {
//もし短期SMAが長期SMAを下から上にクロスしたら
if( fastSMA2 <= slowSMA2 && fastSMA1 > slowSMA1) {
//買いポジションを取る
Ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0, 0, "Buy", 0, 0, Blue);
}
// ポジションが有る場合
}else {
//ポジションの選択
OrderSelect(Ticket,SELECT_BY_POS);
//ポジションの確認
if(OrderSymbol() == Symbol()) {
if(OrderType()==OP_BUY) {
//もし短期SMAが長期SMAを上から下にクロスしたら
if( fastSMA2 >= slowSMA2 && fastSMA1 < slowSMA1) {
//手仕舞い
OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
}
}
}
}
}