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

 
Stellarator >> :

元値と「その後展開」に乖離があったことは? やはり2倍......)

未だ...もんだいいっぱいいっぱい)

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

1つは「無理やり」......一気呵成にしなければならないだろう。もう一つの文書化されていない機能をありがとうございます :)


 

FSB__Bar_Opening_Bar_Closing.mql4 v0 .0.2 Beta


Bar Openingでのマーケットエントリー。

バークローズで終了(クローズまで10秒、または次のオープニングで終了)


** このデモはEntry/Exitポイントを テストするためのものです。**


コードフラグメント。


bool bIsFirstTick;// It is used to catch the Bar Opening.
datetime dtCurrentBarOpeningTime;

int init()
{
   bIsFirstTick = false;
   dtCurrentBarOpeningTime = Time[0];
   return(0);
}

int start()
{
   // Is this the first tick for the bar
   bIsFirstTick = ( dtCurrentBarOpeningTime != Time[0]);
   if( bIsFirstTick)
   {
      dtCurrentBarOpeningTime = Time[0];
   }

...
...



///
/// Exit at a Bar Closing price (almost).
///
/// MetaTrader does not provide an onBarClose event so we are not able to close a position
/// exactly at Bar Closing. We workaround the problem by closing the position within a time span
/// near to the bar closing time. In the cases when there is no any ticks within this period,
/// we close the position att he next bar opening price.
///
int ClosePositionsAtBarClosing(bool bCloseLong, bool bCloseShort, datetime dtClosingTimeSpan)
{
   int  iOrders = OrdersTotal();
   bool bIsOpen = false;

   for(int iOrder = 0; iOrder < iOrders; iOrder++)
   {
      OrderSelect( iOrder, SELECT_BY_POS, MODE_TRADES);
      
      if((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol())
      {  // There is an open position for this symbol.

         datetime dtOpeningTime     = Time[0] - TimeSeconds(Time[0]); // The opening time of current bar
         datetime dtClosingTime     = dtOpeningTime + Period() * 60;  // The closing time of current bars
         datetime dtCurrentTickTime = TimeCurrent() ;                 // The time of current tick
         
         if( dtCurrentTickTime > dtClosingTime - dtClosingTimeSpan ||  bIsFirstTick)
         {  // The current tick is within the closing time span or this is the first tick of the bar.

            // Code

         }
       }
    }
}
ファイル:
 

1.性能について。

ほとんどの場合、ティック ごとにインジケータを再計算する必要はありません。(参考:「直前のバーの値を使用する」)指標は、「バー・オープニング」または「バー・クロージング」のどちらかで計算する必要があります。


2. fMicron:

取引判断のために価格を比較するときは、fMicron = Point/ 2を使用しています。しかし、指標には適用されません。Eg.USDJPYの場合 point = 0.01; fMicron = 0.005.

0.000075は、長年にわたる多くのテストの結果です。2001年にFSBの仕事を始めました :) もちろん、何の意味もないんですけどね。それについては、何度も考えを改めました。

**編集:MTはこれをユーザーの手に渡します。おそらくEAの達人たちは、自分のEAで使っているものを言えると思います。

**edit2:実験用にこのパラメータをコンフィグファイルに入れておきます。


3.FSBの各バージョンについて、オリジナルのソースコードのダウンロード提供を開始します。そのような場合、小さな変更のたびにウェブサイトを更新する必要はないでしょう。


floatをdoubleに変更するように なりました。このバージョンは、今夜か明日、すぐに公開します。その後、徹底的にテストしなければなりません。MQLに書き込む前に、各インジケータごとにパスして、いくつかの問題や機能を修正する必要があります。

 

1.はい、ほとんどの場合(FSBのポジションのオープン/クローズ(バー・オープニング/バー・クロージング)に対する一般的なアプローチを考慮した場合)。- これは必要ありません。しかし、仮に--マナーのルールは--義務であるとしよう。毎回(バーで一度でも) "ゼロから"指標の計算- 一般的に(私は同意する)大規模な期間の制限内で重要ではありません...。しかし、期間が数分の場合はどうでしょうか。また、インジケータがまだ毎バー計算する必要がある(あるいはしたい)場合はどうでしょうか? (ポジションの洗練されたポイントで、始値がストップレベルより低いため、注文で捕捉できない(あるいはできない))場合はどうでしょう。

実際、変換はそれほど複雑ではありません。そう、いくつかのコードが「ラッパーに」あり、バーウォークの原理が逆になっているのです。実は、大まかに言ってそれだけなんです。主な内容は、アルゴリズムを維持し(ソースコード内で簡単に読み、識別できるように)、FSBとのパラメトリックな互換性を維持することです。信号抽出に便利な仕組みを作る。そして、純粋なビジュアルデザイナー(EAにこだわらない人)にも使えるようにすること。私見ですが。


2.まあ、Point/2 variant を使って(同じように)指標となる値を比較しろとは言っていないのですが :) 。- 私は定数を提案しただけです。問題は、その値と次元(0.000075 - 悪いことではない、私はそれを言わなかった - 私は正確に75としない "通常" 50:)なぜ理解していないのですか?2001年以降」の経験はかなり明らかにされており(論拠!)、私はこの値をかなり積極的に受け入れています。しかし、最後に言っておきますが、0.12345のディメンションの引用符の場合、これは十分ではありません(つまり、たくさん:))。数値は少なくとも1フレーム分右にずれている必要があります(0.0000075)。例えば私の証券会社では、すでにそのような見積もりは常識となっているのですが...。楽器に合わせて調整し、"75 "ではなく、"10 "を使うことをお勧めします :)

