Функция распределения рыночных данных не является гауссовой, скорее она похожа на распределение синусоподобной волны. Поскольку большинство индикаторов базируются на предположении о нормальном распределении цен, их нужно "скорректировать". Решением является использование преобразования Фишера, которое преобразует данные таким образом, чтобы они имели распределение, близкое к нормальному. В статье рассмотрена теория прямого и обратного преобразования Фишера и ее применение в трейдинге, разработан модуль торговых сигналов.
#include <Expert\Signal\SignalMA.mqh>
CSignalMA SignalMA;
int TickCount;
string Str;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
TickCount=0;
SignalMA.Symbol(Symbol());
SignalMA.Period(PERIOD_H1);
SignalMA.Weight(0.5);
SignalMA.PeriodMA(20);
SignalMA.Shift(0);
SignalMA.Method(MODE_SMA);
SignalMA.Applied(PRICE_CLOSE);
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
TickCount++;
Str = "LongCondition = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
Comment(Str);
}
//+------------------------------------------------------------------+
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Period: タイムフレームの変更が禁止されています。
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Symbol: シンボルの変更が禁止されています。
ウィザードEAとは別にトレーディングシグナルモジュールを 使用することはできますか?テストのために、私は次のように書きました。
#include <Expert\Signal\SignalMA.mqh>
CSignalMA SignalMA;
int TickCount;
string Str;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
TickCount=0;
SignalMA.Symbol(Symbol());
SignalMA.Period(PERIOD_H1);
SignalMA.Weight(0.5);
SignalMA.PeriodMA(20);
SignalMA.Shift(0);
SignalMA.Method(MODE_SMA);
SignalMA.Applied(PRICE_CLOSE);
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
TickCount++;
Str = "LongCondition = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
Comment(Str);
}
//+------------------------------------------------------------------+
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Period: タイムフレームの変更が禁止されています。
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Symbol: シンボルの変更が禁止されています。
以下のコードです。
関数が 呼び出されるたびに、label のコンストラクタを呼び出します。
以下のコードで、最初の場合はインジケーターがセットされ、2番目の場合はセットされません(スラッシュで切り替え)。
このライブラリの2番目のオプションは0を出力します。他の機能はすべて動作するようです。
次のコードについて、1番目の場合はインジケータがセットされ、2番目の場合はセットされません(スラッシュで切り替わります)。
私が理解する限り、現時点では3つのパラメータはすべて必須です。
したがって、ウィンドウ番号を指定する必要があります (バリエーション: 0 - メイン・ウィンドウ、ChartIndicatorsTotal() - 新規ウィンドウ、0 ~ChartIndicatorsTotal() - 1- 既存ウィンドウ)。
エラーが出ないものは良くない。
このライブラリの場合、2番目のオプションは0を出力します。
価格を取得する前に、リフレッシュ(少なくともRefreshRates)を使用する必要がある場合がほとんどです。
正しいバリアントは次のようになります。
ありがとうございます。 Bidで、refreshを指定すると本当に動きました。
しかし、ライブラリを使ったインジケータ出力では、サブウィンドウとハンドルの2つのパラメータが必要です。 それ以外はパラメータの数が間違っていると言われます。ライブラリは同じChartIndicatorAddを使って いるので、それが分かりません。
ありがとうございます。 Bidで、refreshを指定すると本当に動きました。
しかし、ライブラリを使ったインジケータ出力では、サブウィンドウとハンドルの2つのパラメータが必要です。 それ以外はパラメータの数が間違っていると言われます。 ライブラリは同じChartIndicatorAddを使って いるので直接動作しますが、ライブラリ呼び出しは動作しないので、解りません。
このライブラリを使用するには、2つのパラメータが必要です。チャートとサブウインドウ。
ハンドルなし?また、どのターンテーブルを使うかは、システムがどのように判断するのでしょうか? ...これまでは、書かれていることを信じていました :)基板とハンドルです。
ハンドルなし?どのインジケーターを使うかは、システムがどのように判断するのでしょうか? 今までのテキストを信頼しています :)サブウインドウとハンドル。
図書館について(クラスヘルプより)
インジケーターアッド
指定されたハンドルを持つインジケータを、指定されたチャートウィンドウに追加します。
ChartIndicatorAddの 直作品について。
ChartIndicatorAdd
指定されたハンドルを持つインジケータを、指定されたチャートウィンドウに追加します。
CChart クラスについては。
不必要な質問を避けるために、3つの基本ルールを守るようにしています。
1.ソースコードを見て、不明な点があればドキュメントを参照します(ソースコードは常に「真実」を語ってくれますが、ドキュメントは嘘をつくこともあります)。
2.OOPの実装を重視する場合は、特定のクラスの記述から始まり、「直接実装者」まで踏み込みます。実作業」が重要であれば、OOPは最後に勉強すべきです(コードの下調べ/上調べ)。
3.ドキュメントやソースを読んでもわからないことがあれば、フォーラムに行く。
クラス内のIndicatorAddメソッドの実装を直接確認する
ソースコードを見ると、メソッドはサブウィンドウとハンドルを取得し(ヘルプに記載)、3番目のパラメータはクラス自体に格納されているデータ(グラフIDのことです)から取得されていることがわかります。