■超簡単な売買プログラム(ブレイクアウト編)を作ってみました。
extern double Lots = 0.1; // ロット数
extern int MaxLots = 3; // 最大ポジション数
extern int StopLoss = 10; // 損切り値(Stop):0=不要
extern int TakeProfit = 20; // 利食い値(Limit):0=不要
extern int Slippage = 3; // スリッページ
extern int Magic = 10001; // マジックナンバー
extern int BarCount = 40; // ブレイクアウトを調べるバーの数
//////////////// スタート関数 /////////////////
int start() {
// ポジションの確認
if(CheckPosition() == 1) { Comment("Position Over"); return(0); }
// シグナルの確認
int signal = CheckSignal();
// 買い注文
if(signal > 0) {
OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage,
Ask-Point*StopLoss, Ask+Point*TakeProfit, "Buy", Magic, 0, Red);
}
// 売り注文
if(signal < 0) {
OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage,
Bid+Point*StopLoss, Bid-Point*TakeProfit, "SELL", Magic, 0, Blue);
}
return(0);
}
//////////////// シグナルのチェック /////////////////
int CheckSignal() {
double max = High[1];
double min = Low[1];
for(int i=1; i<BarCount; i++) {
// 最高値を取得
if(max < High[i]) {
max = High[i];
}
// 最安値を取得
if(min > Low[i]) {
min = Low[i];
}
}
// 現在値が最高値を更新したら
if(max < Close[0]) { return(1); }
// 現在値が最高値を更新したら
if(min > Close[0]) { return(-1); }
return(0);
}
//////////////// ポジションのチェック /////////////////
int CheckPosition() {
int OpenPosition = 0;
for(int i = OrdersTotal() - 1; i >= 0; i--){
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) {
if(OrderType() == OP_BUY || OrderType() == OP_SELL) {
OpenPosition++;
}
}
}
}
if(OpenPosition >= MaxLots) {
return(1);
}
return(0);
}