(C) 2011 amenbo the 3rd 擬似トレード提案 ( その 1) MT4/5 のストレテジー テスターのバックテスト機能は非常に強力ですが 幾つか不満があ ります その一つは 今表示されているリアルチャート上で EA を試したらどうなるかが良 く判らないことです アメンボが以前気に入

Similar documents
スクリプトの 動 作 確 認 1.コード my_script_01.mq4 確 認 する 関 数 Comment,Print,Alert,MessageBox FileName=script_01.mq4 #include <WinUser32.mqh> MessageBox 用 #property

(C) 2011 amenbo the 3rd New MQL4(Build 600 以降 ); 基礎 ( その 1) インディケータを表示する アメンボです New_MQL4 では MQL5 類似の OOP(Object-oriented programming) が採用され

目次 : 1. 本稿の概要 P02 (1) 本稿で実現する システム図 (2) 本稿の記載範囲 (3) 添付プログラムの組合せと基本構成 2. 添付プログラムによる動作例 P05 (1) セット1の使い方 (2) セット2の使い方 3. 添付プログラムのコード詳細 P19 (1) セット1 (2)

(C) 2011 amenbo the 3rd MQL5; 翻訳まとめ OnBookEvent() の使い方 他 ( その 1) 翻訳のみ実施 本稿の翻訳対象は OnInit() OnDeinit() OnTimer() OnBookEvent() 4 関数です 注意 ; 本資

(C) 2011 amenbo the 3rd New MQL4(Build 600 以降 ); 基礎 ( その 2)OnTimer() を使う アメンボです New_MQL4 の特徴とはなんでしょう? 極論を言うと MQL5 から受け継いだ OOP つまり On***() 関

スライド 1

[ ニュース ] タブ内容をチャート上に表示する amenbo the 3rd アメンボです 本稿では 前稿 ( ) で投稿した ListView_f.dll の応用を報告します [ ニュース ] タブの内容を読取って チャート上に表示させることを考

スライド 1

2. 結 果 の 画 面 テキスト(オブジェクト)を 表 示 する;OBJ_LABEL を 使 う 1.コード テキストを 表 示 する OBJ_LABEL は 表 示 位 置 の 指 定 に XY 座 標 (ピクセル); 左 上 が 原 点 を 使 う int init() ObjectCreat

2.Win32API によるファイル アクセス 本稿では 読み書きするデータは テキスト ( 文字列 ) との前提で解説します ( 絶対パス指定による任意の場所のファイル アクセスを目指します ) (1) 疑問? user 32.dll はどこにある? と思った方 アメンボ以外にいませんか?? そう

1. イベント ハンドリング関数とトリガ 一覧 (MQL5 との比較 ) On****() 形式のハンドリング関数のこと (C) 2011 amenbo the 3rd New_MQL4 で使用可能な ハンドリング関数 を MQL5 と比較しながら 使用方法を解説します 機能サホ ート New MQ

1 章 : 基礎知識 MQL4 では C++ 言語で作成した DLL( ダイナミック リンク ライブラリ ) をインポートして すなわち DLL 中の関数を呼出すことで機能拡張することができます 本稿では C 言語および C++ 言語の基礎的 ( 初歩的 ) な知識のみを前提として DLL の開発方

PowerPoint プレゼンテーション

Win32API;EA にブレーク ポイントを設定する amenbo the 3rd アメンボです EA のデバッグ時に ブレーク ポイント を設定できたら良いと思ったことはありませんか? MT5 には存在する (?) 様ですが MT4 では専用機能が見つかりません

II III I ~ 2 ~

中堅中小企業向け秘密保持マニュアル

- 2 -


1 (1) (2)

EA プロバイダーマニュアル

MT4( メタトレーダー 4) による売買シグナル

1. On****() ハンドリング関数(MQL5 との比較 ) New_MQL4 で使用可能な ハンドリング関数 を MQL5 と比較しながら 使用方法を解説します 機能サホ ート New MQL4 のサホ ート範囲 確認 EA Indicator Script ハント リンク 関数 イヘ ント

Microsoft PowerPoint 横浜MT4.pptx

バックテスト機能マニュアル

