戦略を求める人は?たくさん、しかも無料で)。 - ページ 61

 
Stellarator >> :

友達から車をだましだまし使っていると電話が...。

>>まあ...

そして、彼らは危機を言う ;)

 

すべての問題を解決するまでは、ひとつひとつ比較する必要がありそうです。

ここでは、FSB Accelerator OscillatorとMTiAC(...)を比較してみました。



その方法について

1.FSBの為替レートをMTで使用している為替レートに更新する。 (MTからCtrl+Sで FSB ./Dataディレクトリにxxxxxx.csvファイルを保存する。) 2.FSBの為替レートをMTで使用している為替レートに更新する。データが別のフォルダにある場合は、FSBからMarket->Data Directoryを 使用して指定してください)。

2.目的のインジケータを印字するスクリプトIndicator_Values.mq4を作成します。(スクリプトは前のフォーラムのページにあります)。

3.このインジケーターをFSBに設定します。(必ず同じパラメータを使用してください。) 機能Export ->Indicatorsで、FSBインジケータをエクスポートします。

4.不具合を確認されましたら、ご報告ください。


幸運を祈ります。


------------

編集する。

最新のFSB v2.8.3.5 Betaを ご利用ください。

 
Miroslav_Popov >> :

古典的な計算式は次の通りです:Momentum(n) = Close - Close(n)

これがFSBが採用している計算式です。

MTの用途:Momentum(n) = 100 * Close / Close(n)

それはわかっています。 インジケーターのパラメーターのことを言っているのです。平滑化期間。スムージング方式。設定しない。デフォルトで取られるパラメータ:0,0?

 

zfsさん、こんにちは。


デフォルトのパラメータは、Indicator Parametersダイアログウィンドウで確認できます。(プレスデフォルト)



なお、「追加平滑化」期間=0とする。つまり、スムージングが適用されないということです。


デフォルト値を確認できる2つ目の場所は、ソースコードの中です。


        /// <summary>
        /// Sets the default parameters for the designated slot type
        /// </summary>
        public Momentum( SlotTypes slotType)
        {
            sIndicatorName  = "Momentum";
            parameters      = new IndicatorParam();
            component       = new IndicatorComp[] { };
            bSeparatedChart = true;
            bIsCalculated   = false;

            // The indicator name
            parameters. IndicatorName = sIndicatorName;

            // The slot type
            parameters. SlotType = slotType;

            // The ComboBox parameters
            parameters. ListParam[0]. Caption  = "Logic";
            parameters. ListParam[0]. ItemList = new string[]
            {
                "The Momentum rises",
                "The Momentum falls",
                "The Momentum is higher than the Level line",
                "The Momentum is lower than the Level line",
                "The Momentum crosses the Level line upward",
                "The Momentum crosses the Level line downward",
                "The Momentum changes its direction upward",
                "The Momentum changes its direction downward"
            };
            parameters. ListParam[0]. Index    = 0;
            parameters. ListParam[0]. Text     = parameters. ListParam[0]. ItemList[ parameters. ListParam[0]. Index];
            parameters. ListParam[0]. Enabled  = true;
            parameters. ListParam[0]. ToolTip  = "Logic of application of the indicator.";

            parameters. ListParam[1]. Caption  = "Smoothing method";
            parameters. ListParam[1]. ItemList = Enum. GetNames( typeof( MAMethod));
            parameters. ListParam[1]. Index    = 0;
            parameters. ListParam[1]. Text     = parameters. ListParam[1]. ItemList[ parameters. ListParam[1]. Index];
            parameters. ListParam[1]. Enabled  = true;
            parameters. ListParam[1]. ToolTip  = "The Moving Average method used for smoothing the Momentum value.";

            parameters. ListParam[2]. Caption  = "Base price";
            parameters. ListParam[2]. ItemList = Enum. GetNames( typeof( BasePrice));
            parameters. ListParam[2]. Index    = 3;
            parameters. ListParam[2]. Text     = parameters. ListParam[2]. ItemList[ parameters. ListParam[2]. Index];
            parameters. ListParam[2]. Enabled  = true;
            parameters. ListParam[2]. ToolTip  = "The price the Momentum is based on.";

            // The NumericUpDown parameters
            parameters. NumParam[0]. Caption = "Period";  <----- Parameter Name
            parameters. NumParam[0]. Value   = 10;        <----- Default Value
            parameters. NumParam[0]. Min     = 1;
            parameters. NumParam[0]. Max     = 200;
            parameters. NumParam[0]. Enabled = true;
            parameters. NumParam[0]. ToolTip = "The period of Momentum.";
 
            parameters. NumParam[1]. Caption = "Additional smoothing"; <----- Parameter Name 
            parameters. NumParam[1]. Value   = 0;        <----- Default Value
            parameters. NumParam[1]. Min     = 0;
            parameters. NumParam[1]. Max     = 200;
            parameters. NumParam[1]. Enabled = true;
            parameters. NumParam[1]. ToolTip = "The period of additional smoothing.";

            parameters. NumParam[2]. Caption = "Level";  <----- Parameter Name
            parameters. NumParam[2]. Value   = 0;        <----- Default Value
            parameters. NumParam[2]. Min     = -100;
            parameters. NumParam[2]. Max     = 100;
            parameters. NumParam[2].Point   = 4;
            parameters. NumParam[2]. Enabled = true;
            parameters. NumParam[2]. ToolTip = "A critical level (for the appropriate logic).";

            // The CheckBox parameters
            parameters. CheckParam[0]. Caption = "Use previous bar value";
            parameters. CheckParam[0]. Checked = Data. Strategy. PrepareUsePrevBarValueCheckBox( slotType);
            parameters. CheckParam[0]. Enabled = true;
            parameters. CheckParam[0]. ToolTip = "Use the indicator value from the previous bar.";
        }
 
