無料ブログはココログ

儲かるEAを作るぞプロジェクト準備編

2012年1月 4日 (水)

MetaTrader 変数の定義など

赤字の部分はいわゆるグローバルな変数。
すべての関数から参照可能。

サンプルのEAを実行するとチャート上に定義したa~fの変数が表示されます。
int init()に書いているので即実行されます。
datetime型は範囲が1970/01/01 00:00 - 2037/12/31 23:59なので意図した結果になりませんが1970を足した値になるようです。

staticはC言語と同じ静的変数。

int 符号付の整数、範囲-2147483648~2147483647
double 符号付の不動小数点数、範囲-1.7e-308~1.7e308
bool 真偽、範囲 trueまたはfalse
string 文字列、255文字までの文字列
datetime 日付と時刻を表す。範囲 1970/01/01 00:00 - 2037/12/31 23:59
color ラインなどの色を表す。範囲 0x000000 - 0xffffff

ちなみに配列は

int ary[10];
のように定義する。

 

以下サンプル

#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

//--- input parameters

extern int ExtParam1;
extern int ExtParam2;


int Param1;


int Param2;






//+------------------------------------------------------------------+

//| expert initialization function |


//+------------------------------------------------------------------+


int init()
{


int a=100;


double b=123.456;


bool c=true;


string d="hello world";


datetime e=D'1972.07.17 12:34';


datetime e2=D'2012.01.03 12:34';


color f = 0x010101;


static int g=100;

Comment( a,"\n",
b,"\n",


c,"\n",


d,"\n",


TimeToStr(e),"\n",


TimeToStr(e2-e),"\n",


f,"\n");

//----
//----


return(0);


}


//+------------------------------------------------------------------+


//| expert deinitialization function |


//+------------------------------------------------------------------+


int deinit()


{


//----


//----


return(0);


}


//+------------------------------------------------------------------+


//| expert start function |


//+------------------------------------------------------------------+


int start()


{


//----

//----
return(0);


}


//+------------------------------------------------------------------+

2012年1月 2日 (月)

iRSIの使い方(MetaTrader)

MetaTraderメモ

テクニカル指標iRSIが80以上になったらsell、20以下になったらbuyの注文を出すサンプルです。
太字の部分がiRSI関数を呼び出している部分になります。
iRSIの詳しい使い方は

http://www.metasys-seeker.net/MQL4_Reference_ver1/MQL4_Reference_Contents.html

あたりを参照してください。

 

extern int MAGIC = 123456;
extern int Slippage = 3;
extern double Lots = 0.1;

extern int TS = 10;        // TradingStop
extern int LC = 10;        // LossCut

int ticket;

int start()
{
    string sStatus;

    if(Bars<100 || IsTradeAllowed()==false) return;

    int buy_position = 0;
    int sell_position = 0;

    for(int i=0; i<OrdersTotal(); i++)    {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;

        if(OrderMagicNumber() == MAGIC)    {
            if(OrderType() == OP_BUY)    {
                buy_position++;
            }
            if(OrderType() == OP_SELL)    {
                sell_position++;
            }
        }
    }

    if (buy_position==0) {
        if (iRSI(NULL,0,14,PRICE_CLOSE,0)<20) {
            ticket=OrderSend(Symbol(),OP_BUY,         // Symbol for trading.,Operation type.
                                    Lots,             // Number of lots.
                                    Ask,              // Preferred price of the trade.
                                    Slippage,         // Maximum price slippage for buy or sell orders.
                                    Ask-LC*Point,     // Stop loss level.
                                    Ask+TS*Point,     // Take profit level.
                                    "Buy Order ",     // Order comment text.
                                    MAGIC,0,Green);   // Order magic number.
                                                      // Order expiration time
                                                      // Color of the opening arrow on the chart.

            if (ticket<0) {
                Print("OrderSend Failed, Error No ",GetLastError());
            }
            return(0);
        }
    }

    if (sell_position==0) {
        if (iRSI(NULL,0,14,PRICE_CLOSE,0)>80) {
            ticket=OrderSend(Symbol(),OP_SELL,     // Symbol for trading.,Operation type.
                                    Lots,          // Number of lots.
                                    Bid,           // Preferred price of the trade.
                                    Slippage,      // Maximum price slippage for buy or sell orders.
                                    Bid+LC*Point,  // Stop loss level.
                                    Bid-TS*Point,  // Take profit level.
                                    "Sell Order ", // Order comment text.
                                    MAGIC,0,Red);  // Order magic number.
                                                   // Order expiration time
                                                   // Color of the opening arrow on the chart.

            if (ticket<0) {
                Print("OrderSend Failed, Error No ",GetLastError());
            }
            return(0);
        }
    }

   return(0);
}

2011年12月13日 (火)

EA作成(RVI)

RVI(Relative Vigor Index)を売買のシグナルとしたEAを作成。
口では説明しずらいので下図を参照されたし。

 

FX-RVI