[ 操作履歴 ] タブ内容をリアルタイムでモニターする amenbo the 3rd アメンボです 本稿では MT4 システム操作履歴ログ を監視する一手法を紹介します ( [ 操作履歴 ] タブの内容をリアルタイムで読取ることで監視します ) 既に気が付いている諸兄

はじめに 免責事項 本書およびサンプルプログラムに基づく行為の結果発生した障害 損失などについて 著者および出版社は一切の責任を負いません 本書に記載されている URLなどは 予告なく変更される場合があります 本書に記載されている会社名 製品名は それぞれ各社の商標および登録商標です MetaTra

I II III 28 29

第 5 章インディケータとテンプレート MetaTrader4 に標準装備されているインディケータの使い方 ここまでの作業で MetaTrader4 の基本的なチャート操作についてはマスターできたと思います ここからは MetaTrader4 に標準装備されている インディケータ という便利なテクニ

生活設計レジメ

44 4 I (1) ( ) (10 15 ) ( 17 ) ( 3 1 ) (2)


Microsoft PowerPoint - kougi2.ppt

目次 第 1 章 Android アプリのインストール ログイン 1. Google Play からインストール 2. 取引口座へログイン 3. デモ口座の作成 第 2 章メイン画面の使用方法 1. メイン画面 2. メニュー画面一覧 3. 気配値画面の使用方法 4. 通貨ペアの追加 削除 5. チ

模擬試験問題(第1章~第3章)

スライド 1

STARTプログラム.indd

PowerPoint プレゼンテーション

IBIS

Java言語 第1回

SILAND.JP テンプレート集

外為ファイネストMT4マニュアル

無料で多機能な OSS の ETL ツール Kettle を使ってみよう! 情報政策課技術職員金森浩治 1. はじめにデータ処理を行うにあたって非常に便利なツール ETL 本稿では OSS の ETL Kettle の機能とその使用方法を紹介します 2. 用語説明 2.1 OSS とは? OSS と

1. イベント ハンドリング関数とトリガ 一覧 ( 現状の理解 ) 表 1; 現時点での理解範囲で 全体と一応解説済みのものを整理してみます EA;ExpertAdviser Indicator Script ハント リンク 関数イヘ ント トリカ とモート 別関数使用 OrderSend 関数内発

無線LAN JRL-710/720シリーズ ファームウェアバージョンアップマニュアル 第2.1版