fMicron = ポイント * 0.1f

要するに、そうです - パラメトリックに設定することを提案します(いくつかのフレンドリーな実験の後、すべてがうまくいくと思います(しかし...ポイントが何度も変更されている場合 ;)...)。そして、より多くの人の意見を待つ...。


3.掲載されているソースをなんとかダウンロードしました :-P.だから、(結果のコードという意味で)「比較するもの」が出てくる。そして、これ以上迷惑をかけたくないので、floatからdoubleへの変換を頑張ってください。


(RSIのテストはどうでしたか?)。

 

ベストは100>ミクロン>50とわかりました。だから75を取ったんです。私のブローカー向けでした:Point= 0.0001.

しかし、ブローカーが0.00001でクォートを開始したのは正しいことです。

マイクロン = Math.Min(Point * 0.75, 0.000075)で作成します。

あと3時間で変換が終わるといいんですけどね。ここにテスト用のプログラムを置いておきます。

コンバートしたインジケーターのソースコードもアップロードしておきますね。

 

指標やパラメータはすべて2重 数値です。

ミクロン=0.000075


exeを前回のFSB v2.8.3.3 Betaと一緒にフォルダに入れる。両プログラムは、同じデータと戦略を共有します。比較するのに便利です。インジケーターの数値にご注意ください。実質的にすべてのインジケータと他のファイルの半分が変更されています。

完全な精度を見るには、チャート上でF12キーを押すか、コマンドコンソール(ind ####)を使用します。


問題があれば報告してください。今こそ、指標についての変更を要求する時です。MT統合の作業を継続するためには、それらを修正する必要があるのです。



 

おはようございます。

ミロスラフ、今は時間が限られているので...。ので、早いです。

1.早速の翻訳(フロート→ダブル)ありがとうございました素晴らしい

2.今のところ、(私が確認した限りでは)すべてうまくいっているようです。インジケータの値とストラテジーの結果の両方で、(その場で)違いを見ることができます :)

3.しかし、その違いは、私たちが事前に予想して いたものとは違っていました。(昨晩、社内で実験してみたところ、私の「懸念」は的中しました。 変換することで計算精度は上がるが、結果が壊滅的に変わることはない! 4~5桁目の差の部分から何か......」。が、2桁目で早くも乖離が発生しているのです(例えば、同じRSI))


理由は他にある!!!


なんとか確認できたこと。

1.最初は、Digits(私は5桁の楽器を持っています)というテーマでハードリンクはないかと考えたのですが...。 ツールのプロパティで 4桁の数字を強制的に指定してもダメでした(ちなみに、動作します)

2.指標そのもののコード ...ふむ......まあ、文句のつけようがない!(笑今はどこもかしこも二重になっていて、コード自体は(私が見る限り)変わっていないのですが......。コードは十分シンプルです(非常によく足し算と引き算だけで動作します) -そのようなエラーはそこに蓄積されていないかもしれない!(私はそうでもないのですが......))

3.最後に思ったこと(確認はできませんが) -THIS IS WHAT :)!:



Bar Closing/Opening Values (???) (その他、潜在的に?)


この数字の出所は?:)))(どんな「添加物」なんだろう :D?)

ここ(Bar Closing.cs)のどこかから持ってきています。

            // Saving the components
            component = new IndicatorComp[1];

            component[0] = new IndicatorComp();
            component[0]. CompName  = "Closing price of the bar";
            component[0]. DataType  = ( parameters. SlotType == SlotTypes.Open) ? IndComponentType. OpenPrice : IndComponentType. ClosePrice;
            component[0]. ChartType = IndChartType. NoChart;
            component[0]. FirstBar  = 2;
            component[0].Value     = Data.Close;

その結果、私の最初の作業仮説は、(たぶん)これのことかな?(「間違っている」(あるいは「正しい」、しかしなぜそのように正確に?)関数で引用値を与えること?)

部分的には、明らかに、求められた関数から得られた値(インジケータを計算する際に操作されたバッファを埋めるために)の質問へprotected static float[] Price(BasePrice price)