青まるで囲まれた部分で売買と決済を行なう。
EURUSD、1日足、2011/6/1~2011/12/12の期間でバックテスト。
トータルではプラス(10%)であるが売買タイミングがワンテンポ遅れるようで優秀とは言いがたい。
儲かるEAは一日してならずですな。

作成したEAは、ここには貼り付けられないようなので後で自宅サーバーの方に簡単なアップローダー設置しておいておきます。

2011年12月 2日 (金)

通貨記号

あまり取引しない通貨記号のメモ

CHF・・・スイスフラン
GBP・・・英ポンド
DKK・・・デンマーククローネ
NOK・・・ノルウェイクローネ
SEK・・・スウェーデンクローナ
SGD・・・シンガポールドル
MXN・・・メキシコペソ
ZAR・・・南アフリカランド
CZR・・・チェココルナ
HUF・・・ハンガリーフォリント
PLN・・・ポーランドズウォティ
TRY・・・トルコリラ

2011年11月14日 (月)

為替レートをHTML化して利用する

出先で為替レートの確認したい場合が多々あるが、いちいちノートPCを出すのも面倒だしYahooファイナンスや無料のandroidアプリではたいていリアルタイムではない。

WindowsMobileの端末があればMetaTraderMobileが使えるのですべて解決なのだが、あいにくandroid携帯しかもっていないので簡単にリアルタイムで為替レートを確認することが出来ない。

そこで自宅サーバーを利用し、EAを使って為替レートを出先でも確認することが出来るようにMetaTraderから為替の値をファイル出力してHTML化することにした。

MetaTraderは以下のようなEAでUSDJPYとEURJPY、USDEURをファイル出力するようにする。

int start()
{
  int lasterror=0;

   double EURUSD_bid   =MarketInfo("EURUSDFXF",MODE_BID);
   double EURUSD_ask   =MarketInfo("EURUSDFXF",MODE_ASK);

   double EURJPY_bid   =MarketInfo("EURJPYFXF",MODE_BID);
   double EURJPY_ask   =MarketInfo("EURJPYFXF",MODE_ASK);

   double USDJPY_bid   =MarketInfo("USDJPYFXF",MODE_BID);
   double USDJPY_ask   =MarketInfo("USDJPYFXF",MODE_ASK);

   int handle=FileOpen("file.csv", FILE_CSV|FILE_WRITE, ';');

   if(handle>0) {
      FileWrite(handle, EURUSD_bid,EURUSD_ask, EURJPY_bid, EURJPY_ask, USDJPY_bid, USDJPY_ask,TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
      FileClose(handle);
   } 

  return(0);
}

file.csvとして./exparts/files/以下に出力されるので、/files/をファイル共有し自宅サーバーからcifsでマウント、SSを使ってHTML化することにした。

ただし、USDJPYのチャート上で動作させている為USDJPYに変化がないとデータが更新されないのが難点だ。

一応、最新の更新時間をTimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)で取得して表示させることにして良しとしておく。

2011年10月24日 (月)

儲かるEAを作るぞ計画 第一章

何個かEAを作成してきたが常勝するようなEAを作ることはなかなか難しい。
きっと市販されているEAや無償公開されているEAでも同様だろうと思う。

現在、運用しているEAは比較的成績がよく、ここ9月以降は結構利益をだしている。
利益を出しているといっても元金が少なく、一回の取引額が小さいので金額的にはたいしたことはない。10万円が15万円になるくらいの利益率である。

私的にはMetaTraderのEAで自動売買する上での最大の課題は急な価格変動にどう対応するかだと思っている。
ボックス相場や、ある程度どちらかにトレンドが発生している場合は利益をだせるのだが、急な変動時にそれまでの利益をほとんど持っていかれてしまうというサイクルの繰り返しになっている。
これをキャンセルできれば年間を通してプラス益になるだろうと思う。

現状のEAを具体的にいうとRSIとボリンジャーバンドを組み合わせたものを売買シグナルとし、RSIとボリンジャーバンドを組み合わせたもの、プラスStopLossを可変させるといったかたちで決済のタイミングをはかっている。

常々、相場は操作されていると思っているのでりまぐれはあるとしてもテクニカル分析だけでは資金力があるプロを相手にして為替相場では戦えないというのが実感である。

しかし悲観してばかりは居られない。
夢は不労である。

そこで”儲かるEAを作るぞプロジェクト”第一号として作成したEAはテクニカル分析は使用しないことにした。皆と同じ手法では駄目だ(本当かな?www)
コンセプトは「1回100円、1日100回」である。
順張りで漏れなく利益をかすめ取る。

MetaTraderのStrategyTesterは最短でも1分足単位でしかバックテストできず、今回作成したEAを試験はできない。
上記はデモ口座でテスト中であり、追って結果をお知らせしよう。

FXメタトレーダーで儲ける しろふくろうのスーパー投資術 (WINNER’S METHOD SERIES)

2011年9月23日 (金)

バックテストを行う

前回作成したEAを過去の為替データを下にEAのシミュレーションを行う。
MetaTraderの表示-Strategy Testerを起動してください。