Miroslav_Popov >> :

zfsさん、こんにちは。

私は、あなたの完璧さを原理的に疑っていませんでした。にもかかわらず、指標の最終的な数値が私には合わないということなのです。それとも、そうでなかったのだろうか。今は残念ながら確認する時間がありません。

 

Zfsです。

Stellaratorの 助けを借りて、FSBの多くの問題を修正しました。また、FSBのデフォルトのパラメータをMTでこのように変更しました。もうほとんどの差分が修正されているといいのですが。


不具合の可能性がある場合は、遠慮なくご報告ください。ご意見、ご感想、ご批判をお待ちしております。

 
Stellarator >> :

思いとどまらせないと!重要なのは「EAの1回の繰り返しの限界」というニュアンスです。つまり、この制限の範囲内で、インジケータは1回(最初の呼び出し時)だけ計算されるのです!100%の自信をもって宣言します。その後のすべての呼び出しは、それをまったく開始()せず、必要なバッファから必要な値を取るだけである。この条件は、入力パラメータが変更されない場合(バッファとオフセットを除く)に100%となります。 このルールは、計算が1つの機器内で実行される場合に機能します。しかし、iCustomが他のTFやツールを参照する場合でも、その原理は成り立つと思います。


私は、0番目のバーの現在の分でのインジケータの値を240回に適用するExpert Advisorを書きたいと思っています。つまり、出力は常に最初の値を持つことが判明しているのですか?これは私にとってニュースなので、確認をお願いします。

 
zfs >> :

オフトピックな質問ですが、Expert Advisorを書くことになり、0本目のバーで240回、現在の分でのインジケータの値にアクセスするようになりました。すなわち、出力は常に最初の値であることが判明しているのですか?これは私にとってニュースなので、確認をお願いします。

>> Expert Advisorは新しいティックごとに再スタートし、これは異なる反復であるため、インジケータ値も異なります。

 
rider >> :

EAは新しいティックごとに再起動しますが、これは異なる繰り返しであるため、インジケータの値も異なってきます。

前のバーの値を使用する」パラメータを正しく使用すれば、インジケータの現在のバーの値は必要ではありません。

日足チャートでMA(simple, 12, close)を使用するとします。このMAを正しく計算するためには、12本のバーの終値が必要です。

現在が午後3時の場合、現在の「終値」はそのバーの本当の終値ではありません。12PMまで変更になります。つまり、現在のバーのMAを使用すると、実際の終値ではなく、一時的な終値が含まれます。同時にバックテストでは、ヒストリカルバーの実際の(すでに固定された)終値が使用されます。この練習は、バックテストと実際のトレードの間に違いをもたらす。


さらに悪いことに

両方のMAが終値を基準としている場合、「FastMAがSlowMAを上回る」というロジックルールを見てみましょう。

日中、相場が急上昇した場合、FastMaがSlowMAを上回り、買いシグナルが上昇することがあります。シグナルに従って購入することになります。取引後、市場がダウンし、そう低く閉じると、それはスロー1の下にFastMAを移動しますしてみましょう。問題点が見えてきましたか?バーが閉まる前に購入済みであること。後でこのストラテジーをバックテストしてみると、このバー内にはそのような買いシグナルはないことがわかります。バックテスターのせいにしているようですが、問題は間違ったストラテジーロジックにあるのです。


フォレックス・ストラテジー・ビルダーは、「直前のバーの値を使用する」パラメータを自動的に設定することで、このような論理エラーを回避します。FSBは、バックテストに変化する(まだ固定されていない)指標を使うことはありません。そして、その論理では、もしストラテジーがインジケータを使用しないのであれば、なぜEAはすべてのティックに対してインジケータを計算しなければならないのでしょうか。1本につき1回の計算で十分です。

- 指標に始値を使用する場合、計算はバーの始値で行う必要があります。

- インジケータが終値、高値、安値、またはそれらの組み合わせを使用する場合、計算はバーの終値でなければなりません。






 

