1.これがMT5で利用できるようになったのは素晴らしいことです。数学はアフリカの数学であり、MT4で動作するということを正しく理解していますか?
2.私は最初にMatlabでFuzziを試しましたが、正直なところ、それはずっと前のことで、利益を保証するFX取引に適用する方法を本当に理解していませんでした。その結果、ウェーブレットや統計学などの方向に進みました。
3.ファジィロジックを実際に応用するための文献を教えてください。トレードでなくても。
4.このトピックに興味があるのですが、このサイトにこのトピックに関する記事は必要でしょうか?
1.これがMT5で利用できるようになったのは素晴らしいことです。mathsはアフリカの数学であり、MT4でも機能するということを正しく理解していますか?
2.私は最初にMatlabでFuzziを試しましたが、正直なところ、それはずっと前のことで、利益を保証するFX取引に適用する方法を本当に理解していませんでした。その結果、ウェーブレットや統計学などの方向に進みました。
3.ファジィロジックを実際に応用するための文献を教えてください。トレードでなくても。
4.このトピックに興味があるのですが、サイトにはこのトピックに関する記事が必要でしょうか?
こんにちは。
1.私たちは、MT4のための適応を作るでしょう(少し後)。
3.4.FuzzyNetの使用に関する記事を近々公開する予定です。その後、サービスデスクに このトピックをより具体的に議論するように書いて ください。
こんにちは、
Fuzzy、SVM、Neuralのようなシステムが好きなので、いろいろ見ていたら、このライブラリを見つけたので、試してみました。含まれているスクリプトは十分に理解できるのですが、コンパイル時のエラーが少ないのが気になります - sugenoを使ったスクリプトcruise_control_sample_sugeno.mq5では:
//|ファジーネットmqh
//| Copyright 2015, MetaQuotes Software Corp.|
//|https://www.mql5.com
//+------------------------------------------------------------------+
//| MetaQuotes言語5(MQL5)でのFuzzyNetライブラリの実装。
//||
//| FuzzyNetライブラリの特徴は以下の通り。
| - マムダニ・ファジィ・モデルの作成|
//| スゲノファジィモデルの作成|
//| 正規メンバーシップ関数|
//| 三角メンバーシップ関数|
//| 台形メンバーシップ関数|
//| メンバーシップ関数|
//| - Defuzzification method of center of gravity (COG) |
//| 面積の2等分線(BOA)によるデファジー法
//| 最大値平均(MeOM)によるデファジー法
//||
//| MQL5用FuzzyNetとMQL5用FuzzyNetの機能的な違いを見つけてください。
//| およびオリジナルのFuzzyNetプロジェクトについては、開発者にお問い合わせください。
//| www.mql5.com。|
//||
//| の計算アルゴリズムで見つかったバグを報告することができる。
//| FuzzyNetプロジェクト・コーディネーターに通知してください。
//+------------------------------------------------------------------+
//| ソースライセンス|
//||
//| このプログラムはフリーソフトウェアです。
//| GNU一般公衆利用許諾契約書(GNU General Public License)の条項の下で、以下のように変更してください。
//| フリーソフトウェアファウンデーション(www.fsf.org) が発行。
|ライセンスのバージョン2、あるいは(あなたの選択で)それ以降のバージョン。|
//||
//| このプログラムが役に立つことを願って配布しています。
//| しかし、いかなる保証もない。
//| 商品性または特定目的適合性。を参照してください。
//| 詳細はGNU General Public Licenseを参照のこと。
//||
//| GNU一般公衆利用許諾契約書のコピーは|にあります。
//| http://www.fsf.org/licensing/licenses |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property script_show_inputs
//+------------------------------------------------------------------+
//| ライブラリの接続|
//+------------------------------------------------------------------+
#include <Math\FuzzyNet\SugenoFuzzySystem.mqh>
//--- 入力パラメータ
input double Speed_Error;
input double Speed_ErrorDot;
//+------------------------------------------------------------------+
//| スクリプト・プログラム開始機能|
//+------------------------------------------------------------------+
void OnStart()
{
//--- スゲノファジィシステム
CSugenoFuzzySystem *fsCruiseControl=new CSugenoFuzzySystem();
//--- システムの最初の入力変数を作成する
CFuzzyVariable *fvSpeedError=new CFuzzyVariable("SpeedError",-20.0,20.0);
fvSpeedError.Terms().Add(new CFuzzyTerm("slower",new CTriangularMembershipFunction(-35.0,-20.0,-5.0)));
fvSpeedError.Terms().Add(new CFuzzyTerm("zero", new CTriangularMembershipFunction(-15.0, -0.0, 15.0)));
fvSpeedError.Terms().Add(new CFuzzyTerm("faster", new CTriangularMembershipFunction(5.0, 20.0, 35.0)));
fsCruiseControl.Input().Add(fvSpeedError);
//--- システムの2番目の入力変数を作成する
CFuzzyVariable *fvSpeedErrorDot=new CFuzzyVariable("SpeedErrorDot",-5.0,5.0);
fvSpeedErrorDot.Terms().Add(new CFuzzyTerm("slower", new CTriangularMembershipFunction(-9.0, -5.0, -1.0)));
fvSpeedErrorDot.Terms().Add(new CFuzzyTerm("zero", new CTriangularMembershipFunction(-4.0, -0.0, 4.0)));
fvSpeedErrorDot.Terms().Add(new CFuzzyTerm("faster", new CTriangularMembershipFunction(1.0, 5.0, 9.0)));
fsCruiseControl.Input().Add(fvSpeedErrorDot);
//--- 出力の作成
CSugenoVariable *svAccelerate=new CSugenoVariable("Accelerate");
double coeff1[3]={0.0,0.0,0.0};
svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("zero",coeff1));
double coeff2[3]={0.0,0.0,1.0};
svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("faster",coeff2));
double coeff3[3]={0.0,0.0,-1.0};
svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("slower",coeff3));
double coeff4[3]={-0.04,-0.1,0.0};
svAccelerate.Functions().Add(fsCruiseControl.CreateSugenoFunction("func",coeff4));
fsCruiseControl.Output().Add(svAccelerate);
//--- クレイテ・スゲノ・ファジィ・ルール
CSugenoFuzzyRule *rule1 = fsCruiseControl.ParseRule("if (SpeedError is slower) and (SpeedErrorDot is slower) then (Accelerate is faster)");
CSugenoFuzzyRule *rule2 = fsCruiseControl.ParseRule("if (SpeedError is slower) and (SpeedErrorDot is zero) then (Accelerate is faster)");
CSugenoFuzzyRule *rule3 = fsCruiseControl.ParseRule("if (SpeedError is slower) and (SpeedErrorDot is faster) then (Accelerate is zero)");
CSugenoFuzzyRule *rule4 = fsCruiseControl.ParseRule("if (SpeedError is zero) and (SpeedErrorDot is slower) then (Accelerate is faster)");
CSugenoFuzzyRule *rule5 = fsCruiseControl.ParseRule("if (SpeedError is zero) and (SpeedErrorDot is zero) then (Accelerate is func)");
CSugenoFuzzyRule *rule6 = fsCruiseControl.ParseRule("if (SpeedError is zero) and (SpeedErrorDot is faster) then (Accelerate is slower)");
CSugenoFuzzyRule *rule7 = fsCruiseControl.ParseRule("if (SpeedError is faster) and (SpeedErrorDot is slower) then (Accelerate is faster)");
CSugenoFuzzyRule *rule8 = fsCruiseControl.ParseRule("if (SpeedError is faster) and (SpeedErrorDot is zero) then (Accelerate is slower)");
CSugenoFuzzyRule *rule9 = fsCruiseControl.ParseRule("if (SpeedError is faster) and (SpeedErrorDot is faster) then (Accelerate is slower)");
//--- システムにSugenoファジィルールを追加する。
fsCruiseControl.Rules().Add(rule1);
fsCruiseControl.Rules().Add(rule2);
fsCruiseControl.Rules().Add(rule3);
fsCruiseControl.Rules().Add(rule4);
fsCruiseControl.Rules().Add(rule5);
fsCruiseControl.Rules().Add(rule6);
fsCruiseControl.Rules().Add(rule7);
fsCruiseControl.Rules().Add(rule8);
fsCruiseControl.Rules().Add(rule9);
//--- 入力値を設定し、結果を得る
CList *in=new CList;
CDictionary_Obj_Double *p_od_Error=new CDictionary_Obj_Double;
CDictionary_Obj_Double *p_od_ErrorDot=new CDictionary_Obj_Double;
p_od_Error.SetAll(fvSpeedError,Speed_Error);
p_od_ErrorDot.SetAll(fvSpeedErrorDot,Speed_ErrorDot);
in.Add(p_od_Error);
in.Add(p_od_ErrorDot);
//--- 結果を得る
CList *result;
CDictionary_Obj_Double *p_od_Accelerate;
result=fsCruiseControl.Calculate(in);
p_od_Accelerate=result.GetNodeAtIndex(0);
Alert("Accelerate, %: ",p_od_Accelerate.Value()*100);
delete in;
delete result;
delete fsCruiseControl;
}
//+------------------------------------------------------------------+
そして、マムダニとのスクリプトは :
//|ファジーネットmqh
//| Copyright 2015, MetaQuotes Software Corp.|
//|https://www.mql5.com
//+------------------------------------------------------------------+
//| MetaQuotes言語5(MQL5)でのFuzzyNetライブラリの実装。
//||
//| FuzzyNetライブラリの特徴は以下の通り。
| - マムダニ・ファジィ・モデルの作成|
//| スゲノファジィモデルの作成|
//| 正規メンバーシップ関数|
//| 三角メンバーシップ関数|
//| 台形メンバーシップ関数|
//| メンバーシップ関数|
//| - Defuzzification method of center of gravity (COG) |
//| 面積の2等分線(BOA)によるデファジー法
//| 最大値平均(MeOM)によるデファジー法
//||
//| MQL5用FuzzyNetとMQL5用FuzzyNetの機能的な違いを見つけてください。
//| およびオリジナルのFuzzyNetプロジェクトについては、開発者にお問い合わせください。
//| www.mql5.com。|
//||
//| の計算アルゴリズムで見つかったバグを報告することができる。
//| FuzzyNetプロジェクト・コーディネーターに通知してください。
//+------------------------------------------------------------------+
//| ソースライセンス|
//||
//| このプログラムはフリーソフトウェアです。
//| GNU一般公衆利用許諾契約書(GNU General Public License)の条項の下で、以下のように変更してください。
//| フリーソフトウェアファウンデーション(www.fsf.org) が発行。
|ライセンスのバージョン2、あるいは(あなたの選択で)それ以降のバージョン。|
//||
//| このプログラムが役に立つことを願って配布しています。
//| しかし、いかなる保証もない。
//| 商品性または特定目的適合性。を参照してください。
//| 詳細はGNU General Public Licenseを参照のこと。
//||
//| GNU一般公衆利用許諾契約書のコピーは|にあります。
//| http://www.fsf.org/licensing/licenses |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property script_show_inputs
//+------------------------------------------------------------------+
//| ライブラリの接続|
//+------------------------------------------------------------------+
#include <Math\FuzzyNet\MamdaniFuzzySystem.mqh>
//--- 入力パラメータ
input double Service;
input double Food;
//+------------------------------------------------------------------+
//| スクリプト・プログラム開始機能|
//+------------------------------------------------------------------+
void OnStart()
{
//--- マムダニ・ファジィ・システム
CMamdaniFuzzySystem *fsTips=new CMamdaniFuzzySystem();
//--- システムの最初の入力変数を作成する
CFuzzyVariable *fvService=new CFuzzyVariable("service",0.0,10.0);
fvService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0)));
fvService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
fvService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0)));
fsTips.Input().Add(fvService);
//--- システムの2番目の入力変数を作成する
CFuzzyVariable *fvFood=new CFuzzyVariable("food",0.0,10.0);
fvFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0)));
fvFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0)));
fsTips.Input().Add(fvFood);
//--- 出力の作成
CFuzzyVariable *fvTips=new CFuzzyVariable("tips",0.0,30.0);
fvTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0)));
fvTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0)));
fvTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0)));
fsTips.Output().Add(fvTips);
//--- 3つのマムダニ・ファジィ・ルールを作る
CMamdaniFuzzyRule *rule1 = fsTips.ParseRule("if (service is poor ) or (food is rancid) then tips is cheap");
CMamdaniFuzzyRule *rule2 = fsTips.ParseRule("if ((service is good)) then tips is average");
CMamdaniFuzzyRule *rule3 = fsTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)");
//--- システムに3つのマムダニ・ファジィ・ルールを追加する。
fsTips.Rules().Add(rule1);
fsTips.Rules().Add(rule2);
fsTips.Rules().Add(rule3);
//--- 入力値を設定する
CList *in=new CList;
CDictionary_Obj_Double *p_od_Service=new CDictionary_Obj_Double;
CDictionary_Obj_Double *p_od_Food=new CDictionary_Obj_Double;
p_od_Service.SetAll(fvService, Service);
p_od_Food.SetAll(fvFood, Food);
in.Add(p_od_Service);
in.Add(p_od_Food);
//--- 結果を得る
CList *result;
CDictionary_Obj_Double *p_od_Tips;
result=fsTips.Calculate(in);
p_od_Tips=result.GetNodeAtIndex(0);
Alert("Tips, %: ",p_od_Tips.Value());
delete in;
delete result;
delete fsTips;
}
//+------------------------------------------------------------------+
シェアしてくれてありがとう!
リブを応援してくれる人たち、まあ、誰でもいいから助けて......。:)計算を速く したい。添付された例のスクリプトでは、ファジー論理クラスのオブジェクトを作成し、結果を計算して削除しています。オブジェクトを1回だけ作成し、Calculate()で新しい値だけを渡して、すでに設定されているファジーロジックで結果を受け取るようにしたいのです。
これがオリジナルの例で、正しく動作します:
//+------------------------------------------------------------------+ //|ヒントサンプルmq5 //| Copyright 2017, MetaQuotes Software Corp. //|https://www.mql5.com //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #include <Math\Fuzzy\MamdaniFuzzySystem.mqh> //--- 入力パラメータ input double Service; input double Food; //+------------------------------------------------------------------+ //| エキスパート初期化関数| //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ |エキスパート初期化関数| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| エキスパート・ティック機能| //+------------------------------------------------------------------+ void OnTick() { //--- //--- マムダニ・ファジィ・システム CMamdaniFuzzySystem *fsTips=new CMamdaniFuzzySystem(); //--- システムの最初の入力変数を作成する CFuzzyVariable *fvService=new CFuzzyVariable("service",0.0,10.0); fvService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0))); fvService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); fvService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0))); fsTips.Input().Add(fvService); //--- システムの2番目の入力変数を作成する CFuzzyVariable *fvFood=new CFuzzyVariable("food",0.0,10.0); fvFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0))); fvFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0))); fsTips.Input().Add(fvFood); //--- 出力の作成 CFuzzyVariable *fvTips=new CFuzzyVariable("tips",0.0,30.0); fvTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); fvTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0))); fvTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0))); fsTips.Output().Add(fvTips); //--- 3つのマムダニ・ファジィ・ルールを作る CMamdaniFuzzyRule *rule1 = fsTips.ParseRule("if (service is poor ) or (food is rancid) then tips is cheap"); CMamdaniFuzzyRule *rule2 = fsTips.ParseRule("if ((service is good)) then tips is average"); CMamdaniFuzzyRule *rule3 = fsTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)"); //--- システムに3つのマムダニ・ファジィ・ルールを追加する。 fsTips.Rules().Add(rule1); fsTips.Rules().Add(rule2); fsTips.Rules().Add(rule3); //--- 入力値を設定する CList *in=new CList; CDictionary_Obj_Double *p_od_Service=new CDictionary_Obj_Double; CDictionary_Obj_Double *p_od_Food=new CDictionary_Obj_Double; p_od_Service.SetAll(fvService, Service); p_od_Food.SetAll(fvFood, Food); in.Add(p_od_Service); in.Add(p_od_Food); //--- 結果を得る CList *result; CDictionary_Obj_Double *p_od_Tips; result=fsTips.Calculate(in); p_od_Tips=result.GetNodeAtIndex(0); Print("Tips, %: ",p_od_Tips.Value()); delete in; delete result; delete fsTips; } //+------------------------------------------------------------------+
そしてエラーが発生する私の例です:
2017.09.07 14:28:56.949 Core 1 2017.07.03 00:00:00 Input values count is incorrect. 2017.09.07 14:28:56.949 Core 1 2017.07.03 00:00:00 invalid pointer access in 'MamdaniFuzzySystem.mqh' (172,42)
コードそのものです:
//+------------------------------------------------------------------+ //|TipsSample.mq5 //| Copyright 2017, MetaQuotes Software Corp. //|https://www.mql5.com //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #include <Math\Fuzzy\MamdaniFuzzySystem.mqh> input double Service; input double Food; //+------------------------------------------------------------------+ //| エキスパート初期化関数| //+------------------------------------------------------------------+ CMamdaniFuzzySystem *fsTips=new CMamdaniFuzzySystem(); CFuzzyVariable *fvService=new CFuzzyVariable("service",0.0,10.0); CFuzzyVariable *fvFood=new CFuzzyVariable("food",0.0,10.0); CFuzzyVariable *fvTips=new CFuzzyVariable("tips",0.0,30.0); CMamdaniFuzzyRule *rule1, *rule2, *rule3; CList *in=new CList; CDictionary_Obj_Double *p_od_Service=new CDictionary_Obj_Double; CDictionary_Obj_Double *p_od_Food=new CDictionary_Obj_Double; CList *result; CDictionary_Obj_Double *p_od_Tips; int OnInit() { //--- fvService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0))); fvService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); fvService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0))); fsTips.Input().Add(fvService); //--- システムの2番目の入力変数を作成する fvFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0))); fvFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0))); fsTips.Input().Add(fvFood); //--- 出力の作成 fvTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); fvTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0))); fvTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0))); fsTips.Output().Add(fvTips); //--- 3つのマムダニ・ファジィ・ルールを作る rule1 = fsTips.ParseRule("if (service is poor ) or (food is rancid) then tips is cheap"); rule2 = fsTips.ParseRule("if ((service is good)) then tips is average"); rule3 = fsTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)"); fsTips.Rules().Add(rule1); fsTips.Rules().Add(rule2); fsTips.Rules().Add(rule3); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ |エキスパート初期化関数| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| エキスパート・ティック機能| //+------------------------------------------------------------------+ void OnTick() { int ir; for(ir=1; ir<10; ir++) { p_od_Service.SetAll(fvService, ir); p_od_Food.SetAll(fvFood, ir); Print(CheckPointer(in)); in.Clear(); in.Add(p_od_Service); in.Add(p_od_Food); //--- 結果を得る result=fsTips.Calculate(in); Print("Error"); p_od_Tips=result.GetNodeAtIndex(0); Print("Tips, %: ",p_od_Tips.Value()); } } //+------------------------------------------------------------------+
一般的に、このlibはオブジェクトを作成し、例えば新しいバーごとに結果を取得できるように設計されているのでしょうか?なぜなら、毎回ロジックを作り直すのは時間がかかるし、経済的ではないからです。
ファジー・ロジック・オブジェクトを1回だけ作成し、Calculate()を呼び出すことができるようになりました。
例を確認してください:
//+------------------------------------------------------------------+ //|TipsSample.mq5 //| Copyright 2017, MetaQuotes Software Corp. //|https://www.mql5.com //+------------------------------------------------------------------+ #property copyright "Copyright 2017, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #include <Math\Fuzzy\MamdaniFuzzySystem.mqh> input double Service; input double Food; //+------------------------------------------------------------------+ //| エキスパート初期化関数| //+------------------------------------------------------------------+ CMamdaniFuzzySystem *FSTips=new CMamdaniFuzzySystem(); CFuzzyVariable *FVService=new CFuzzyVariable("service",0.0,10.0); CFuzzyVariable *FVFood=new CFuzzyVariable("food",0.0,10.0); CFuzzyVariable *FVTips=new CFuzzyVariable("tips",0.0,30.0); CMamdaniFuzzyRule *Rule1,*Rule2,*Rule3; CList *In=new CList; CDictionary_Obj_Double *Dic_Service=new CDictionary_Obj_Double; CDictionary_Obj_Double *Dic_Food=new CDictionary_Obj_Double; CDictionary_Obj_Double *Dic_Tips; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ int OnInit() { In.FreeMode(false); //--- システムの最初の入力変数を作成する FVService.Terms().Add(new CFuzzyTerm("poor", new CTriangularMembershipFunction(-5.0, 0.0, 5.0))); FVService.Terms().Add(new CFuzzyTerm("good", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); FVService.Terms().Add(new CFuzzyTerm("excellent", new CTriangularMembershipFunction(5.0, 10.0, 15.0))); FSTips.Input().Add(FVService); //--- システムの2番目の入力変数を作成する FVFood.Terms().Add(new CFuzzyTerm("rancid", new CTrapezoidMembershipFunction(0.0, 0.0, 1.0, 3.0))); FVFood.Terms().Add(new CFuzzyTerm("delicious", new CTrapezoidMembershipFunction(7.0, 9.0, 10.0, 10.0))); FSTips.Input().Add(FVFood); //--- 出力の作成 FVTips.Terms().Add(new CFuzzyTerm("cheap", new CTriangularMembershipFunction(0.0, 5.0, 10.0))); FVTips.Terms().Add(new CFuzzyTerm("average", new CTriangularMembershipFunction(10.0, 15.0, 20.0))); FVTips.Terms().Add(new CFuzzyTerm("generous", new CTriangularMembershipFunction(20.0, 25.0, 30.0))); FSTips.Output().Add(FVTips); //--- 3つのマムダニ・ファジィ・ルールを作る Rule1 = FSTips.ParseRule("if (service is poor ) or (food is rancid) then tips is cheap"); Rule2 = FSTips.ParseRule("if ((service is good)) then tips is average"); Rule3 = FSTips.ParseRule("if (service is excellent) or (food is delicious) then (tips is generous)"); FSTips.Rules().Add(Rule1); FSTips.Rules().Add(Rule2); FSTips.Rules().Add(Rule3); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ |エキスパート初期化関数| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- ファジーシステムの削除 In.FreeMode(true); delete In; delete FSTips; } //+------------------------------------------------------------------+ //| エキスパート・ティック機能| //+------------------------------------------------------------------+ void OnTick() { for(int ir=1; ir<10; ir++) { Dic_Service.SetAll(FVService,ir); Dic_Food.SetAll(FVFood,ir); In.Clear(); In.Add(Dic_Service); In.Add(Dic_Food); //--- 結果を得る CList *result=FSTips.Calculate(In); Dic_Tips=result.GetNodeAtIndex(0); Print("Tips, %: ",Dic_Tips.Value()); delete result; } } //+------------------------------------------------------------------+
h
when I update metatrader to build 2342
all of samples with fuzzy logic library
return error "incorrect casting of pointers" on MQL5 ¦ Include ¦ Math ¦ ¦ ¦ ¦ エラーを返します。Fuzzy \ RuleParser.mqh Line 712
Please help to fix bug
many thanks
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
ファジィ - ファジィモデル開発のためのライブラリ:
ファジィモデル開発のためのFuzzyNetライブラリはC#で書かれました。MQL5への変換中にライブラリには8つのメンバーシップ関数と4つのマムダニシステムの非ファジィ化メソッドが追加されました。
Cruise_Control_Sample_Sugeno.mq5 スクリプトはファジーレギュレータの一例です。これは、現在の偏差及び変化の偏差率のデータを用いて、所望の速度に到達するために、必要な加速度を算出するオートクルーズを表します。
入力パラメータを入力します。
作者: MetaQuotes Software Corp.