今回は対象通貨USD,1時間足でバックテストをしてみました。

st001

こんな感じでテストが完了。
2011/1/1~2011/8/31のデータでバックテストをしてみました。
結果は

st002

見事な右肩下がり。
惨敗です。
実際のお金でやっていたらかなり痛い目を見た感じ。
詳細なレポートは

st003

のような感じで見られます。

この用にEAを作成したら過去のデータでシミュレーションを行い利益を出せる可能性のありEAかを確認することができます(未来に対しては分かりませんがある程度傾向をつかむことができる。)

大体雰囲気をつかむことができたでしょうか。
やはりそうは簡単にプロの参加するマーケットで勝つことはできません。
話によるとFXで利益を出している個人投資家は1割に満たないといわれます。
前章で作成したような単純なEAではFXは利益を出すことは絶対できません。
試行錯誤を繰り返し最良のアルゴリズムを生み出す必要があるのです。

2011年9月22日 (木)

簡単なEAを作ってみる

今回は簡単はEAを実際に作成してみます。
簡単なと言っても一応売買するようなものを作ってみましょう。
今回作成するものはこんな感じです。

テクニカル分析をした結果、ある条件を満たせばbuyまたはsell注文を出す。
では早速作ってみます。

extern int MAGIC = 1000100;
extern int Slippage = 3;
extern double Lots = 0.1;
extern int TrailingStop = 10;
extern int Losscut = 10;
int start()
{
    string sStatus;
    if(Bars<100 || IsTradeAllowed()==false) return;
    int buy_position = 0;
    int sell_position = 0;
    for(int i=0; i<OrdersTotal(); i++)    {
        if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == false) break;
        if(OrderMagicNumber() == MAGIC)    {
            if(OrderType() == OP_BUY)    {
                buy_position++;
            }

            if(OrderType() == OP_SELL)    {
                sell_position++;
            }
        }
    }

    if (buy_position==0) {
        if (iRSI(NULL,0,14,PRICE_CLOSE,0)<20) {
            int res_buy_order=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,Ask-Losscut*Point,Ask+TrailingStop*Point,"Buy Order ",MAGIC,0,Green);
            if (res_buy_order<0) {
                Print("OrderSend failed, error no ",GetLastError());
            }
            return(0);
        }
    }
    if (sell_position==0) {
        if (iRSI(NULL,0,14,PRICE_CLOSE,0)>80) {
            int res_sell_order=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+Losscut*Point,Bid-TrailingStop*Point,"Sell Order ",MAGIC,0,Red);
            if (res_sell_order<0) {
                Print("OrderSend failed, error no ",GetLastError());
            }
            return(0);
        }
    }
return(0);
}

簡単に解説すると、前半のfor文のところで現在のポジションをチェック。
中盤以降はそれぞれ
RSIが20以下でbuy
RSIが80以上でsell
最大ポジションはそれぞれ1つ。
一回の注文は0.1。
10pipsでそれぞれ決済と損切り注文を出しています。

コンパイルしてエラーがなければデモ口座で実際に動かして見ましょう。

2011年9月 8日 (木)

EA作成の流れ

作成EAでいきなり実際のお金で売買するのは無謀です。
まずはデモ口座などを作りバーチャルな売買をしましょう。
次章以降の流れは大体下記のような感じになります。

1.デモ口座を作成する

いろいろなFXディーラーがありますがデモ口座は無料で作成できるのでオンラインサインアップをしデモ口座を作成してください。

私はFOREX.comを利用しています。
こちらはデモ口座を作ることができます。
他にもFXDDなどMetaTraderが使用できるFXディーラーはたくさんありますので自分にあった業者を選択してください。

2.MetaTraderの大体の使い方をデモ口座で習得しましょう

実際のお金と思って裁量、指値などで売買しMetaTraderの操作になれて下さい。

3.売買プログラムを作成する

実際にEAで売買プログラムを作成すます

4.バックテスト

過去のデータを元に売買プログラムのテストをします

5.取引

デモ口座を用いて売買プログラムを稼動します

6.本物のお金で

MetaTrader用の口座を開設し実際のお金で取引を開始する

次章からはいよいよEA作成に入りたいと思います。

2011年9月 1日 (木)

MetaTraderでシストレ

まずはじめに、ここに書かれていることを実践して損をしても私に文句をいわないでください(笑)
FXの自動売買で儲けようという夢のプロジェクトですが、ここでは自動売買ツールとしてMetaTraderを使用します。
MetaTraderにはEAという自動で処理をするツールが組み込まれておりMQL言語で書かれたプログラムに沿って売買などを行うことができます。
私のホームページのトップ画面に表示されているイメージやUSDの値やRSI等もEAで出力された結果を表示しています。
とは言え、そんなに簡単に利益を出せるEAを作成することは難しいです。
本プロジェクトでは簡単なEAから作成し、最終的に利益を出せるEAを作成することを目指します。

MQL言語の言語形態はC言語ににていますのでプログラミングに覚えのある方はぜひチャレンジしてみては如何でしょうか?

2016年1月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31