みなさん、こんばんは。


週末はパソコンがないんです :(そして今日は仕事で何もすることがなかったので・・・なんとか・・・。

考える時間はあったんですけどね。そして(願わくば)戦略的に(指標の枠組みを)決めてほしい。

一般的に、これからのインジケーターの内部構造は似ています(後ほど、明日にでも説明します)。外に「はみ出る」もの(パラメータ)-限りなくFSBに近いもの。つまり、その数、値(とその境界線)、そしてそれによって定義される機能性 - そう...。ほぼ1対1です。)ミクロのニュアンスは残りますが、やりながら決めていきます。


今のところごく簡単に(もう寝ます、明日も明後日もここには来ません、たぶん、仕事でいろいろやることがあるので)(by "our lovely" RSI :D の例で)。

1.パラメータ

// -------- Indicator parameters
extern int     slotType = SLOT_TYPE_OPENFILTER; // SLOT_TYPE_LC
extern int     indLogic = INDICATOR_RISES;      // INDICATOR_RISES <= indLogic <= INDICATOR_CHANGES_DIR_DOWNWARD
extern int     maMethod = MA_METHOD_SMOOTHED;   // MA_METHOD_SIMPLE <= maMethod <= MA_METHOD_SMOOTHED
extern int     basePrice= BASE_PRICE_CLOSE;     // BASE_PRICE_OPEN <= basePrice <= BASE_PRICE_WEIGHTED
extern int     iPeriod  = 14;                   // 1 <= iPeriod <= 200
extern int     dLevel   = 30;                   // 0 <= dLevel <= 100
extern bool    iPrvs    = True;                 // True / False




そのままの写真でも、多少はわかると思います。唯一の難点は、slotTypeと その値(FSBとは異なるかもしれませんが、この場合は重要なポイントではありません)です。

// Slot Types
#define  SLOT_TYPE_OPEN                   0  // Point of the Position
#define  SLOT_TYPE_CLOSE                  1  // Point of the Position
#define  SLOT_TYPE_OPENFILTER             2  // Logic Condition
#define  SLOT_TYPE_CLOSEFILTER            3  // Logic Condition

あとは、シンプルに。数値はそのまま設定されます。コンボボックスの値は0から始まる(配列のような)番号が付いています。

スムージング方法や価格定数の数値はMTとはDIFFERENT(長い間考えていたが、FSBとの互換性のためにステレオタイプから外れることにした :))。このすべては、実際には、将来的にエキスパートアドバイザー(またはユーザーが自分で書くもの)が簡単かつ強制的に指標を "ピクピク "できるように行われます :)(FSBで見たものがセットになっている(「what I see is what I sing」))。大まかには

double dRSI = iCustom(NULL, 0, "-FSB- RSI",2, 0, 3, 3, 14, 30, 1, 0, 0);

をご覧ください。


2.戻り値。

各指標の最初の2つの指標バッファは、ポジションのオープン価格(それぞれロング/ショート)、または論理条件(1.0 - yes / その他の値 - no)のために予約されています。さらに、インジケータの値もあります(誰かの役に立つかもしれないので)。


最初の2つのバッファの内容は、インジケータのロジック(slotTypeと indLogic)によって決定されます(すなわち、もう一度 - 価格または1 / 0(他の値はゼロだけではないことができるので、私は "1" でそれをチェックすることをお勧めします(一般的に - インジケータが値を持たないようにそこにEMPTY_VALUEの 可能性がある))。


すべての指標はIndicatorCounted()を考慮に入れて最適化されました(これは大体においてオリジナルコードの主な変更点です)(ミロスラフの言う通り、一般的には-指標値はバーごとに一度再計算すべきです(これも-一般的には... ;))。しかし、正しく視覚的に表示するため、そして一般的に(良い音で)表示するため...。一般的には、それほど遅くなることはないはずです。


色付きや類似の(「特に才能のある」:)指標のレンダリングには、グラフィカル・オブジェクトを使用します(余分なバッファを占有しないようにします)。私自身もテストしましたが、問題なく動作しています(ビジュアル表示の場合、インジケーターバッファより遅いですが、それほど致命的ではありませんし、iCustomが呼ばれた場合、グラフィック関数は全く呼ばれないので、「過剰」でも速度には影響しません)。


今はこれで終わりです。Miroslavにいくつか質問があるのですが、もう疲れました :) 、明日にでも聞いてみようと思います(ただし、前にも言ったように、急いで)...。


p.s. アーカイブからファイルを移動する前に、ExpertsIndicators フォルダにあるfsb*.mq4 ファイルを削除してください。残りは古いものの上に上書きすればいいだけです。今後、ファイルの命名規則には変更はありません(すべてのインジケーターに "-FSB- " というプレフィックスが付きます)。

ファイル:
experts_1.rar  148 kb