ebook:ファジー推論プログラミング、
GitHub:プログラミング用コード、
アップデートしました。
バージョンは2.01です。
ebook:ファジー推論プログラミングの内容一部修正、加筆しました。
2018年12月02日
手術、入院とか、筆者のソフトウエアーの無知とかで報告が遅れてしまいました。
アップデート前のFuzzyライブラリーがようやく見つかり、インジケータの検証を再開できました。
運良くFuzzyライブラリーが保存してありました。
「ソフトウエアの壊れやすい性質を知る」ことがソフトウエア開発の成功には大切だという事ですね。
MT5アップデートかで、突然インジケータが動かなくなった時の対処方法ですが、
*.ex5実行ファイルにバグが入ったことが考えられます。
対処方法は、まず*.ex5ファイルを削除します。
そして*.mq5ファイルを再度コンパイルします。
MT5は再起動します。
そのあと*.ex5ファイルをチャートにアタッチします。
これでインジケータは直ります。
*.mq5ファイルにバグが入っていることも考えられときは、*.mq5ファイルを書き直す必要があります。
2018年10月14日
FuzzyRviOsc01インジケータに
Internal Errorが出て動作不良になっています。
ファジールールの論理計算が上手くいかなくなりました。
どうやら昨日のMT5のバージョンアップで
Fuzzyライブラリーにバグが入っていたようです。
新しい情報が入りましたらお知らせします。
より効果的に利益を上げる
FuzzyEArvi.mq5の修正方法
簡単な修正で済みますので、ぜひ試してください。
//修正する値
インプットのストップレベルを20にします。
インプットのテイクプロフィットを1000にします。
input int Stop=20;
input int TakeProfit=1000;
//修正する値
インプットのbuylevレベルを0.15にます。
インプットのsellevレベルを-0.01にします。
input double buylev = 0.15
input double selllev=-0.01;
//追加するコード
下記のコードを追加して買いポジション、売りポジションのクローズレベルを設定します。
ここでは0.0に設定しています。
input double buycloselev = 0.0;
input double sellcloselev=-0.0;
//修正するコード
//---entry signal calculate
/*
if(Buffer[2]<=buylev && Buffer[1]>buylev) Buy_sig=true;
if(Buffer[2]>=selllev && Buffer[1]<selllev)Sell_sig=true;
*/
以前のエントリールールを変更し下記のように設定します。
buylev以上で買いポジション、selllev以下で売りポジションをエントリ-します。
if(Buffer[1]>buylev) Buy_sig=true;
if(Buffer[1]<selllev)Sell_sig=true;
//修正するコード
//---exite signal calculate
/*
if( Buffer[2]>Buffer[1] && Buffer[3]>=Buffer[2]) BuyClose_sig =true;
if( Buffer[2]<Buffer[1] && Buffer[3]<=Buffer[2]) SellClose_sig=true;
*/
以前のクローズルールを変更し下記のように設定します。
buycloselev以下で買いジションをクローズ、sellcloselev以上で売りポジションをクローズします。
if( Buffer[1]<buycloselev ) BuyClose_sig =true;
if( Buffer[1]>sellcloselev) SellClose_sig=true;
変更は以上で終了です。
成行注文のプログラムと要求抽出
下記コードはシンプルなMQL5、買い成行注文スクリプトプログラムです。
コンパイルして、チャートにクリック&ドロップすると成行注文します。
#include <trade rade.mqh>
void OnStart()
{
MqlTick mqtick;
SymbolInfoTick(_Symbol,mqtick);
double p = NormalizeDouble(mqtick.ask,_Digits);
CTrade m_trade;
m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,0.01,p,0,0,"");
}
ーーーーーーーーーーーーーーーーーーーーーー
下記コードは間違い。
void OnStart()
{
MqlTick mqtick;
SymbolInfoTick(_Symbol,mqtick);
double p = NormalizeDouble(mqtick.ask,_Digits);
CTrade m_trade;
m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,0.01,p,0,0,"");
}
要求抽出(成行注文スクリプト)01
1、#include <trade rade.mqh>の記述が必要、CTrade、m_tradeのコンパイルエラーが3つ出る。
ーーーーーーーーーーーーーーーーーーーーーー
下記コードは間違い。
#include <trade rade.mqh>
void OnStart()
{
MqlTick mqtick;
double p = NormalizeDouble(mqtick.ask,_Digits);
CTrade m_trade;
m_trade.PositionOpen(Symbol(),ORDER_TYPE_BUY,0.01,p,0,0,"");
}
要求抽出(成行注文スクリプト)02
1、SymbolInfoTick(_Symbol,mqtick);が必要、mqtickが初期化されていないので、ワーニングが1つ出る。
2、買い成行注文は発注可能。
ーーーーーーーーーーーーーーーーーーーーーー
要求抽出(成行注文スクリプト)03
1、標準ライブラリー/トレードクラス/Trade/PositionOpenメソッドを理解する必要がある。
bool PositionOpen(
const string symbol, // シンボル
ENUM_ORDER_TYPE order_type, // 注文を出すための注文の種類
double volume, // ポジションボリューム
double price, // 実行価格
double sl, // 決済逆指値
double tp, // 決済指値
const string comment="" // コメント
)
ーーーーーーーーーーーーーーーーーーーーーー
要求抽出(成行注文スクリプト)04
1、構造体MqlTick を理解する必要がある。
struct MqlTick
{
datetime time; // 最新の価格更新の時間
double bid; // 現在のBid価格
double ask; // 現在のAsk価格
double last; // 最後の取引の現在価格(Last)
ulong volume; // 現在のLast価格の数量
long time_msc; // ミリ秒単位の最新の価格更新の時間
uint flags // ティックフラグ
};
最新価格を保存する構造体ーーーーーーーーーーーーーーーーーーーーーー
要求抽出(成行注文スクリプト)05
1、関数 SymbolInfoTick()を理解する必要がある。
bool SymbolInfoTick(
string symbol, // 銘柄名
MqlTick& tick // 構造体への参照
);
指定されたシンボルの現在の価格を MqlTick 型の変数として返す。ーーーーーーーーーーーーーーーーーーーーーー
要求抽出(成行注文スクリプト)06
1、関数 NormalizeDouble()を理解する必要がある。
double NormalizeDouble(
double value, // 正規化数
int digits // 小数点以下の桁数
);
浮動小数点数を指定された精度に丸める。
スクリプトで買い注文のプログラムを作成
スクリプトで買い注文のプログラムを作りたいとします。
標準ライブラリーの CTradeクラスを使って作るにはどうすれば良いいでしょうか?
電子書籍「ファジー推論プログラミング:やさしいMQL5」
ではPositionOpenメソッドを使用していますが、実はもっと簡単になります。
まず、MQL5リファレンス>標準ライブラリー >トレードクラス>CTradeでCTradeクラスを調査します。
CTradeクラスの注文メソッドには、
(1)OrderOpen()
(2)PositionOpen()
(3)Buy() があります。
注文メソッドの違いを調べる必要があります。
それぞれのメソッドの引数、戻り値、どういうときに使うか、および仲間のメソッドを調べます。
どういうときに使うかは、メソッドのアルゴリズムのデザインパターンから推理します。
デザインパターンには様々なものがありますが、
しかし最低でも、
1、名前
2、問題
3、解法
の形式で、メソッドの分析が必要になります。
(1)OrderOpen()
このメソッドの仲間には
OrderModify、OrderDelete
があります。
これらは未決注文の操作を目的としています。
(2)PositionOpen()
このメソッドの仲間には
PositionModify、PositionClose、PositionCloseParshal、
PositionCloseBy があります。
これらはポジションの操作を目的としています。
引数の値の入力が必要です。
(3)Buy() このメソッドの仲間には
BuyLimit、BuyStop、Sell、SellLimit、SellStop
があります。
指定されたパラメータで注文します。
引数の値はデフォルトで指定されています。
以上から
今回は成行注文だけなので、
買い注文としてはBuy()メソッドを使用するこが良いことになります。
Buy()メソッドの引数には
デフォルトの引数が指定されていますので、作る手間を省くためそれを使うとすると、
引数はポジションのボリュームとして0.01を入力するだけで済みます。
ブログラミングコードは以下のようにシンプルなコードになります。
#include <Trade/Trade.mqh>
void OnStart()
{
CTrade m_trade;
m_trade.Buy(0.01);
}
以上
0 件のコメント:
コメントを投稿