MetaTrader掲示板

アップロード可能ファイル拡張子:gif, jpg, png, txt, swf, jpeg, xls, zip, cab,tpl,mq4,ex4,mq5,ex5
一度にアップロード可能な最大サイズ :合計200KB
  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃MetaTraderまとめWiki  
144 / 270 ツリー  ←次へ | 前へ→

【461】ボリンジャーバンドを利用した自動売買で質問です BB 10/2/6(土) 2:13 [添付]
【466】Re:ボリンジャーバンドを利用した自動売買で... BB 10/2/8(月) 1:37

【461】ボリンジャーバンドを利用した自動売買で質...
  BB  - 10/2/6(土) 2:13 -

   ボリンジャーバンドの+2σで売り−2σで買いのインジケータは出来たのですが、エキスパートプログラムがうまく動きません。

プログラムの特徴は、外部変数の BufBuyPrice と BufSellPrice で現在の買いと売りの値を持たせ、決済すると0にして、2重に買いや売りにならないようにしています。
そして、Visual modeにチェックを入れて、バックテスト実行すると、最初の+2σで売りが行われ、次の−2σで買いが実行されるのですが、その次の+2σでは売りが入らず、数個先の+2σでやっと売りが入り、その後は、売りも買いもいくつも抜けてしまいます。

システムは121証券を使っています。

どうしたら、うまくいくでしょうか?


//------------------------------
// エキスパートプログラム
//------------------------------

//マジックナンバー
#define MAGIC 20100203

//パラメーター
extern double Lots = 0.1; //売買ロット数
extern int Slippage = 30; //スリッページ
extern int BandsPeriod = 20;
extern int BandsDeviation = 2;

double BufBuyPrice=0;  //買い値 (0の場合は現在買い無し)
double BufSellPrice=0; //売り値 (0の場合は現在売り無し)

//+------------------------------------------------------------------+
//| ポジションを決済する                       |
//+------------------------------------------------------------------+
void ClosePositions()
{
  for(int i=0; i<OrdersTotal(); i++)
  {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
   if(OrderMagicNumber() != MAGIC || OrderSymbol() != Symbol()) continue;
   //オーダータイプのチェック
   if(OrderType()==OP_BUY)
   {
     OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,White);
     break;
   }
   if(OrderType()==OP_SELL)
   {
     OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,White);
     break;
   }
  }
}

//+------------------------------------------------------------------+
//| スタート関数                           |
//+------------------------------------------------------------------+
int start()
{
    //ボリンジャーバンドの計算
  double BufUpper0 = iBands(NULL, 0, BandsPeriod, BandsDeviation, 0, PRICE_CLOSE, MODE_UPPER, 0);
  double BufLower0 = iBands(NULL, 0, BandsPeriod, BandsDeviation, 0, PRICE_CLOSE, MODE_LOWER, 0);

  //買いシグナル
   if(BufBuyPrice == 0 )
   {
     if(Low[0]<BufLower0)
     {
      //買い実行
      ClosePositions();
      OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",MAGIC,0,Blue);
      BufBuyPrice = BufLower0;
      BufSellPrice = 0;
     }
   }

  //売りシグナル
   if(BufSellPrice == 0)
   {
     if(High[0]>BufUpper0)
     {
      //売り実行
      ClosePositions();
      OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,0,0,"",MAGIC,0,Red);
      BufSellPrice = BufUpper0;
      BufBuyPrice = 0;
     }
   }

  return(0);
}
引用なし
パスワード

[添付]〜添付ファイル〜
・名前 : Exp5.mq4
・サイズ : 2.3KB

【466】Re:ボリンジャーバンドを利用した自動売買...
  BB  - 10/2/8(月) 1:37 -

   自己解決しました。

モデルを「Open prices only」にしていたため、
Open[0]=Low[0]=High[0]=Close[0]となり、
Open[0]で±2σを超えていないときが、
抜けていたようです。

初歩的なミスですみませんでした。
引用なし
パスワード

  新規投稿 ┃ツリー表示 ┃スレッド表示 ┃一覧表示 ┃トピック表示 ┃検索 ┃設定 ┃MetaTraderまとめWiki  
144 / 270 ツリー  ←次へ | 前へ→
ページ:  ┃  記事番号:   
(SS)C-BOARD v3.8 is Free
掲示板運営ポリシー:MetaTraderに関する情報を交換するための掲示板です。議論の範囲を超えた根拠無き誹謗中傷、荒らし、犯罪予告等、
公序良俗に反する書き込みについては、速攻削除のうえ、関係機関に通報します。
情報源のページなどがあれば、そこへのリンクを直接張って頂けると大変ありがたいです。
投稿情報の信頼性向上の為にも、ご協力頂ければ幸いです。

Google