システムトレード研究所 〜FXで完全自動売買〜

このサイトでは、FXで完全自動売買を行うために必要な情報を書いていこうと思っています。システムを自分で作りたい方、システムトレードをやってみたい方は御覧になっていって下さい。
<< 不具合の説明 | main | システムのパフォーマンスを向上させる方法 >>
複数のシステムによる自動売買の仕方
 先週の週末に用事で石川に行ったので、ついでに苔の園と那谷寺と栗津温泉に観光に行きました。

 苔の園は大自然にありとても空気が澄んでいましたし、那谷寺も景色がとても綺麗で見ごたえがありました。


苔の園、那谷寺



 ただ、適当に階段を上っていたらいつの間にか山の中に入り込んでいたり、足の踏み場が少なく、雨が降っていて滑りやすくなっており、足を滑らせたらそのまま下まで落ちて行くような岩山を登ったりして、かなり怖かったですが……。

 まあ、その恐怖に見合うだけの景色は見れたので良かったです。

 汗と冷や汗をかなり流していたので、栗津温泉に入って帰宅しました。

 久しぶりに観光をしましたけど、色々刺激になってやはり良いものですね。



 さて、本文です。

 今回は、複数のシステムによる自動売買の仕方でしたね。

 サンプルプログラムはこちらです。

 http://jidoubaibai.com/Sample%20FukusuuSystem.mq4

 サンプルプログラムの使い方は、こちらで説明しています。 

 http://jidoubaibai.com/burogu11.html

 

 そろそろコードの量がかなり多くなってきましたので、全てのコードを書かずに要所要所だけ説明して行くことにします。

 コード全てを見たい方は、サンプルプログラムを御覧下さい。

 
 複数のシステムを一つのプログラムで動かそうとする場合、それぞれの売買ルールごとにポジションを持っているかどうか見分けなければなりません。

 以前、オーダー関数を説明したときには流しましたが、ここでマジックナンバーを使います。

 Ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, 0,0, "Buy", 10, 0, OrangeRed);

 後ろから3番目の10と数字が書かれている場所がマジックナンバーの場所です。

 オーダー関数については、こちらを御覧下さい。

 http://jidoubaibai.com/burogu13.html

 このマジックナンバーによってシステムを分けます。

 例えば、AシステムとBシステムを分ける場合には、Aシステムの取引は全てマジックナンバー10、Bシステムの取引は全てマジックナンバー20という風に設定して下さい。


 次に、マジックナンバーによってポジションを持っているかどうか判断します。

 以前は、下記のコードになっていました。

 //変数の宣言
 int cnt, CurrentPosition;

// オーダーチェック(ポジションなどのデータ)
   CurrentPosition=-1;
   for(cnt=0;cnt < OrdersTotal();cnt++)
{
      OrderSelect(cnt,SELECT_BY_POS);
      if(OrderSymbol() == Symbol()) CurrentPosition=cnt;
}


 このコードを下記のコードに変えます。

  //変数の宣言
   int odMACD,odMA;
   int cnt;
 
     
   // オーダーチェック(全オーダーを調べて、ポジションを持っていなかったら-1を変数に入れる)
   //オーダーの時にマジックナンバーを入力し、それでルールごとにポジションを持っているかどうかを判別している
   odMACD = -1;
   odMA = -1;
   for(cnt=0;cnt < OrdersTotal();cnt++)
   {
      OrderSelect(cnt,SELECT_BY_POS);
      if(OrderMagicNumber() == 10) odMACD = cnt;
      if(OrderMagicNumber() == 20) odMA = cnt;
   
   }


 以前のコードでは、全てのポジションの中からポジションを持っているかどうかということだけ調べていましたが、このコードにすることによって、システムごとに分けてポジション持っているかどうか調べることにします。

 今回はMACDのシステムと移動平均線(MA)の二つのシステムを同時に起動させるシステムを作りましたので、変数odMACDにMACDのシステム、変数odMAに移動平均線のシステムのポジションのデータを入れています。

 ポジションを持っていた場合はそのポジションのナンバーがそれぞれの変数に入り、一つもポジションが無い場合は−1が変数に入っています。

 後は、プログラムの中身を次のようにすれば、複数のシステムを同時に起動出来ます。

if(odMACD == -1)
{
 MACDの仕掛け
}
else
(
 MACDの手仕舞い
)

if(odMA == -1)
(
 移動平均線の仕掛け
)
else
(
 移動平均線の手仕舞い
)


 ポジションを持っているかどうかを分けた後は、普通に各々のシステムの内容のコードを書けば大丈夫です。

 これで、プログラムの説明は終了です。 

 サンプルプログラムの方は、かなり長く見辛くなったので、MACDと移動平均線のオリジナル関数を作って見易くしています。

 実際のシステムの中身はサンプルプログラムを見てもらえれば、出来るだけコメントをつけて分かり易くしていますので、理解出来ると思います。

 また、二つのシステムが本当に動いているかどうか分かり辛かったので、移動平均のシステムを0.5ロットにしています。

 結果のところを見てもらえれば、移動平均のシステムは0.5ロットに、MACDのシステムは1ロットになっているので分かると思います。

 
 今回はこれで終了です。

 プログラムを長々と書くより、こちらの方が見易くて良いと思うのですが、どうでしょうか?

 ほとんどプログラミングの基本的なことはやりましたので、何かリクエストがありましたら、そのプログラムをやろうと思いますので、宜しかったらコメント欄に書いてください。


 

 宜しかったら、応援して下さい



システムトレード研究所〜FXで完全自動売買〜INDEXへ


----------------------注意----------------------
 このブログは半角のスペースが認識されない為、コードを見易くするために全角で書いている場合があります。
 実際にプログラムにコードを書くときは、コピー&ペーストせずに半角で書いて行って下さい。

 また、内容には注意を払っていますが、保障は出来ません。
 実際に運用する場合は、自己責任でお願いします。
| 小松 | MetaTrader4 プログラム中級編 | 22:13 | comments(1) | - |
登録ありがとうございました。
| 相場師ブログランキング | 2007/04/27 8:46 AM |









   1234
567891011
12131415161718
19202122232425
262728293031 
<< May 2019 >>



このページの先頭へ