一般的には、ミロスラフ - "ボールはあなたのコートにある" :).今のところ、私はMTの指標と完全に互換性があるあなたの指標の新しいコードに気づいた(私はしつこいです:D、そして私はRSIのテーマを "終了 "します)。



同じバーで、最初のインジケータは変換、2番目はMTからのネイティブです。


何かご意見、ご感想はありますか?(6時間後に行く予定)

 

Частично, видимо, заодно к вопросу получаемых значений (для заполнения оперируемых буферов при расчете индикатора) из искомой функции protected static float[] Price(BasePrice price)

すべてのベースクラス、メソッド、プロパティは、すべての取引関数と 同様に2倍 値を返すようになりました(私は6ヶ月前に最後の変更を行いました)。

RSIの計算式に違いがあるようですね。2つ目のサインにあるはずがない「でも、すでに2つ目のサインに違いがあるんです!:)FSBの既存のMTのRSIの計算式を採用してみる。



**編集

すでに修正済み。

デフォルトのパラメータ:RSI(close, 14, smoothed) == MT RSI

            for (int iBar = 1; iBar < Bars; iBar++)
            {
                if ( adBasePrice[ iBar] > adBasePrice[ iBar - 1]) adPos[ iBar] = adBasePrice[ iBar] - adBasePrice[ iBar - 1];
                if ( adBasePrice[ iBar] < adBasePrice[ iBar - 1]) adNeg[ iBar] = adBasePrice[ iBar - 1] - adBasePrice[ iBar];
            }

            double[] adPosMA = MovingAverage( iPeriod, 0, maMethod, adPos);
            double[] adNegMA = MovingAverage( iPeriod, 0, maMethod, adNeg);

            for (int iBar = iFirstBar; iBar < Bars; iBar++)
            {
                if ( adNegMA[ iBar] == 0)
                    adRSI[ iBar] = 100;
                else
                    adRSI[ iBar] = 100 - (100 / (1 + adPosMA[ iBar] / adNegMA[ iBar]));
            }



プログラムは近日中にダウンロード予定です。


 

ミロスラフ - 処方箋に違いはありません。RSIの議論の最初に述べたように、あなたは他の平均化ループ(正しく動作するMovingAverage関数のすべての結果から強制的にSmoothedを作る) :)を持っているだけで、最初の値(MovingAverage実行から残っている :)を除きます。

とにかく、最後に引用したコードから判断して、すべてが うまくいきました(そして、RSIは他の平均化モードを普通に読むようになりました) :)!をヤフオク!


(私が以前保存したインジケーターコードは、すでにこの変更を含んでいます ;) - 念のため、次のパラメータでfsbRSIを呼び出してください。

indLogic = not important

maMethod =2(!MTの用語で重要なMODE_SMMA)

basePrice = 0 (MTでいうところのPRICE_CLOSE)

周期=14

fLevel = not important

iPrvs = 重要ではない

また、ネイティブのRSt(Relative Strength Index)(MTに付属)を使って、結果を完全に 一致させることができます。

ただし、fsbRSIとiRSIはFSBと同じでは ありません :(


では、本題に 戻ろう。


"すべてのベースクラス、メソッド、プロパティは、すべての取引関数と同様に2倍 値を返すようになりました(私は最後の6ヶ月前に変更しました)"。


なるほど、それは素晴らしいですね。ただ、この論文がどのように影響するのかが理解できません。

バーの始値終値は?上記の例では


繰り返しになりますが、なぜ、求める価格が見積もりとDIFFERENTな のか?けた


ダブルは 全く関係ない!引用符で囲まれた値は正規化されており、変数間で単純にコピーしても保存される(完全に同一である)べきである。

同様の値が指標の計算で表示されるようになった場合(計算のためのバッファは、引用符の値に基づいて充填されている場合、保護された 静的 float[] 価格BasePrice価格)、その後我々は美しい(それが見えるかもしれませんが奇妙)、すなわち、それは別のソース(前のフロートのほかに)、 "少し "非正規化データのようです:) です。

 

インジケーターの一部をMT標準のものと同じように少し変更しました。


FSBインジケーターを変更しました。

反復過多損傷

RSIのオシレーター

RSI MA Oscillator

ボリンジャーバンド

標準偏差

ストキャスティクス


以下の指標に違いがあります。

モメンタム

市場円滑化指数


その他

MT Moving Average Oscillator == FSB MACD ヒストグラム

MTモメンタム==FSB変化率

相対的活力指数(Relative Vigor Index) - FSBには含まれません。


これで、FSBとMTの指標はほぼ同じになるはずです。


TODOです。

ストキャスティクス - シグナルの修正。

市場円滑化指数-計算式の改訂。

FSBに搭載されるMTのようなモーメンタム。"Momentum MT "と命名。

FSBに「Relative Vigor Index」を含む。