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

このサイトでは、FXで完全自動売買を行うために必要な情報を書いていこうと思っています。システムを自分で作りたい方、システムトレードをやってみたい方は御覧になっていって下さい。
<< MetaTrader4 プログラム入門 part6 システムの導入方法 | main | 自動売買システムの作り方 後編 >>
自動売買システムの作り方 前編
 今回から、いよいよ実際に自動売買出来るシステムの製作に移って行こうと思います。

 あまりにも長くなってしまいましたので、前編後編で分けます。


 今回から、内容が長く複雑になりますが、少しずつ理解して行けば出来ないことはありませんので頑張ってください。

 また、サンプルプログラムを作っておきましたので、エラーが出た場合などはこちらを参考にして下さい。

 サンプルプログラム
 http://jidoubaibai.com/Sample%20%20iMA.mq4

 サンプルプログラムの使い方は、MetaTrader4 プログラム入門 part6 システムの導入方法で説明しています。



 では、いつもと同じようにMetaEditorを起動して下さい。

 NameはiMAにして置いて下さい。

 int start()の中のreturn(0);の上辺りに次のコードを書いてください。

 今回もまとめて書きますね。

 今回は少し長いですが、頑張ってコードを書いてください。


 //変数の宣言
 int cnt, CurrentPosition;
 int Ticket;
 double kakoa,gennzaia;
 double kakob,gennzaib;

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

 //一時間前の21日線
 kakoa = iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);
 //一時間前の90日線
 kakob = iMA(NULL,0,90,0,MODE_SMA,PRICE_CLOSE,1);

 //現在の21日線
 gennzaia = iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);
 //現在の90日線
 gennzaib = iMA(NULL,0,90,0,MODE_SMA,PRICE_CLOSE,0);


 // ポジションチェック ポジション無し
 if(CurrentPosition == -1)
 {
   //もし21日線が90日線を下から上にクロスしたら
   if( kakoa < kakob && gennzaia >= gennzaib)
   {
    //買いポジションを取る
    Ticket = OrderSend(Symbol(), OP_BUY, 1, Ask, 3, Ask-(200*Point), Ask+(200*Point), "Buy", 0, 0, Blue);
   }
 }

  
 書けましたか?

 今回は今までと比べるとかなり複雑なので、ほとんど分からないと思いますが、慣れればそれほど難しくないので、頑張ってください。

 では、説明して行きます。

 まず、頭に//が付いているのはコメントです。

 出来るだけ分かり易くするようにコメントを書いています。

 また、自分で作る時もこういう風にコメントを付けていけば、あとでプログラムを見直すときに分かりやすいです。


 //変数の宣言
 int cnt, CurrentPosition;
 int Ticket;
 double kakoa,gennzaia;
 double kakob,gennzaib;
 
 これは、変数の宣言です。

 doubleは小数点以下の数字を含むときに使います。 

 今回は移動平均のデータなどを入れるのに使います。



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

 
 これは、今現在ポジションを持っているかどうかなどを調べます。

 これは説明するとかなり長く複雑になりますので、このコードを書けばオーダーチェックしてくれるという使い方だけ覚えてください。


 
 //一時間前の21日線
 kakoa = iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);
 //一時間前の90日線
 kakob = iMA(NULL,0,90,0,MODE_SMA,PRICE_CLOSE,1);

 //現在の21日線
 gennzaia = iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);
 //現在の90日線
 gennzaib = iMA(NULL,0,90,0,MODE_SMA,PRICE_CLOSE,0);


 これは、変数に移動平均のデータを入れています。

 iMA()というのは、移動平均の関数です。

 Print()等と同じものです。

 ()の中にデータを入れると移動平均のデータを算出してくれます。

 このデータはMetaEditorで関数を書いて、そこにカーソルを置いてF1キーを押せば、関数の内容が英語ですが出てきます。

 iMAだとこんな風に出てきます。

 double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

 ()の中の内容を一つずつ説明すると次のようになります。



 string symbol  

 どの通過ペアなのかを表すシンボルです。

 基本的に選択された通過ペアで行うNULLを入れておけば問題ありません。



 int timeframe  

 時間足等のタイムフレームです。

 基本的に0を入れておけば問題ないです。

 選択されたタイムフレームで行ってくれます。



 int period

 移動平均線の期間です。

 21日移動平均線にしたい場合は21と入力し、90日移動平均線にしたい場合は90と入力します。

 今回は二つの移動平均線がクロスした時に売買するシステムを作りますので、変数kakoaとgennzaiaに21と入力し、変数kakobとgennzaibに90と入力しています。


 int ma_shift

 移動平均線をシフトするバーの数です。

 よく分からない場合は0と入力しておけば問題ないです。



 int ma_method

 移動平均線の種類です。


 単純移動平均、指数平滑化移動平均などの移動平均の方法です。

 MODE_SMA
 MODE_EMA
 MODE_SMMA
 MODE_LWMAの四種類あります。

 今回は、単純移動平均線の MODE_SMAを使います。



  int applied_price

 始値、高値、安値、終値など、どのデータを使用して移動平均線を作るかです。

 PRICE_CLOSE
 PRICE_OPEN
 PRICE_HIGH
 PRICE_LOW
 PRICE_MEDIAN
 PRICE_TYPICAL
 PRICE_WEIGHTEDの7種類あります。

 今回は終値のPRICE_CLOSEを使います。



  int shift

 移動平均線の時間をシフトする数値です。

 0なら現在の移動平均、1なら一つ前の足の移動平均のデータが入ります。

 1時間足なら、一時間前の移動平均のデータが入ります。

 今回は売買ルールで現在のデータと一つ前の足のデータが必要になりますので、変数kakoaとkakobに1と入力し、変数gennzaiaとgennzaibに0と入力しています。


 
 例えば、kakoa = iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);の場合は、

 変数kakoaに一つ前の足の21日移動平均のデータを入れています。


 これで、関数iMAの説明は終わりです。

 かなり複雑だと思いますが、ほとんど関数は似たようなものなので、一度理解すれば大抵の関数が使えます。

 頑張ってください。

 さて、次に売買注文の関数が残っていますが、かなり長くなってしまったので、次回に説明します。
 

 

 

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



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


----------------------注意----------------------
 このプログは半角のスペースが認識されない為、コードを見易くするために全角で書いている場合があります。
 実際にプログラムにコードを書くときは、コピー&ペーストせずに半角で書いて行って下さい。
| 小松 | MetaTrader4 プログラム初級編 | 20:07 | comments(0) | - |









     12
3456789
10111213141516
17181920212223
24252627282930
31      
<< March 2019 >>



このページの先頭へ