API 連携方式 外部 DLL の呼び出し宣言 外部 DLL の呼び出し宣言のサンプルコード (Microsoft Visual C#.NET の場合 ) プログラムコードの先頭で using System.Runtime.InteropServices; が必要 クラスの内部に以下のような外部 D

大阪工業大学 授業アンケートシステム 教員側画面操作説明


(個別のテーマ) 医療機器の使用に関連した医療事故

(個別のテーマ) 放射線検査に関連した医療事故

(個別のテーマ) 薬剤に関連した医療事故

(個別のテーマ) 医療処置に関連した医療事故


2

インストール版LION FX チャート説明書

無料テクニカル分析ツール使いこなし術【ウルトラチャート対応版】

目次. ランキングを確認する -. 安全管理画面をひらく -. ランキングを確認する. 安全運転評価を確認する -. 安全運転評価画面をひらく -. 検索条件を設定する -. 安全運転評価を確認する --. トリップ一覧 --. 速度グラフ --. 運転評価 --. 運転情報 --. 危険挙動情報.

目次 第一章 インストールと製品登録 1.1 インストール & ライセンス認証 3 第二章 製品活用 2.1 パワーポイントを DVD に焼く パワーポイントをブルーレイに焼く パワーポイントをビデオに焼く 13 よくある質問 16

トレードステーション チャート分析使いこなしガイド

JavaプログラミングⅠ

MT4インストールガイド

スライド 1

Transcription:

擬似トレード提案 ( その 1) MT4/5 のストレテジー テスターのバックテスト機能は非常に強力ですが 幾つか不満があ ります その一つは 今表示されているリアルチャート上で EA を試したらどうなるかが良 く判らないことです アメンボが以前気に入っていた別のシステムでは バックテスト機能は非力でしたが リア ルチャート上でのストラテジー テスト機能があり これは結構重宝していました 要は リアルチャート上で有効でないストラテジー (EA) を いくらバックテストしたとこ ろで意味が無いわけですので 1 先ず リアルチャート上で有効かを試し 2 有効だったら バックテストを実施して詳しく調べる と 言う手順をとっていました そこでアメンボは 下記の手順で MT4 用のツール を作成 提案することにしました < 何れもリアルチャート上で実施 > (1) 全く擬似的なトレードで 資産カーブを描画する 1 大雑把な手順の確立 本稿 擬似トレード提案 ( その 1) 2 いくつか EA を試してみる ( および玉成 ) 次回以降 (2) デモトレードで 資産カーブを描画する 次次回以降 (1) と (2) の違いは以下 (1) は リアルチャート上の過去のチャート部分でも資産カーブを描画します ( 過去のチャート部分に対してはバックテストと同じ ) (2) は 新規足に対して資産カーブを描画します アメンボは MQL 言語は勉強中のレベルですので コード記述がエレガントではなく ゴチャついていることをご容赦ください 少しづつ MQL 言語に慣れていくつもりです また本稿では 前回投稿した DLL(shared_memory.dll) を利用しています 使用方法は 投稿済み原稿 shared_memory.dll の使い方 を参照ください ----------------------------------------------------------------------------------- 目次 : 1. 擬似トレード実施 ( システム ) 概要 2 頁 (1) システム (2) 表示例 1( 売買シグナルと資産カーブ ) (3) 表示例 2( その他の組合せ表示 ) 2.MQL4 コード内容一覧 4 頁 (1) 売買タイミング発生 <インテ ィケータ> my_timing.mq4 (2) 売買シグナル発生 <EA> my_ea.mq4 (3) 売買シグナル矢印表示 <インテ ィケータ> my_arrow.mq4 (4) 資産カーブ描画 <インテ ィケータ> my_balance.mq4 (5) 含み損益カーブ描画 <インテ ィケータ> my_fpl.mq4 (6) 売買シグナルパルス表示 <インテ ィケータ> my_signal_a.mq4 (7) 売買タイミング表示 <インテ ィケータ> my_signal.mq4 1/15

1. 擬似トレード実施 ( システム ) 概要 (1) システム MQL コードとデータの流れ図 売買タイミング発生 my_timing.mq4 < インテ ィケータ > タイミング原データ 売買シグナル矢印表示 my_arrow.mq4 < インテ ィケータ > 資産カーブ描画 my_balance.mq4 < インテ ィケータ > 含み損益カーブ描画 my_fpl.mq4 < インテ ィケータ > 共有メモリ DLL shared_memory.dll 配列 b[] 配列 a[] 売買タイミング表示 my_signal.mq4 < インテ ィケータ > 売買シグナル発生 my_ea.mq4 <EA;expert adviser> タイミングを加工し シグナルを発生する 売買シグナルパルス表示 my_timing.mq4 < インテ ィケータ > 1 売買タイミング発生 my_timing.mq4 ;< インディケータ> ema( 長と短 ) のクロスを利用して売買タイミングを発生する ema( 短 ) が ema( 長 ) をクロスアップすれば 買い ema( 長 ) が ema( 短 ) をクロスダウンすれば 売り を基本とする ただし 近すぎるタイミングは無視することとした ( 詳細は MQL コードを参照 ) タイミングのデータは 共有メモリの配列 b[] に書き込む ( 買い +1 売り -1 とする) 今回は システム検討用にダミーのデータを発生用として設定した ( 収益は無視 ) 2 売買シグナル発生 my_signal.mq4 ;<EA> 共有メモリ配列 b[] からタイミングデータを読み出して 成行売買に使える 買い 売り または 売り 買い の売買シグナルに変換 ( 買い 買い や 売り 売り のデータは削除する ) 変換後のデータは 売買シグナルとして 共有メモリ配列 a[] に格納する 上記と同様に システム検討用のダミーとして設定 他のインディケータの内容は それぞれの MQL コードを参照ください 複雑な操作は行っていません また開発中のため 厳密な検討が抜けていること コードがエレガントでないことはご容赦ください 全ての コード はダウンロード用に設定しています 2/15

(2) 表示例 1( 売買シグナルと資産カーブ ) 1 上側のチャート ; 緑色の矢印; 買いシグナル 赤色の矢印; 売りシグナル 2 下側のチャート ; 上記のシグナルで成行売買した場合の 資産カーブ 3 使用コード ; my_timing.mq4 my_ea.mq4 my_arrow.mq4 my_balance.mq4 (3) 表示例 2( その他の組合せ表示 ) 中段に 含み損益 を表示させた場合使用コード ; my_timing.mq4 my_ea.mq4 my_arrow.mq4 my_balance.mq4 my_fpl.mq4 を追加 3/15

売買タイミング と 売買シグナル の違いを示す 中段が 売買タイミング 下段が加工後の 売買シグナル ema( 長短 ) のクロスで売買シグナル矢印を表示 ただしクロス点から近すぎる次のクロス点は無視している 同時に 買い と 売り が交互に来るように加工している 4/15

2.MQL4 コード内容一覧 (1) 売買タイミング発生 < インテ ィケータ > my_timing.mq4 < インディケータ > 移動平均を 2 本引く : 長短 (EMA) CrossUp Crossown 信号を共有メモリに書き込む #import "shared_memory.dll" double set_a(); double write_a(double,int); double read_a(int); double close_a(); double set_b(); double write_b(double,int); double read_b(int); double close_b(); #import #property show_inputs #property indicator_chart_window #property indicator_buffers 2 #property indicator_color1 Magenta #property indicator_color2 Blue 設定時にインプット タブを表示する チャート上に描画する インディケータは2 個 長 ema はピンク 単 ema は青 指標バッファ double Buf0[]; double Buf1[]; 外部パラメータ extern int Long_Period = 13; extern int Short_Period = 8; extern int shift_es = 0; 初期化 int init() set_a(); set_b(); 指標バッファ割り当て SetIndexBuffer(0,Buf0); SetIndexBuffer(1,Buf1); 表示する指標数 IndicatorBuffers(2); for(int k=0;k<=1000;k++) write_a(0.0,k); write_b(0.0,k); 移動平均の表示 右シフト 数 いくつ表示するかを指定 int deinit() 5/15

close_a(); close_b(); スタート関数 int start() for(int k=0;k<=1000;k++) write_a(0.0,k); write_b(0.0,k); int limit = Bars-IndicatorCounted(); for(int i=limit-1;i>=0;i--) Buf0[i]=iMA(NULL,0,Long_Period,0,MODE_EMA,PRICE_CLOSE,i); 長 13ema の計算 Buf1[i]=iMA(NULL,0,Short_Period,0,MODE_EMA,PRICE_CLOSE,i); 単 8ema の計算 for(int j=0;j<=1000;j++) CrossUp if(buf1[j]>buf0[j] && Buf1[j+1]>Buf0[j+1] && Buf1[j+2]<Buf0[j+2] && Buf1[j+3]<Buf0[j+3] && Buf1[j+20]<Buf0[j+20]) write_a(+1.0,j); write_b(+1.0,j); else if(buf1[j]<buf0[j] && Buf1[j+1]<Buf0[j+1] && Buf1[j+2]>Buf0[j+2] && Buf1[j+3]>Buf0[j+3] && Buf1[j+20]>Buf0[j+20]) write_a(-1.0,j); write_b(-1.0,j); else write_a(0.0,j); write_b(0.0,j); 6/15

(2) 売買シグナル発生 <EA> my_ea.mq4 本コードの仕様と課題 ; <EA> 売買シグナルを加工して 売買タイミングを抽出する ------------------------------------- #import "shared_memory.dll" double set_a(); double write_a(double,int); double read_a(int); double close_a(); double set_b(); double write_b(double,int); double read_b(int); double close_b(); #import ------ int open_position; -------------------------------------- int init() set_a(); set_b(); ------------------------------------- int deinit() close_a(); close_b(); ------------------------------------- int start() Print("start(): spread= ",spread,": Bars=",Bars); for(int i=bars-1000;i>=0;i--)ok for(int i=0;i<=bars-1000;i++)ok for(int k=1000;k>=0;k--) write_a(0.0,k); for(int i=1000;i>=0;i--) if(open_position==0) if(read_b(i)==+1.0) 7/15

Up_arrow write_a(+1.0,i); open_position=1; else if(read_b(i)==-1.0) Down_arrow write_a(-1.0,i); open_position=-1; else if(read_b(i)==0.0) write_a(0.0,i); if(open_position==1) if(read_b(i)==-1.0) write_a(-1.0,i); else if(read_b(i)==+1.0) write_a(0.0,i); open_position=1; else if(read_b(i)==0.0) write_a(0.0,i); open_position=1; if(open_position==-1) if(read_b(i)==1.0) write_a(+1.0,i); else if(read_b(i)==-1.0) write_a(0.0,i); open_position=-1; else if(read_b(i)==0.0) write_a(0.0,i); open_position=-1; 8/15

(3) 売買シグナル矢印表示 < インテ ィケータ > my_arrow.mq4 <インディケータ> 売買タイミングを矢印で示す ------------------------------------- #import "shared_memory.dll" double set_a(); double write_a(double,int); double read_a(int); double close_a(); #import ------ #property indicator_chart_window チャート上に描画する -------------------------------------- int init() set_a(); ------------------------------------- int deinit() close_a(); ObjectsDeleteAll(0); ------------------------------------- int start() ObjectsDeleteAll(0); int limit = Bars-IndicatorCounted(); for(int i=bars-1000;i>=0;i--)ok for(int i=0;i<=bars-1000;i++)ok int up_c=1,down_c=1; for(int i=1000;i>=0;i--)ok if(read_a(i)==+1.0) Up_arrow string up_a=up_c; ObjectCreate("up_arrow"+up_a,OBJ_ARROW,0,Time[i],(Low[i]-0.02)); ObjectCreate("up_arrow"+up_a,OBJ_ARROW,0,0,0); 9/15

ObjectSet("up_arrow"+up_a,OBJPROP_ARROWCODE,SYMBOL_ARROWUP); ObjectSet("up_arrow"+up_a,OBJPROP_COLOR,Green); ObjectSet("up_arrow"+up_a,OBJPROP_WIDTH,2); ObjectMove("up_arrow"+up_a,0,Time[i],(Low[i]-0.02)); up_c=up_c+1; else if(read_a(i)==-1.0) Down_arrow string down_a=down_c; ObjectCreate("down_arrow"+down_a,OBJ_ARROW,0,Time[i],(High[i]+0.04)); ObjectCreate("down_arrow"+down_a,OBJ_ARROW,0,0,0); ObjectSet("down_arrow"+down_a,OBJPROP_ARROWCODE,SYMBOL_ARROWDOWN); ObjectSet("down_arrow"+down_a,OBJPROP_COLOR,Red); ObjectSet("down_arrow"+down_a,OBJPROP_WIDTH,2); ObjectMove("down_arrow"+down_a,0,Time[i],(High[i]+0.02)); down_c=down_c+1; else if(read_a(i)==0.0) (4) 資産カーブ描画 < インテ ィケータ > my_balance.mq4 < インディケータ > 資産カーブ描画 ------------------------------------- #import "shared_memory.dll" double set_a(); double write_a(double,int); double read_a(int); double close_a(); #import ------ #property indicator_separate_window #property indicator_maximum 501000 #property indicator_minimum 495000 #property indicator_buffers 2 ------ double BALANCE_C[]; double ZERO_LINE[]; double balance,profit,equity,spread,ask_,bid_; double lots=1.0; int open_position; -------------------------------------- int init() set_a(); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,Blue); SetIndexBuffer(0,BALANCE_C); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,Black); 10/15

SetIndexBuffer(1,ZERO_LINE); IndicatorBuffers(2); BALANCE_C[801]=AccountBalance(); なぜかここではダメ profit=0.0; ------------------------------------- int deinit() close_a(); Comment(""); ------------------------------------- int start() int limit = Bars-IndicatorCounted(); spread=ask-bid; spread=0.02; Print("start(): spread= ",spread,": Bars=",Bars); BALANCE_C[1001]=AccountBalance(); for(int i=bars-1000;i>=0;i--)ok for(int i=0;i<=bars-1000;i++)ok for(int i=1000;i>=0;i--)ok if(open_position==0) BALANCE_C[i]=BALANCE_C[i+1]; if(read_a(i)==+1.0) ASK_=iClose(NULL,0,i)+spread; open_position=1; else if(read_a(i)==-1.0) BID_=iClose(NULL,0,i); open_position=-1; else if(read_a(i)==0.0) if(open_position==1) if(read_a(i)!=-1.0) BALANCE_C[i]=BALANCE_C[i+1]; else if(read_a(i)==-1.0) 11/15

BALANCE_C[i]=BALANCE_C[i+1]+(iClose(NULL,0,i)-ASK_)*10000; ASK_=0.0; if(open_position==-1) if(read_a(i)!=1.0) BALANCE_C[i]=BALANCE_C[i+1]; else if(read_a(i)==1.0) BALANCE_C[i]=BALANCE_C[i+1]+(BID_-(iClose(NULL,0,i)+spread))*10000; BID_=0.0; (5) 含み損益カーブ描画 < インテ ィケータ > my_fpl.mq4 < インディケータ > 共有メモリを読み込んで データを表示する ------------------------------------- #import "shared_memory.dll" double set_a(); double write_a(double,int); double read_a(int); double close_a(); #import ------ #property indicator_separate_window #property indicator_buffers 2 ------ double PROFIT_C[]; double ZERO_LINE[]; double balance,profit,equity,spread,ask_,bid_; double lots=1.0; int open_position; -------------------------------------- int init() set_a(); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,Blue); SetIndexBuffer(0,PROFIT_C); SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1,Black); SetIndexBuffer(1,ZERO_LINE); IndicatorBuffers(2); profit=0.0; 12/15

------------------------------------- int deinit() close_a(); Comment(""); ------------------------------------- int start() spread=ask-bid; spread=0.02; for(int i=bars-1000;i>=0;i--)ok for(int i=0;i<=bars-1000;i++)ok for(int i=1000;i>=0;i--)ok ZERO_LINE[i]=0.0; if(open_position==0) PROFIT_C[i]=0.0; if(read_a(i)==+1.0) ASK_=iClose(NULL,0,i)+spread; open_position=1; else if(read_a(i)==-1.0) BID_=iClose(NULL,0,i); open_position=-1; if(open_position==1) if(read_a(i)!=-1.0) PROFIT_C[i]=(iClose(NULL,0,i)-ASK_)*10000; else if(read_a(i)==-1.0) ASK_=0.0; if(open_position==-1) if(read_a(i)!=1.0) PROFIT_C[i]=(BID_-(iClose(NULL,0,i)+spread))*10000; else if(read_a(i)==1.0) 13/15

BID_=0.0; (6) 売買シグナルパルス表示 < インテ ィケータ > my_signal_a.mq4 < インディケータ > 共有メモリ a[] を読み込んで データを表示する #import "shared_memory.dll" double set_a(); double write_a(double,int); double read_a(int); double close_a(); #property indicator_separate_window #property indicator_buffers 1 double MEMORY_D[1000]; int init() set_a(); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,Blue); SetIndexBuffer(0,MEMORY_D); IndicatorBuffers(1); int deinit() close_a(); int start() int limit = Bars-IndicatorCounted(); for(int k=0;k<=1000;k++) MEMORY_D[k]=read_a(k); 14/15

(7) 売買タイミング表示 < インテ ィケータ > my_signal.mq4 < インディケータ > 共有メモリ b[] を読み込んで データを表示する #import "shared_memory.dll" double set_b(); double write_b(double,int); double read_b(int); double close_b(); #import #property indicator_separate_window #property indicator_buffers 1 double MEMORY_D[1000]; int init() set_b(); SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1,Blue); SetIndexBuffer(0,MEMORY_D); IndicatorBuffers(1); int deinit() close_b(); int start() int limit = Bars-IndicatorCounted(); for(int k=0;k<=1000;k++) MEMORY_D[k]=read_b(k); 以 上 15/15